我想设置一个nginx反向代理docker容器,它根据请求的URL转发。我已经设置了从domain.com的所有子域指向nginx服务器容器的dns。
示例场景:
请求:subdomain1.domain.com 应该转发到abc.xyz.com:8087
请求:subdomain2.domain.com 应该转发到abc.xyz.com:8088
我需要知道我应该在dockerfile和nginx.conf文件中写什么来实现上述目标。这些前锋也将在未来增长,有没有办法以编程方式添加这些?
答案 0 :(得分:0)
(我必须进行SSL终止,所以在这里你也会找到与SSL相关的文件,如果它不适合你,请忽略它们。)
FROM nginx:alpine
#create the server and location configuration
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY cert.pem /etc/nginx-certs/cert.pem
COPY key.pem /etc/nginx-certs/key.pem
COPY ssl.pass /etc/nginx-certs/ssl.pass
RUN mkdir -p /etc/nginx-logs/
此nginx配置为将来自http s ://的任何请求反向代理到http://:8080
server {
listen 443;
server_name localhost;
ssl_certificate /etc/nginx-certs/cert.pem;
ssl_certificate_key /etc/nginx-certs/key.pem;
ssl_password_file /etc/nginx-certs/ssl.pass;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
underscores_in_headers on;
access_log /etc/nginx-logs/<MYAPPLICATION NAME>.access.log;
client_body_in_file_only on;
location / {
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-Proto $scheme;
# Fix the “It appears that your reverse proxy set up is broken" error.
proxy_pass http://<MYIPADDRESS>:8080/;
proxy_read_timeout 90;
proxy_redirect http://<MYIPADDRESS>:8080 https://localhost;
}
}
请注意,我们有一个非常原始的需求,所以这个设置为我们做了诀窍。以此为出发点。不要将此示例用于nginx最佳实践等。
满足您的特殊需求
请求:subdomain1.domain.com应转发到abc.xyz.com:8087
请求:subdomain2.domain.com应转发到abc.xyz.com:8088
您可以进一步自定义nginx.conf,可以为不同的路由添加更多位置。这里https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms数字海洋在记录nginx的基础知识方面做得很好。
而且,为了管理,nginx.conf,我不会自动化配置,我只是将它添加到像git这样的版本控制系统,并设置像drone.io或travis这样的CI-CD系统来管理部署。再一次,那就是我,你可能会有完全不同的需求。
server {
listen 80;
return 301 https://$host$request_uri;
}