하위 위치에 대한 액세스를 차단하지 않고 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;
}

관련 정보