Nginx的upstream与server_name命名冲突的bug?
2012-06-06 17:51:26   来源:我爱运维网   评论:0 点击:

今天碰到一例Nginx的upstream命名与server_name命名冲突造成的问题,而且此问题主要出现在一些登录和注销的情况下。现象:Nginx服务器发对...

今天碰到一例Nginx的upstream命名与server_name命名冲突造成的问题,而且此问题主要出现在一些登录和注销的情况下。
 
现象:
 Nginx服务器发对请求给出的reponse header里面,有个location
是http://w2c.5iops.com/admin/zt
客户端接收到的却是.5iops.com/admin/zt

 
排查:
Nginx配置:
upstream w2c{
server 10.10.10.112:80 weight=5 max_fails=3 fail_timeout=5s;
server 10.10.10.79:80 backup;
}

server {
server_tokens off;
listen 80;
server_name w2c.5iops.com w2c.5iops.com;

access_log /home/logs/nginx/w2c.5iops.com-access.log main;
error_log /home/logs/nginx/w2c.5iops.com-error.log error;

proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
location / {
proxy_pass http://w2c;
}
}
 
看nginx日志有如下信息:
10.208.20.99 w2c.5iops.com - [06/Jun/2012:13:49:15 +0800] "GET /admin/zt/quick/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5io
ps.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.
com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com
/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/zt HTTP/1.0" 302 0
"http://w2c.5iops.com/admin/zt" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0)
Gecko/20100101 Firefox/12.0" "116.228.90.154" "0.007" "127.0.0.1:9000" "302" "0.008" 10.208.20.99 w2c.5iops.com - [06/Jun/2012:13:49:15 +0800] "GET
/admin/zt/quick/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5io
ps.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.
com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com
/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/zt HTTP/1.0"
302 0 "http://w2c.5iops.com/admin/zt" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0)
Gecko/20100101 Firefox/12.0" "116.228.90.154" "0.007" "127.0.0.1:9000" "302" "0.007"
10.208.20.99 w2c.5iops.com - [06/Jun/2012:13:49:15 +0800] "GET
/admin/zt/quick/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5io
ps.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.
com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com
/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/.5iops.com/admin/zt HTTP/1.0" 404 87 "http://w2c.5iops.com/admin/zt" "Mozilla/5.0 (X11; Ubuntu; Linux
i686; rv:12.0) Gecko/20100101 Firefox/12.0" "116.228.90.154" "0.003" "127.0.0.1:9000"
"404" "0.004"


看来是:就那个upstream + proxy_pass将response header变了。

解决,修改Nginx配置为:

upstream 5iops-w2c{
server 10.10.10.112:80 weight=5 max_fails=3 fail_timeout=5s;
server 10.10.10.79:80 backup;
}

server {
server_tokens off;
listen 80;
server_name w2c.5iops.com w2c.5iops.com;

access_log /home/logs/nginx/w2c.5iops.com-access.log main;
error_log /home/logs/nginx/w2c.5iops.com-error.log error;

proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
location / {
proxy_pass http://5iops-w2c;
}
}

问题解决。

总结: 
 
  希望以后有新建 vhost/*.conf  中有upsteam 时最好加个与域名不相干的字符串(如5iops-xxx )。   [[之前我也碰到这个问题之前让我困惑很久,还很不好查]]。
 
  这样是proxy_pass就不会带上upsteam再加一级域名+ get。  (这里有正则,所不也最好不要加一些特殊符号。)这可能是Nginx的upstream与server_name命名冲突的bug。

相关热词搜索:Nginx upstream server_name

上一篇:基于开源Flash Server:Red5构建RTMP流媒体播放平台
下一篇:WebCDN流量及QOS异常故障RC查找与经验分享

分享到: 收藏
评论排行