次のようなドメイン名でTomcatサーバーのNginxプロキシを設定したい
_example.com/demo/sample
example.com/demo/manager
example.com/demo/other_apps
...
_
これが私のNginx _server block
_構成です
_server {
listen 80;
server_name example.com;
location /demo/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $Host;
proxy_pass http://IP_ADD_Tomcat_SERVER:8080/;
}
location ~ /\.ht {
deny all;
}
## Only allow these request methods ##
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
## Do not accept DELETE, SEARCH and other methods ##
}
_
ここで2つの問題が発生しました。
最初の問題:
_TOM_CAT_INSTALL_DIR/webapps/sample/
_に静的ページ_hello.jsp
_が含まれている場合、次のURLで機能します。
example.com/demo/app1/
ただし、URLでは機能しません:
example.com/demo/app1
Nginxプロキシを機能させるために、URLの最後に末尾のスラッシュ_/
_を追加する必要があるのはなぜですか?
2番目の問題:
_TOM_CAT_INSTALL_DIR/webapps/manager
_に動的Webページである_index.jsp
_ファイルが含まれている場合、URLでは機能しません
example.com/demo/manager/
URLは
example.com/manager /..。
パラメータの長いリストが続きます。
_/demo/
_文字列をWebブラウザのURLに手動で追加すると、再び機能します。
Nginxプロキシをサブディレクトリ_/demo/
_で機能させるにはどうすればよいですか?
更新: Tomcatマネージャーサブディレクトリの書き換えが欠落している問題は、index.jspファイルでrequest.getContextPath()
が/ demo /サブディレクトリをURLに自動的に追加しないことです。 .jspファイルコードを手動で変更する必要があるようです。
私のようにjspコードを変更する方法がわからない場合は、Nginxで以下のコードを使用して回避できます。
_# Must add the trailing '/' for both location and proxy_pass
location /demo/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $Host;
proxy_pass http://TOM_CAT_SERVER_IP_ADDR:8080/;
}
# ONLY work for manager apps, for other apps,
# You must add more rewrite rules like the below
location /manager/ {
rewrite ^/(.*)$ /demo/$1 last;
}
_
設定設定に/
を追加したと思います...
この行を見てください:
proxy_pass http://IP_ADD_Tomcat_SERVER:8080/;
末尾のスラッシュを削除する必要があり、正常に機能するはずです。
このような:
proxy_pass http://IP_ADD_Tomcat_SERVER:8080;
試してみて、うまくいくか見てみてください!!
pdate#1location /
に「同じタイプミス」という別の間違いがあることに気づきました
2番目のスラッシュを削除すると、正常に機能するはずです!!
このように:このlocation /demo {
の代わりにlocation /demo/ {
更新#1:これを使用してURLをテストできます
$ curl -I http://yoururl.com
そして、どのような結果が得られるかを確認してください。このようにして、それが機能しているかどうかを知ることができます。
更新#3:
.jsp
拡張機能を使用するように設定するには、vhostに次のコードを含める必要があります。
location ~ \.jsp$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
}
また、/demo
を機能させるには、server_name example.com
の下に書き換えコードを追加する必要があります。
rewrite ^/(.*)$ /demo/$1;
私の場合 http:// localhost:8080/demo 最初のページは機能していますが、画像やその他のコンポーネントがサーバーから取得されないため、次のマッピングを追加します
server {
listen 80;
listen [::]:80;
server_name www.example.org example.org;
#remove /demo if it come to URI otherwise it add two time for call proxy
rewrite ^/demo(.*)$ $1;
rewrite ^/(.*)$ /demo/$1;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
}
}