这是我的情况:我将有一个运行Nginx的前端服务器,以及多个运行Apache + passenger不同Rails应用程序的后端服务器。 我并不试图做任何负载均衡。 我需要做的是设置Nginx根据URL代理连接到特定服务器。例如,client.example.com
应指向x.x.x.100:80
,client2.example.com
应指向x.x.x.101:80
,等等。
我对Nginx并不那么熟悉,但我找不到适合我情况的特定配置。
这是我的情况:我将有一个运行Nginx的前端服务器,以及多个运行Apache + passenger不同Rails应用程序的后端服务器。 我并不试图做任何负载均衡。 我需要做的是设置Nginx根据URL代理连接到特定服务器。例如,client.example.com
应指向x.x.x.100:80
,client2.example.com
应指向x.x.x.101:80
,等等。
我对Nginx并不那么熟悉,但我找不到适合我情况的特定配置。
您可以通过server {}
块匹配不同的URL,然后在每个服务器块内设置反向代理设置。
下面是一张示意图;
server {
server_name client.example.com;
# app1 reverse proxy follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://x.x.x.100:80;
}
server {
server_name client2.example.com;
# app2 reverse proxy settings follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://x.x.x.101:80;
}
此外,您可以根据需要在每个server {}
块中添加更多的Nginx设置(例如error_page
和access_log
)。
/system1/
被代理到http://x.x.x.100/
,而/system2/
被代理到http://x.x.x.120/
? - Asbjørn Ulsbergnginx -t
命令应该会告诉你哪个指令在哪一行)。该指令所在的配置块的作用域是什么(http/server/location)? - cobaco@mohamnag的评论是正确的。 proxy_pass
仅允许在location
中使用。
参见:
http://wiki.nginx.org/HttpProxyModule#proxy_pass
https://www.nginx.com/resources/admin-guide/reverse-proxy/
因此,正确的配置应该是
server {
server_name client.example.com;
location / {
# app1 reverse proxy follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://x.x.x.100:80;
}
}
server {
server_name client2.example.com;
location / {
# app2 reverse proxy settings follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://x.x.x.101:80;
}
}