全部博文(1015)
分类: LINUX
2012-01-18 15:56:20
在使用nginx时对于upstream的server的测试中发现,nginx默认对其使用的是基于IP的转发,这就意味着对于同IP、同端口、不同域名时无法进行转发。
在官方WIKI:没有查到相应的解决方案。
在GOOGLE上查到多篇几乎无人问同样的问题,最终发现的这篇文章:,也进一步证实了的猜测是正确的.
以下引用了的原文中的解决方案:
对于后端是同一端口多域名转发的nginx proxy。在nginx中的默认proxy是只能对后面real server做端口转发的,而不能做域名转发。
这个是因为默认情况下:
proxy_set_header Host $proxy_host;这样就等于前端输入域名后到nginx这里直接转换成IP进行转发了。
于是我们需要修改proxy_set_header的参数。proxy_set_header Host $http_host;
下面这个例子中backend1权重为5,其他默认为1,最大失效次数3次,如果30秒内没有响应就认为是失效了。
upstream lb {
server yaosansi.com weight=5;
server max_fails=3 fail_timeout=30s;
server unix:/tmp/test3;
}server {
listen 80;
server_name ;
location / {
proxy_store off;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass
}
}