nginx反向代理多个后端

Cap*_*ard 39 nginx

这是我的情况:我将有一个运行nginx的前端服务器,以及运行带有不同rails应用程序的apache + passenger的多个后端服务器.我不是想做任何负载平衡.我需要做的是设置nginx以基于url代理到特定服务器的连接.IE,client.domain.com应指向xxx100:80,client2.domain.com应指向xxx101:80等.

我对nginx并不熟悉,但我找不到符合我情况的在线特定配置.

谢谢.

cob*_*aco 39

您可以将不同的URL与服务器块匹配,然后在每个服务器块内部进行反向代理设置

server { 
  server_name client.domain.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.domain.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;
}
Run Code Online (Sandbox Code Playgroud)

显然进一步增加nginx的设置(例如server {},error_page根据需要在每一个,...)access_log-块

  • 我把它放在启用了站点的配置文件中并重新启动了nginx,现在我在日志中收到了这个错误:/etc/nginx/sites-enabled/my.domain.com中不允许这样的指令 (6认同)
  • 是否可以根据路径而不仅仅是传入的主机/权限来配置要代理的每个源服务器?即`/ system1 /`代理到`http:// xxx100 /`而`/ system2 /`代理到`http:// xxx120 /`? (2认同)

jal*_*tek 24

@ mohamnag的评论是对的.proxy_pass只允许进入location

看到:

http://wiki.nginx.org/HttpProxyModule#proxy_pass

https://www.nginx.com/resources/admin-guide/reverse-proxy/

所以正确的配置就是

server { 
    server_name client.domain.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.domain.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @EzizDurdyyev:“sites-enabled”是恕我直言,与 Ubuntu 相关的配置文件布局,并且仅包含指向“sites-available”中可用站点的符号链接。但是,是的,这应该放置在“可用站点”下的单个站点配置中。 (2认同)