web-dev-qa-db-ja.com

nginxは2つの異なるポートでHTTPおよびHTTPSリクエストを受け入れます

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で行ったのと同じリダイレクトを試みましたが、成功しませんでした。

いくつかの方向を使用できます。

4
bazfire

あなたが言ったことに基づいて、ポート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; 
  }
}
8
Tim