포트 8443에서 실행되는 노드 애플리케이션이 있습니다. 내 nginx는 포트 80 및 443에서 웹 요청을 처리하고 사용자를 8443으로 리디렉션해야 합니다.
내 구성은 다음과 같습니다 /etc/nginx/sites-enabled/default
.
upstream my_upstream {
server 127.0.0.1:8443;
keepalive 64;
}
server {
listen 80;
server_name myapp.com;
rewrite ^/(.*) https://myapp.com/$1 permanent;
}
server {
listen 443 ssl;
server_name 12.34.12.34 www.myapp.com myapp.com *.myapp.com;
ssl_certificate /path/to/my/cert.crt;
ssl_certificate_key /path/to/my/private.key
// other ssl params
location / {
proxy_redirect off;
proxy_pass https://my_upstream;
// other params
}
}
이 구성을 사용하면 다음을 통해 내 앱에 액세스할 수 있습니다.
http(s)://myapp.com:8443
다음 iptables를 추가할 때만
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A OUTPUT -p tcp --dport 443 -o lo -j REDIRECT --to-port 8443
접근할 수 있어요
http(s)://myapp.com
질문:
iptables를 사용하여 포트 80에서 443, 8443으로 리디렉션하는 것은 다소 어리석은 것 같습니다. nginx로만 이 작업을 수행할 수 있는 방법이 있습니까(또는 이것이 갈 수 있는 방법입니까?).
이 접근 방식(8443과 같은 비표준 포트에 애플리케이션을 두는 것)이 전혀 좋은 생각입니까?
답변1
쉬운. node.js가 포트 8443에서 실행되고 있고 제가 이해한 한 다른 포트의 요청을 수신하는 다른 서비스가 없으므로 nginx 구성에서 간단히 이 작업을 수행할 수 있습니다.
server {
# here comes the rest of your nginx configuration
location / {
proxy_pass http://127.0.0.1:8443;
}
}
iptables 규칙을 사용할 필요도 없고 nginx 구성에 업스트림 섹션을 만들 필요도 없습니다. nginx는 모든 포트 리디렉션을 기본적으로 수행할 수 있고 수행해야 합니다(일반적으로 모든 역방향 프록시가 수행하는 것처럼).
내가 틀렸을 수도 있지만 iptables 규칙 이후에 애플리케이션이 작동하기 시작하는 이유는 Squid를 투명 프록시로 사용할 때와 유사한 포트 리디렉션으로 인해 클라이언트가 node.js 서버에 직접 액세스하기 시작하기 때문입니다.
이 기사가 도움이 될 수 있습니다. Apache로 전달되었다는 사실을 무시하십시오.
행운과 안부를 전합니다!
답변2
127.0.0.1
업스트림 이 127.0.0.1
.
오히려 iptables
리디렉션을 사용하는 솔루션은 업스트림을 변경하지 않고 단순히 nginx를 혼합하는 것보다 실제로 훨씬 더 효율적입니다.
하지만 우리는 질문해야 합니다. nginx의 추가 멋진 기능을 사용하지 않는다면 먼저 왜 그것을 혼합에 추가하고 싶습니까?
적절한 접근 방식은 NET Framework 없이 업스트림을 실행하고 https
nginx를 사용하여 http와 https를 모두 업스트림으로 리디렉션하는 것입니다. 현재 구성이 작동하지 않는 이유는 지금까지 붙여넣은 스니펫에서 명확하지 않은 일부 구성 오류와 관련이 있을 수 있습니다.