別のスレッドで見つけた次の設定を受け入れられた回答として使用して、httpsとwww以外のすべてをhttps://www.example.com
に301リダイレクトしたい。しかし、それは私のために働いていません。
機能するもの:
https://example.com
-> https://www.example.com
http://example.com
-> https://www.example.com
しかし...
http://www.example.com
-> TOO MANY REDIRECTS ... curlを使用すると、常に自分自身にリダイレクトされることがわかります...これが私のnginx.conf
です:
server {
# ports
listen 80;
listen [::]:80;
# domain name
server_name example.com www.example.com;
# Redirect all non-https requests
rewrite ^ https://www.example.com$request_uri? permanent;
}
server {
if ($bad_referer) {
return 444;
}
if ($bad_bot) {
return 444;
}
# ports
listen [::]:443 ssl http2;
listen 443 ssl http2;
# domain name
server_name example.com www.example.com;
if ($Host = 'example.com') {
return 301 https://www.example.com$request_uri;
}
# ssl certificate files
ssl_certificate /etc/ssl/certs/domain.crt;
ssl_certificate_key /etc/ssl/private/domain.key;
include basic.conf;
}
何か案は?
更新:さらに奇妙になっています...すべてをsslにルーティングする一般的なルールを作成しようとしました(多くのブログで提案されているように)...現在、wwwバージョンと非wwwバージョンは自分自身にリダイレクトします...
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$Host$request_uri;
}
これをデバッグする方法がわかりません...ところで...これはdockerswarmクラスターです...これが役立つ場合...
これを自分でテストした後、conflicting server name
エラーが発生したため、元の回答を編集する必要がありました。
残念ながら、なぜまだこのリダイレクトループが発生するのかわかりません。おそらく、エラーはインクルードに起因します。しかし、私はあなたが求めていたものを達成する機能する(テストされた)構成をあなたに提示することができます:
一般的に:かなり単純なリダイレクトの場合、return
の代わりにredirect
ディレクティブを使用することをお勧めします( https://www.nginx.com/blog/creating-nginx-rewrite-ルール/ )
目標:どんな組み合わせでも
http
またはhttps
)example.com
またはwww.example.com
)ブラウザに入力すると、https://www.example.com
にリダイレクトされます
ここに設定があります:
server {
listen 80;
server_name www.example.com redirecttest.de;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.example.com;
root /var/www/example.com/http;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
}