私はDockerを使用してサーバーを設定しています。 1つのコンテナは、SSLが設定されたnginxイメージを実行します。 2番目のコンテナは、単純なノードアプリケーション(ポート3001上)で動作します。私は2つのコンテナを--linkドッカーパラメータと通信しています。Docker nginxはHTTPからHTTPSへリダイレクト
すべてのHTTPリクエストをHTTPSにリダイレクトする必要があります。他のスレッドやオンラインソースを見ると、return 301 https://$host$request_uri
が見つかりました。ブラウザにhttp://localhostと入力すると、ブラウザにアップストリームの名前が表示されます(https://localhostの代わりにhttps://node_app)。 server_nameを定義したり、ドメインを明示的に定義せずに正常にリダイレクトするにはどうすればよいですか?
を編集してください:https://localhostに直接ブラウザでアクセスするとわかります。 HTTPはそうではありません。
worker_processes 1;
events { worker_connections 1024; }
http {
upstream node_app {
server node:3001;
}
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location/{
proxy_pass http://node_app/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
あなたはnginxのを実行しているベアメタルのLinuxボックスのために行うとちょうど同じように:nginxのによって行わ301のリダイレクトのキャッシュを制御するに興味がある人のために
。ちょうどそれ以下でgoogleしてください。 docker内の両方のリッスンポートを公開しても、現時点では問題にはならないようです(HTTPSはHTTPと同じように公開されます)。 – agg3l
'nginx'設定は正常です。ノードアプリケーションがドメイン名を変更できますか?ブラウザーのプラグインまたはカールを使用して、HTTP応答の「Location」ヘッダーを分析し、リダイレクトの正確な順序を識別します。 –
@RichardSmith Ran 'curl http:// localhost --head'と次の応答を得ました。場所が正しいように見えます。 nginxの/ 1.11.5 日:日、2016年10月16日13時58分39秒GMT のContent-Type:text/htmlの のContent-Length:185 接続:キープ 'HTTP/1.1 301は永久 サーバーを移転しましたalive 場所:https:// localhost/' – Shiv