- CentOS 7
Tengo un contenedor Docker proxy Nginx simple que escucha en el puerto 80. Aquí está el 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"]
Y para este Proxy Nginx aquí está mi 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;}
Y aquí está mi configuración de proxy:
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; }}
Mi configuración de proxy está escuchando en el puerto 80 e intentando solicitar solicitudes de account.staging.mysite.com a un contenedor Docker que se ejecuta en el mismo host Docker que el proxy Ngnix que escucha en el puerto 5023.
Aquí está mi docker-compose.yml para mi proxy Nginx:
version: '3'services: reverseproxy: build: context: ./ dockerfile: docker/Dockerfile image: tsl.devops.reverseproxy.image container_name: tsl.devops.reverseproxy.container ports: - "80:80"
Aquí está el docker-compose.yml para este contenedor Docker que escucha en el puerto 5023: versión: '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"
El Dockerfile realmente no importa mucho para mi pregunta, pero aquí está de todos modos:
FROM tsl.devops.dotnetcore.base.image:2MAINTAINER Brian OgdenWORKDIR /appCOPY ./src/Tsl.Example/bin/Release/netcoreapp2.0/publish .ENTRYPOINT ["dotnet", "Tsl.Example.dll"]
Yo seguí este ejemplo para configurar mi proxy.
Anteriormente hice una pregunta relacionada en los foros de Stackexchange aqui y aqui. En esta pregunta, he refinado y simplificado el escenario a un simple proxy que reenvía una solicitud a un contenedor Docker que escucha en el puerto 5023.
Como mi imagen base es CentOS, he seguido esto aquí para asegurarse de que SELinux está permitiendo el reenvío al puerto 5023