나는 다음과 같은 구성으로 프로젝트가 있습니다
1) 주요 웹 사이트가 PHP
2)에 기록 된 API는 NodeJS에 기록됩니다
다른 운영 체제를 실행하는 여러 컴퓨터에서 개발되었으므로 사용중인 컴퓨터에서 프로젝트를 실행할 수 있도록 도커를 사용하기로 결정했습니다.
나는 리버스 프록시로 nginx를가하려고하는 서버 API를 다음과 같은 방식으로 웹 사이트 :
1) example.com -> 웹 사이트
2) api.example.com를 -> API
그러나 노출되지 않은 경우에도 Apache가 자동으로 포트 80을 할당하는 것으로 보입니다. 이것은 동일한 상자에서 실행되는 nginx와 충돌을 일으 킵니다. 아파치/PHP가 자동으로 호스트의 포트 80에 바인딩되는 것을 막을 수있는 방법이 있습니까?
다른 포트로 포트를 매핑하려고했지만 아파치/PHP가 볼 수있는 것처럼 추가 포트를 추가하게 만들었습니다. 여기 아래 :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc830d3562e4 apache_website "docker-php-entrypoin" 3 seconds ago Up 2 seconds 80/tcp, 0.0.0.0:80->8000/tcp apache_website_run_7
고정 표시기-파일 작성
version: '2'
services:
nginx:
build: nginx
ports:
- "80:80"
expose:
- "80"
restart: always
depends_on:
- website
- api
api:
image: node
command: node /var/www/index.js
restart: always
website:
build: php:7.1-apache
ports:
- "80:800"
restart: unless-stopped
의 nginx
0,123,516 dockerfileFROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
의 nginx 설정 파일
worker_processes 4;
events { worker_connections 1024; }
http {
include mime.types;
# fallback in case we can't determine a type
default_type application/octet-stream;
upstream example.com {
server website:80 fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
keepalive_timeout 5;
root /opt/app/public;
location/{
try_files $uri @proxy_to_app;
}
server_name example.com;
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://example.com;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /opt/app/public;
}
}
# API
#========================================================================
upstream api.example.com {
server api:80 fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
keepalive_timeout 5;
root /opt/app/public;
location/{
try_files $uri @proxy_to_app;
}
server_name api.example.com;
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://api.example.com;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /opt/app/public;
}
}
}
어떻게 호스트의 포트 80에 바인딩에서 아파치/PHP를 방지합니까? 컨테이너 간 연결을 위해 포트를 유지하고 싶지만 포트가 호스트에 노출되는 것을 원하지는 않습니다.
nginx에만 80 번 포트를 공개하고 싶습니다.
이 해킹을 고려하여 ports.config 파일을 변경하여 다른 포트를 수신 대기하도록 Apache의 구성을 변경할 수 있음을 알고 있습니다. 그러나 나는 이런 식으로하고 싶지 않다. 가능한 경우 고정 표시기를 사용하여 수정 작업을 수행하려고합니다.
docker-compose 파일에 포트를 지정하지 않은 이유는 무엇입니까?
도커가 파일을 작성합니다. _explicitly_는 포트 80을 노출합니다. –
@Dan Farrell 네, nginx에 해당합니다.그러나 포트가 이미 아파치/PHP (웹 사이트)에 의해 점유되어 있기 때문에 nginx가 실행되지 않습니다. – thedethfox
은 실수로 yaml이 잘못 포맷 되었습니까? –