1つのnginxサーバーのセットアップ(2つの構成ファイル)で、2つのgunicorn Webサーバーをセットアップして実行しています。 1つのgunicornは生産で、もう1つはステージングです。
Nginxがxyz.comへのhttpリクエストとxyz.comへのhttpsリクエストを127.0.0.1:8000のプロダクションgunicornサーバーに提供するようにします。
私はこれでこれを達成しました:
server {
listen 80;
server_name xyz.com;
return 301 https://$http_Host$request_uri;
}
server {
listen 443 ssl;
server xyz.com;
..... <<< ssl stuff
location /{
.... proxy_stuff
proxy_pass http://127.0.0.1:8000;
}
}
また、xyz.com:8080へのhttpトラフィックとxyz.com:8080へのhttpsトラフィックがステージングサーバー@ 127.0.0.1:8081にヒットするようにします。私はxyz.com:8080へのhttpsトラフィックを次のように機能させることができました。
server {
listen 8080 ssl;
server_name xyz.com;
...... << ssl stuff
location / {
...... << proxy stuff
proxy_pass http://127.0.0.1:8081;
}
}
しかし、xyz.com:8080のhttpトラフィックをxyz.com:8080のhttpsトラフィックにリダイレクトする方法が見つからないようです。ポート80で行ったのと同じリダイレクトを試みましたが、成功しませんでした。
いくつかの方向を使用できます。
あなたが言ったことに基づいて、ポート8080でhttpおよびhttpsをリッスンしたいのですが、それは可能ではないと思います。異なるポートに異なるサーバーブロックを設定します。ロケーションブロックを使用すると、同じproxy_passを任意の場所に渡すことができます。
これはおそらく、8080 http、8081 httpsでリッスンし、httpからhttpsに転送している、あなたが言ったことに到達できる最も近いものです。書き直しは正確ではないかもしれませんが、アイデアは理解できます。
server {
listen 8080; # HTTP
server_name example.com;
rewrite ^ https://example.com:8081$request_uri? redirect;
# rewrite ^ https://example.com:8081 redirect; # Alternate rewrite
}
server {
listen 8081 ssl;
server_name example.com;
// ...... << ssl stuff
location / {
// ...... << proxy stuff to forward to http
proxy_pass http://127.0.0.1:8080;
// If you are not proxying to a service on the same server you can use the line below
// proxy_pass http://example.com:8080;
}
}