Nginx代理容器配置多个proxy_pass失效问题求助
Nginx代理容器配置多个proxy_pass失效问题求助
我用jwilder/nginx-proxy:alpine容器做反向代理已经好几年了,一直都很顺畅没出过问题,我的docker-compose.yml配置如下:
services: nginx-proxy: image: jwilder/nginx-proxy:alpine container_name: nginx-proxy restart: always ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./nginx-certs:/etc/nginx/certs:ro - ./nginx-vhost:/etc/nginx/vhost.d - ./nginx-html:/usr/share/nginx/html - ./uploadsize.conf:/etc/nginx/conf.d/uploadsize.conf - ./subdomain1.mytld.com.conf:/etc/nginx/conf.d/subdomain1.mytld.com.conf:ro
最近我想配置proxy_pass转发到本地IP的其他服务,但遇到了问题:只有单个子域名的配置能正常工作,同时激活两个子域名的转发规则时,整个Nginx代理就失效了。
能正常工作的配置(subdomain1.mytld.com.conf):
server { listen 443 ssl default; ssl_certificate certs/mytld.com.crt; ssl_certificate_key certs/mytld.com.key; server_name subdomain1.mytld.com; location / { proxy_pass https://10.8.0.4/; } # server_name subdomain2.mytld.com; # location / { # proxy_pass http://10.8.0.4:8096/; # } }
不能工作的配置:
server { listen 443 ssl default; ssl_certificate certs/mytld.com.crt; ssl_certificate_key certs/mytld.com.key; server_name subdomain1.mytld.com; location / { proxy_pass https://10.8.0.4/; } server_name subdomain2.mytld.com; location / { proxy_pass http://10.8.0.4:8096/; } }
只要我把第二个子域名的配置取消注释,整个Nginx代理就挂了,我到底哪里没搞对?求各位帮忙看看!
解决方案:
兄弟,你踩了Nginx配置的一个基础小坑!在同一个server块里重复声明server_name是不符合Nginx配置规则的,而且你把两个不同子域名的转发规则塞在同一个server块里,Nginx根本无法正确匹配请求对应的转发逻辑。
正确的做法是为每个子域名单独创建一个独立的server块,因为两个子域名对应的转发地址和端口都不一样,必须分开配置。调整后的配置应该是这样:
# 第一个子域名的server块 server { listen 443 ssl; ssl_certificate certs/mytld.com.crt; ssl_certificate_key certs/mytld.com.key; server_name subdomain1.mytld.com; location / { proxy_pass https://10.8.0.4/; } } # 第二个子域名的server块 server { listen 443 ssl; ssl_certificate certs/mytld.com.crt; ssl_certificate_key certs/mytld.com.key; server_name subdomain2.mytld.com; location / { proxy_pass http://10.8.0.4:8096/; } }
另外补充一点:你原来配置里的listen 443 ssl default中的default参数,应该只给你想作为默认 fallback的server块加上(比如当请求的域名没有匹配到任何server块时,就走这个默认的),如果多个server块都加default,也会导致Nginx的规则匹配出现冲突哦。
调整完配置后,重启nginx-proxy容器应该就能正常工作啦!
备注:内容来源于stack exchange,提问作者damarges
相关产品推荐
相关产品推荐

