web-dev-qa-db-ja.com

サブディレクトリを持つTomcatのプロキシとしてのNginx

次のようなドメイン名で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;
        }
_
1
Xianlin

設定設定に/を追加したと思います...

この行を見てください:

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;
2
Digital site

私の場合 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;
   }
  }
0
Sunil shakya