【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"錯誤,若是將第一行給刪去,則能夠恢復正常訪問頁面,若是除去註釋,錯誤又出現了。查詢了不少辦法,均沒法解決這個問題,茲將次問題記下,待解決了補齊!

相關文章
相關標籤/搜索