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