ОписаниеDocker апач и Nginx порт конфликт
У меня есть проект со следующими конфигурациями:
1) Основной сайт написан на PHP
2) API написано в NodeJS
Поскольку я разрабатываю несколько машин, работающих под управлением разных операционных систем, я решил использовать докер, чтобы я мог запускать проект на любой машине, которую я использую.
Я пытаюсь иметь Nginx в качестве обратного прокси-сервера, что серверы на API и веб-сайт следующим образом:
1) example.com -> Сайт
2) api.example.com -> API
Однако кажется, что Apache автоматически назначает порт 80, даже если я его не выставил. Это вызывает конфликт с nginx, который также работает в одном поле. Есть ли способ предотвратить автоматическое связывание apache/php с портом 80 хоста.
Я попытался отобразить порт на другой порт, но это заставило apache/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
докер-Compose файл
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 dockerfile
FROM 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;
}
}
}
Как предотвратить Apache/PHP от привязки к порту хоста 80? Я хотел бы сохранить порт для межконтейнерных соединений, однако я не хочу, чтобы порт был открыт для хоста.
Я хотел бы разоблачить порт 80 только для nginx.
Обратите внимание, что я знаю, что мы можем изменить конфигурации Apache, чтобы заставить его слушать другой порт, изменив файл ports.config, поскольку я считаю это взломом. Однако я не хочу этого делать. Я хочу сделать модификацию, используя докер, если это возможно.
Я не понимаю, почему порт подвергается без меня, указывая, что в файле сокета-докера.
Ваш докер скомпонует файл _explicitly_ предоставляет порт 80 –
@ Дана Фаррелла да это для nginx.Однако nginx не запускается, потому что порт уже занят Apache/PHP (веб-сайт). – thedethfox
- это то, что ямль случайно отформатирован? –