nginx가 프록시 전용 서브 디렉토리를 리버스하지 못하게하는 방법


11

Apache에서는 하나 이상의 하위 디렉토리 ( "!"포함)를 제외한 모든 것을 ProxyPass 할 수 있습니다.

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Nginx는 무엇입니까?

내 첫 번째 추측은 분명히 작동하지 않습니다.

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }

답변:


11

다음과 같이 proxy_pass를 원하는 경로에 정확하게 바인딩 할 수 있습니다

location = / {
    proxy_pass http://localhost:9999/;
}

이렇게하면 다른 경로가 전달되지 않지만 /

또는

이 구문을 사용하여 하위 디렉토리 만 일치시킬 수 있습니다

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

^~하위 디렉터리와 일치하고 있으므로이 검색 중지 /실행되지 않습니다. 여기에 설명되어 있습니다 .


내 경우에는 root / var / www / site / subdir이 root / var / www / site 여야합니다. 그렇지 않으면 nginx가 / var / www / site / subdir / subdir에 액세스하려고 시도합니다.
Tinus

네 말이 맞아 그 alias대신 또는 대신 사용할 수 있습니다root
Christopher Perrin

1
^~좀 더 설명해 주 시겠습니까? 나는 그것을 무엇을 얻을 수 없습니다. 보내신 링크를 읽으려고했지만 여전히 읽을 수 없습니다. 가장 긴 일치 접두사 위치에“^ ~”수정자가 있으면 정규식이 검사되지 않습니다.
Mohammed Noureldin

@MohammedNoureldin은 본질적으로 경로의 접두사를 일치시키고 정규 표현식을 평가하지 않음을 의미합니다.
Christopher Perrin

1
@MohammedNoureldin 위치에 사용하려는 경로의 첫 번째 부분입니다. 그리고 네, 정규 표현식이 없습니다.
크리스토퍼 페린
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.