Nginx 역방향 프록시를 IP 주소로 사용할 때 https를 비활성화합니다.

Nginx 역방향 프록시를 IP 주소로 사용할 때 https를 비활성화합니다.

example.com과 같은 사이트의 서버에서 Nginx를 역방향 프록시로 구성했습니다.

클라이언트가 다음과 같은 IP 주소를 사용하여 내 사이트에 액세스하기를 원합니다.http://192.0.2.67

문제는 example.com 사이트에 HTTP를 HTTPS로 리디렉션하도록 설정하는 리디렉션이 있다는 것입니다. (이 example.com은 Cloudflare를 사용합니다.)
클라이언트가 내 사이트에 액세스하면 http://192.0.2.67다음으로 리디렉션됩니다.https://example.com

Nginx 리버스 프록시에서 HTTPS로의 HTTP 리디렉션을 비활성화하려면 어떻게 해야 합니까?

내 코드는 아래와 같습니다.

server {
   listen 80;

   location / {
       proxy_pass http://example.com;
   }
}

답변1

질문에 게시한 코드에 리디렉션이 표시되지 않습니다. 이는 리디렉션이 example.com 측에서 수행되었음을 의미합니다.

리디렉션이 어떻게 수행되는지에 따라 다릅니다. 리디렉션이 단순히 "http TCP/80 => https TCP/433"으로 수행되고 다음 확인 사항이 없는 경우 https로 직접 프록시를 시도할 수 있습니다.

server {
   listen 80;

   location / {
       proxy_pass https://example.com;
   }
}

이것이 도움이 되지 않을 경우, https 리디렉션의 힘을 실현하는 노드가 아니기 때문에 성공할 기회가 많지 않을 것 같습니다.

페이지에 HSTS(HTTP Strict Transport Security) 헤더가 있는 경우 리디렉션은 브라우저 수준에서 수행되며 거기에서 IP를 건너뛸 가능성도 최소화됩니다(이론적으로 이 헤더를 필터링할 수 있음).

답변2

웹 서버가 아닌 페이지가 리디렉션을 수행하는 것 같습니다. PHP를 통해 다음과 같이 달성할 수 있습니다.

<?php header('Location: http://google.com') ?>

그런 경우에는 웹서버 자체를 통해서는 그런 행위를 금지하기 어렵습니다.

답변3

Nginx는 여기로 리디렉션되지 않습니다. 이 HTTP 리디렉션을 보내는 것은 원본 서버입니다. Nginx를 사용하면 전송된 리디렉션을 자신만의 리디렉션 대상으로 바꿀 수 있습니다.

server {
    listen 80;

    location / {
        proxy_pass http://example.com;
        # replace redirects
        proxy_redirect http://example.com http://192.0.2.67;
    }
}

자세한 내용은 다음을 참조하세요.ngx_http_proxy_module 문서

관련 정보