Я хочу 301 перенаправить все не-https и не-www на https://www.example.com
, используя следующую конфигурацию, которую я нашел в другом потоке в качестве принятой ответ. Но у меня это не работает.
Что работает:
https://example.com
-> https://www.example.com
http://example.com
-> https://www.example.com
НО ...
http://www.example.com
-> СЛИШКОМ МНОГО ПЕРЕНАПРАВЛЕНИЙ ... используя curl I. видно, что это всегда перенаправляет на себя ... Вот мой 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;
}
Я понятия не имею, как отлаживать это ... кстати ... это докер скопление роя ... если это поможет ...
После тестирования мне пришлось отредактировать свой исходный ответ, потому что это привело к ошибке конфликтующего имени сервера
.
К сожалению, я не могу сказать вам, почему вы по-прежнему получаете этот цикл перенаправления - возможно, ошибка связана с вашим включением. Но я могу представить вам рабочую (протестированную) конфигурацию, которая выполняет то, о чем вы просили:
В общем: Для довольно простого перенаправления рекомендуется использовать директиву return
вместо redirect
( https://www.nginx.com/blog/creating-nginx-rewrite-rules/ )
Цель: Любая комбинация
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;
}