nginx轉發請求給tomcat,因為某些原因,tomcat要保留ContextPath,也就是說,訪問tomcat的時候是http://localhost:8080/Context32/。但是又不想在瀏覽器里體現出來,所以想到用nginx轉發。但是不隨人愿,配置成下面狀態時,注意加粗和下劃線的部分,打開后,如果用permanent,瀏覽器地址是正確的,但是無法post資料到tomcat,如果用last或者不加引數,瀏覽器地址不對,但是可以post資料到tomcat,怎么調整都沒有達成二者都實作的方法,請教高手!
server {
listen 80;
server_name abcd.com *.abcd.com;
root /cdata/www/nginxwww/;
index index.php index.html index.htm;
#rewrite ^/Context32/(.*) /$1 permanent;
#rewrite ^/Context32 / permanent;
location / {
proxy_pass http://localhost:8080/Context32/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
uj5u.com熱心網友回復:
這個問題,我也剛遇到,基本和你一致。這樣的問題本應該很常見。但鮮有人討論,更沒有完美的解決方案。因為大家都能找到折中方案,就此打住,不愿追求極致。建議解決辦法:
核心思想:contextPath得為/。
1.Tomcat均在ROOT下部署
2..修改Jsp中的contextPath為絕對路徑或者/。
實際上,方案2是最好的辦法。因為這樣可以跟contextPath完全解耦了,便于動靜分離。檔案改多一點就辛苦一下吧。
3.有人專門針對于此,撰寫了相應的模塊,可以一試。
https://github.com/tszming/nginx-rewrite-request-body-module
uj5u.com熱心網友回復:
補充方案:if ($request_method != POST) {
rewrite /xxx (.*)$ $1 permanent;
}
因為post請求一般不會影響地址欄。
這樣,就能滿足地址欄優雅,且POST資料傳遞正常。
不過,這種情況主要用于快速解決遺留問題。如果是新規劃系統,還是建議使用方案2。
uj5u.com熱心網友回復:
請問下,我把war包放在tomcat的webapps里面發布,但是我工程里可能存在一些上傳的東西,替換了信的war包之后,之前版本的工程會自動洗掉掉,,請問下怎樣發布工程才可以保留之前工程里面上傳檔案夾里的東西??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/77288.html
標籤:服務器
