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
.