Cloudflareプロキシの背後にWebサイトをホストしています。つまり、CloudflareはHTTP(ポート80)およびHTTPS(ポート443)のトラフィックを処理しますが、サーバーへのすべてのリクエストはポート80を経由します。
2つを区別するために、Cloudflareには、ユーザーの接続に基づいて「http」または「https」に設定されるX-Forwarded-Proto
ヘッダーが含まれます。
X-Forwarded-Proto: http
ヘッダーを持つすべてのリクエストをサイトのSSLバージョンにリダイレクトしたいと思います。 nginx構成でこれをどのように達成できますか?
これを行う最も簡単な方法は、if
ディレクティブを使用することです。より良い方法があれば、if
ディレクティブは非効率的だと人々が言うので、私に知らせてください。 Nginxはヘッダー内のダッシュをアンダースコアに変換するため、X-Forwarded-Proto
は$http_x_forwarded_proto
になります。
server {
listen 80;
server_name example.com; # Replace this with your own hostname
if ($http_x_forwarded_proto = "http") {
return 301 https://example.com$request_uri;
}
# Rest of configuration goes here...
}
Mapディレクティブを使用してみてください: http://nginx.org/en/docs/http/ngx_http_map_module.html#map
そんな感じ...
map $http_x_forwarded_proto $php_backend {
"https" "https_php_backend named loc";
default "default_php_backend named loc";
}
server{
location / {
proxy_pass http://$php_backend;
}
}
このコードは抽象的ですが、試してみることができます...