ポート 8443 でノード アプリケーションを実行しています。nginx はポート 80 と 443 で Web 要求を処理し、ユーザーを 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 ルールの後にアプリケーションが動作し始める理由は、ポート リダイレクトによりクライアントが node.js サーバーに直接アクセスし始めるためです。これは、Squid を透過プロキシとして使用する場合と似ています。
この記事が役に立つかもしれません。Apache 宛てであるという事実は無視してください。
幸運を祈ります。よろしくお願いいたします。
答え2
127.0.0.1
アップストリームが で実行されているときに、nginx とアップストリームの間で暗号化を行うのは、少し無意味かつ無駄です127.0.0.1
。
どちらかといえば、リダイレクトを使用したソリューションはiptables
、アップストリームに変更を加えずに nginx を単純に組み込むよりもはるかに効率的です。
しかし、私たちは尋ねなければなりません - nginx の追加のクールな機能を使用していないのであれば、そもそもなぜそれをミックスに追加したいのでしょうか?
適切なアプローチは、 なしでアップストリームを実行しhttps
、nginx を使用して http と https の両方をアップストリームにリダイレクトすることです。現在の構成が機能しない理由は、これまでに貼り付けたスニペットからは明らかではない、何らかの構成エラーに関係している可能性があります。