nginx reverse proxy multiple backends
@mohamnag's comment is right. proxy_pass
is only allowed inside a location
See:
http://wiki.nginx.org/HttpProxyModule#proxy_pass
https://www.nginx.com/resources/admin-guide/reverse-proxy/
So the correct config would be
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;
}
}
You can match the different URLs with server {}
blocks, then inside each server block, you'd have the reverse proxy settings.
Below, an illustration;
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;
}
Also, you may add further Nginx settings (such as error_page
and access_log
) as desired in each server {}
block.