对于后端是同一端口多域名转发的nginx proxy。在nginx中的默认proxy是只能对后面real server做端口转发的,而不能做域名转发。
这个是因为默认
1 |
proxy_set_header Host $proxy_host; |
这样就等于前端输入域名后到nginx这里直接转换成IP进行转发了。
于是我们需要修改proxy_set_header的参数
1 |
proxy_set_header Host $http_host; |
例如下面一个举例。下面这个例子中backend1权重为5,其他默认为1,最大失效次数3次,如果30秒内没有响应就认为是失效了。
01 |
upstream lb { |
02 |
server backend 1 .test.com weight= 5 ; |
03 |
server backend 2 .test.com: 8080 max_fails= 3 fail_timeout= 30 s; |
04 |
server unix:/tmp/test 3 ; |
05 |
} |
06 |
server { |
07 |
listen 80 ; |
08 |
server_name lb.test.com; |
09 |
location / { |
10 |
proxy_store off; |
11 |
proxy_redirect off; |
12 |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
13 |
proxy_set_header X-Real-IP $remote_addr; |
14 |
proxy_set_header Host $http_host; |
15 |
proxy_pass http://lb; |
16 |
} |
17 |
} |