- CentOS 7
У меня есть простой контейнер Nginx proxy Docker, прослушивающий порт 80. Вот файл Dockerfile:
FROM centos:7MAINTAINER Brian Ogden# Not currently being used but may come in handyARG ENVIRONMENTRUN yum -y update && \ yum clean all && \ yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \ yum -y makecache && \ yum -y install nginx-1.12.0 wget# Cleanup some default NGINX configuration files we don’t needRUN rm -f /etc/nginx/conf.d/default.confCOPY /conf/proxy.conf /etc/nginx/conf.d/proxy.confCOPY /conf/nginx.conf /etc/nginx/nginx.confCMD ["nginx"]
И для этого прокси-сервера Nginx вот мой nginx.conf:
daemon off;user nginx;worker_processes 2;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024; use epoll; accept_mutex off;}http { include /etc/nginx/mime.types; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; client_max_body_size 300m; client_body_buffer_size 300k; large_client_header_buffers 8 64k; gzip on; gzip_http_version 1.0; gzip_comp_level 6; gzip_min_length 0; gzip_buffers 16 8k; gzip_proxied any; gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json; gzip_disable "MSIE [1-6]\."; gzip_vary on; include /etc/nginx/conf.d/*.conf;}
А вот моя конфигурация прокси-сервера:
upstream accountstaging { server 127.0.0.1:5023;}server { listen 80; server_name account.staging.mysite.com; location / { proxy_pass http://accountstaging; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; }}
Моя конфигурация прокси-сервера прослушивает порт 80 и пытается запрашивать запросы от account.staging.mysite.com к контейнеру Docker, работающему на том же хосте Docker, что и прокси-сервер Ngnix, прослушивающий порт 5023.
Вот мой docker-compose.yml для моего прокси-сервера Nginx:
version: '3'services: reverseproxy: build: context: ./ dockerfile: docker/Dockerfile image: tsl.devops.reverseproxy.image container_name: tsl.devops.reverseproxy.container ports: - "80:80"
Вот docker-compose.yml для этого контейнера Docker, прослушивающего порт 5023:версия: '3'
services: apistaging: build: context: ./ dockerfile: docker/staging/Dockerfile image: tsl.api.example.image container_name: tsl.api.example.container ports: - "127.0.0.1:5023:80"
Файл Dockerfile на самом деле не имеет большого значения для моего вопроса, но в любом случае он здесь:
FROM tsl.devops.dotnetcore.base.image:2MAINTAINER Brian OgdenWORKDIR /appCOPY ./src/Tsl.Example/bin/Release/netcoreapp2.0/publish .ENTRYPOINT ["dotnet", "Tsl.Example.dll"]
Я последовал за ним этот пример чтобы настроить мой прокси-сервер.
Ранее я задавал соответствующий вопрос на форумах Stackexchange здесь и здесь. Этот вопрос я усовершенствовал и упростил сценарий до простой переадресации запроса прокси-сервером одному контейнеру Docker, прослушивающему порт 5023.
Поскольку мой базовый образ - CentOS, я следовал это здесь чтобы убедиться, что SELinux разрешает пересылку на порт 5023