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