我试图打包使用nginx作为代理的2个应用程序,并将每个configuration文件传递到/etc/nginx/conf.d/ 。
在一个文件( combined.conf )中做这个很好:
upstream backend1 { http://localhost:8989; } upstream backend2 { http://localhost:8990; } server { location /backend1/ { proxy_pass http://backend1; } location /backend2/ { proxy_pass http://backend2; }
但是,当分成两个文件时,其中一个redirect系统失败:
backend1.conf :
upstream backend1 { http://localhost:8989; } server { location /backend1/ { proxy_pass http://backend1; }
backend2.conf :
upstream backend2 { http://localhost:8990; } server { location /backend2/ { proxy_pass http://backend2; }
所以我的问题是:一个http节点可以有2个不同的server孩子?
Nginx的文档没有提到这一点。
其他人似乎已经成功的这种架构虽然:(
Nginx的版本是1.1.19-1ubuntu0.1。
感谢您的任何build议!
经过这么隆隆的testing之后,我想出了一个让它工作的方法,并且能够为每个应用程序提供一个configuration文件。
在这里,它被分派在一个通用文件和一对上行/位置文件中,每个应用程序:
/etc/nginx/conf.d/common-proxies.conf :
include /upstreams/*.conf; server { include /locations/*.conf }
/etc/nginx/locations/backend1.conf
location /backend1/ { upstream http://backend1; }
/etc/nginx/locations/backend2.conf
location /backend2/ { upstream http://backend2; }
/etc/nginx/upstreams/backend1.conf
upstream backend1 { http://localhost:8989; }
/etc/nginx/upstreams/backend2.conf
upstream backend2 { http://localhost:8990; }
一个http块可以有许多服务器子项。 但是,nginxselect一个服务器块来处理请求。 所以,请求永远不会“看到”后端2的位置,因为它与第一个服务器块相匹配。