サブロケーションへのアクセスをブロックせずにnginxのルートロケーションからリダイレクトする方法は?

サブロケーションへのアクセスをブロックせずにnginxのルートロケーションからリダイレクトする方法は?

ルートパスが要求されたときにのみnginxが別のパスにリダイレクトされるようにするにはどうすればよいですか?

これは私のサーバー構成の一部です。

server {
        listen     80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

    # Make site accessible from http://localhost/
    server_name wiki wiki.leerdomain.lan;

    # Note: There should never be more than one root in a 
    #       virutal host
    #   Also there should never be a root in the location.
    #root /var/www/nginx/;

    rewrite ^/$ /rootWiki/ redirect; 


    location ^~ /rootWiki/ {
            resolver 127.0.0.1 valid=300s;
            access_log ./logs/RootWiki_access.log;
            error_log ./logs/RootWiki_error.log;
            proxy_buffers 16 4k;
            proxy_buffer_size 2k;
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            rewrite /rootWiki/(.*) /$1 break;
            proxy_pass http://192.168.1.200:8080;
        }

   location ^~ /usmle/ {
    access_log ./logs/usmle_access.log;

 ...

上記のように設定すると、ルートの下のサブロケーションにアクセスできなくなります。ルートは転送しますが、アプリケーションの代わりにポート8080でサブロケーションを受け取ります/rootWiki/502 Bad Gateway

この行を削除すると:

rewrite ^/$ /rootWiki/ redirect;

rootWikiアプリケーションにアクセスでき、ルートのすべてのサブロケーションは問題ありません。

私が見るにはそれがうまくいくはずですが、そうではありません。

答え1

別の「場所」ディレクティブを使用して構成を区別しましょう。

# location for pure root path with trailing EOL
location ~ ^/$ {
    # Redirect only when we have no one
    # argument like www.example.com/?user=name for example 
    if ($is_args = "") {
        rewrite ^/$ /rootWiki/ redirect; 
    }
}

# After above "location" directive you can use even
# static files for the root path or subfolders.
# For examle:
# www.example.com/index.html
# www.example.com/user/general.html
location / {
    root /var/www/www.example.com/static/;
    index index.html;
}

location ^~ /rootWiki/ {
    resolver 127.0.0.1 valid=300s;
    access_log ./logs/RootWiki_access.log;
    error_log ./logs/RootWiki_error.log;
    proxy_buffers 16 4k;
    proxy_buffer_size 2k;
    proxy_set_header Host $host;
    proxy_set_header X-Real_IP $remote_addr;
    rewrite /rootWiki/(.*) /$1 break;
    proxy_pass http://192.168.1.200:8080;
}

location ^~ /usmle/ {
    access_log ./logs/usmle_access.log;
}

関連情報