루트 경로가 요청될 때만 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;
}