$scheme을 기반으로 한 NGINX 업스트림

$scheme을 기반으로 한 NGINX 업스트림

HTTP 및 HTTPS 트래픽을 모두 제공하는 업스트림이 있습니다. 문제는 NGINX가 올바른 업스트림 포트로 트래픽을 보내도록 하려면 어떻게 해야 합니까?

현재 구성은 다음과 같습니다.

upstream  platfrom-dev-eu-app {
    server 52.***.***.80:443;
}
...
server {
...

    location / {
        proxy_redirect          off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass $scheme://platfrom-dev-eu-app$request_uri;
    }
}

여기서 볼 수 있는 유일한 해결책은 두 개의 업스트림을 추가하는 것입니다.:80두 번째는:443, 그런 다음 if/else를 사용하여 server {}올바른 것을 선택합니다(또는 나중에 포트를 설정합니다 proxy_pass). 예:

upstream  platfrom-dev-eu-app-ssl {
    server 52.***.***.80:443;
}

upstream  platfrom-dev-eu-app {
    server 52.***.***.80;
}
...
    if ($scheme = "http") {
         proxy_pass http://platfrom-dev-eu-app$request_uri;
    }

    if ($scheme = "https") {
        proxy_pass https://platfrom-dev-eu-app-ssl$request_uri;
    }

이것이 올바른 해결책입니까? 아니면 더 적절한 방법이 있나요?

답변1

단순히 두 개의 서버를 선언하면 if 문을 피할 수 있습니다. 이것이 제가 이런 종류의 작업에 사용하는 패턴입니다.

upstream  platfrom-dev-eu-app-ssl {
    server 52.***.***.80:443;
}

upstream  platfrom-dev-eu-app {
    server 52.***.***.80;
}

server {
  listen 80;

  include "common.conf";
  proxy_pass http://platfrom-dev-eu-app$request_uri;
}

server {
  listen 443 ssl;
  # SSL configuration

  include "common.conf";
  proxy_pass https://platfrom-dev-eu-app-ssl$request_uri;
}

common.conf파일을 생성하고 두 서버 모두에 공통 구성을 넣습니다.

실제로 신뢰할 수 있고 안전한 네트워크에 있는 경우 역방향 프록시에서 SSL을 종료한 다음 일반 텍스트로만 애플리케이션 서버와 통신할 수 있습니다. 그런 다음 애플리케이션 서버의 SSL 연결에 사용되는 포트에 서버를 정의하고 fastcgi 매개변수를 HTTPS로 설정합니다 on.

관련 정보