web-dev-qa-db-ja.com

proxy_passと$ http + CloudFlareを使用したnginxリダイレクトループ

HTTPSを強制するリダイレクトを追加するまで、nginx構成はうまく機能します。リダイレクト前の作業構成は次のとおりです。

server {
  listen 80;
  listen 443 default_server ssl;
  server_name my-domain.com www.my-domain.com;
  client_max_body_size 5M;

  location / {
    proxy_pass http://localhost:3000;
  }
}

サーバーのポート3000でアプリを実行していますが、ドメインのポート80とポート443(httpとhttps)でアプリを提供したいと考えています。ただし、ユーザーがHTTP経由でアクセスしようとしたときにHTTPSにリダイレクトすることも必要です。私はそれを設定するために この答え を使用しました:

server {
  listen 80;
  server_name my-domain.com www.my-domain.com;
  client_max_body_size 5M;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 default_server ssl;
  server_name my-domain.com www.my-domain.com;
  client_max_body_size 5M;

  location / {
    proxy_pass http://localhost:3000;
  }
}

ただし、これによりリダイレクトループが発生します。私はnginxに比較的慣れていないことを認めます。そのため、誰かが私をこれを説明できるリソースに紹介してくれるなら、それは大いにありがたいです。私の推測では、それはlocationやproxy_passの使用に関係していると思いますが、ドキュメントを掘り下げても、より深い洞察は得られませんでした。

注意すべきもう一つのことは、このアプリはCloudFlareを介して送信されているということです。

1
jamesplease

これは解決されました。私は元のnginx構成に固執し、CloudFlareページルールを使用してHTTPSを強制しました。

使用されたルールは次のとおりです。

http://*gistbook.io/* =>常にHTTPSを使用する

0
jamesplease