NGINX - URL을 유지하면서 다른 IP로 요청 리디렉션

NGINX - URL을 유지하면서 다른 IP로 요청 리디렉션

동적 DNS가 설정되어 있고 집 밖에서도 다른 컴퓨터에 액세스할 수 있기를 원합니다. 현재 192.168.1.2에서 nginx를 실행하는 라즈베리 파이가 있고 라우터는 192.168.1.1에 있습니다. 또한 라우터에서 라즈베리 파이로 전달되는 포트 80이 있으므로 동적 DNS URL을 누르기만 하면 파이 랜딩 페이지에 phpinfo() 페이지가 표시됩니다.

mydns.com/device1다음으로 내부적으로 다른 장치로 리디렉션하는 동안 해당 URL을 유지하고 싶습니다 .

즉, 을 보게 되지만 내부적 http://mydns.com/device1으로 접근하게 됩니다 http://192.168.1.3. 또한 입력하면 mydns.com/device1/login내부적으로 http://192.168.1.3/login.

sub_filter나는 다음과 같이 사용하려고합니다 :

sub_filter_once off;
sub_filter_types text/html;
sub_filter ""http://192.168.1.3" "http://192.168.1.2"
proxy_pass http://192.168.1.3/;
proxy_set_header Host $host;

이것은 어느 정도 작동하지만 완전히 작동하지는 않습니다. 경로가 리디렉션되지 않습니다(예: 하위 폴더의 파일). 예를 들어:

나는 이것을 원한다: http://mydns.com/device1/style/basic.css

하지만 이것을 얻으십시오 : http://mydns.com/style/basic.css

이로 인해 Chrome의 콘솔 보기에서 볼 수 있듯이 404가 발생합니다. 다음 오류가 발생합니다.

Failed to load resource: the server responded with a status of 404 (Not Found)

이것은 경로에 있습니다. http://mydns.com/style/basic.css하지만 http://mydns.com/device1/style/basic.css.

를 입력하면 주소 표시줄에서 CSS 파일에 액세스할 수 있습니다 http://mydns.com/device1/style/basic.css. 그래서 액세스 가능하다는 것을 알고 있지만 NGINX가 이러한 폴더를 전달/다시 쓰도록 할 수는 없습니다.

누구든지 도와줄 수 있나요? 감사해요

답변1

여러 가지 이유가 있을 수 있습니다.

  • Proxy_pass를 사용하여 위치에 들어가기 전에 무언가가 귀하의 URI를 다시 작성합니다.
  • 또는 이전에 처리된 일부 위치에서 일치하는 하위 URI로 제공됩니다.
  • 또는 (nginx 버전에서) Proxy_pass 지시문의 IP 뒤에 슬래시가 /있으면 nginx가 슬래시를 프록시 URI로 가져와 전송하기 전에 다시 작성합니다.

전체 구성을 보지 않고는 당신 측에서 정확히 무슨 일이 일어나는지 볼 수 없습니다. 또는 디버그 로그를 활성화해 볼 수도 있습니다(이 문제의 원인을 확인하기 위해).

어쨌든 위에서 언급한 근거와 관련하여 이를 해결하는 3가지 방법이 있습니다.

  • 다시 작성하는 것을 방지하거나 rewrite ... breakURI를 확장하기 위해 Proxy_pass 앞에 추가 항목을 추가해야 합니다.
  • proxy_pass http://192.168.1.3/device1/;또는 like에 대한 일부 (매핑) 변수 로 정의하거나 proxy_pass http://192.168.1.3/$device/;심지어 완전한 유래 URI를 사용하여 정의할 수도 있습니다 proxy_pass http://192.168.1.3$request_uri;(여기에는 없습니다 /).
  • 또는 후행 슬래시를 제거하려고 시도할 수 있으므로 proxy_pass http://192.168.1.3;(슬래시 포함) 대신 proxy_pass http://192.168.1.3**/**;(슬래시 없이)
    이 경우 "요청 URI는 원래 요청이 처리될 때 클라이언트가 보낸 것과 동일한 형식으로 서버에 전달됩니다"(인 경우) 재작성이 발생하지 않음) 또는 "변경된 URI를 처리할 때 전체 정규화된 요청 URI가 전달됩니다."(일부 재작성이 발생했거나 별칭이 포함된 임시 위치가 try_files ... @proxy전달된 경우)

보세요프록시패스Proxy_pass 사용의 가능한 모든 변형에 대한 문서입니다.

관련 정보