【Nginx】關於域名轉發proxy_pass


  在配置nginx的時候,有一個需求,訪問m.XXX.com的時候,需要實際訪問www.YYY.com/m,並且域名不能發生變化。

  達成這個需求有兩種做法:

    第一種就是301跳轉,使用rewrite來跳轉域名,不過這樣域名就會發生變化,與需求不符。

    第二種就是用proxy_pass跳轉,只要指定跳轉目的域名,就可以在訪問的時候自動跳轉訪問目的域名,而且域名也不會發生變化。所以這里需要使用第二種方法。


  首先在/etc/nginx/conf.d/建立一個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 }    

  這里要注意proxy_pass后面域名最后的"/",如果不添加,會跳轉失敗。

  然后在/etc/nginx/nginx.conf的http塊內添加一行:

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

  然后就是重啟nginx:

1 sudo /usr/nginx/nginx -s reload

  這樣就可以在訪問m.XXX.com的時候自動跳轉到訪問www.YYY.com/m了,而且域名不會發生改變。

  這里又出現了一個問題,靜態資源訪問不了,所以我們在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"錯誤,如果將第一行給刪去,則可以恢復正常訪問頁面,如果除去注釋,錯誤又出現了。查詢了很多辦法,均無法解決這個問題,茲將次問題記下,待解決了補齊!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM