【Nginx】关于域名转发proxy_pass

  在配置nginx的时候,有一个需求,访问m.XXX.com的时候,须要实际访问www.YYY.com/m,而且域名不能发生变化。css

  达成这个需求有两种作法:html

    第一种就是301跳转,使用rewrite来跳转域名,不过这样域名就会发生变化,与需求不符。java

    第二种就是用proxy_pass跳转,只要指定跳转目的域名,就能够在访问的时候自动跳转访问目的域名,并且域名也不会发生变化。因此这里须要使用第二种方法。nginx


  首先在/etc/nginx/conf.d/创建一个m.XXX.com.conf文件,内容为:web

 1 server
 2 {
 3         listen 80;
 4         server_name m.XXX.com;
 5 
 6         location /
 7         {
 8             proxy_pass http://www.YYY.com/m/;
 9         }
10 }    

  这里要注意proxy_pass后面域名最后的"/",若是不添加,会跳转失败。apache

  而后在/etc/nginx/nginx.conf的http块内添加一行:tomcat

1 include /etc/nginx/conf.d/m.XXX.com.conf;

  而后就是重启nginx:app

1 sudo /usr/nginx/nginx -s reload

  这样就能够在访问m.XXX.com的时候自动跳转到访问www.YYY.com/m了,并且域名不会发生改变。webapp

  这里又出现了一个问题,静态资源访问不了,因此咱们在m.XXX.com.conf里添加静态资源访问设置:测试

 1 server
 2     {
 3         listen 80;
 4         server_name m.XXX.com;
 5 
 6         location /
 7         {
 8             proxy_pass http://www.YYY.com/m/;
 9         }
10 
11         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)$
12         {
13             root /home/YYY/java/apache-tomcat-6.0.41/webapps/ROOT/;
14             expires      30d;
15         }
16     }

  当指定了静态资源的访问目录后,就可以访问到静态文件了。

  至此,需求已经解决!


  在测试后,还出现了一个问题,后台须要获取用户的信息,因此须要在m.XXX.com.conf的location内添加上下面的两行,用以修改请求头:

1 proxy_set_header Host $http_host;
2 proxy_set_header X-Forward-For $remote_addr;

  按理说这样就能够了,但是却出现了"502 Bad Gateway"错误,若是将第一行给删去,则能够恢复正常访问页面,若是除去注释,错误又出现了。查询了不少办法,均没法解决这个问题,兹将次问题记下,待解决了补齐!

相关文章
相关标签/搜索