Я настраиваю веб-сервер nginx для поддержки нескольких виртуальных хостов. Следуя лучшей практике, я хочу, чтобы любой запрос http: // перенаправлялся на эквивалентный https: //.Как настроить nginx на перенаправление на https ... кроме одного каталога
Это очень просто, но я хочу иметь одно исключение: любой запрос на любой файл под /.well-known/ должен быть передан как http, без перенаправления https. Любой, кто работал с LetsEncrypt, распознает каталог «.well-known» как место, где LetsEncrypt ищет файлы проверки. Эти должны быть обработаны по HTTP-протоколу.
До сих пор у меня есть файл конфигурации «по умолчанию», которая выглядит как:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/default/www;
index index.php index.html index.htm;
location ^~ /.well-known/ {
allow all;
}
location/{
return 301 https://$host$request_uri;
}
}
Тогда для каждого виртуального хоста, у меня есть отдельный файл, который выглядит следующим образом:
server {
listen 443 ssl;
server_name myexamplevirtualhost.com;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# lots more SSL-related stuff
location/{
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name myexamplevirtualhost.com;
location/{
return 301 https://$server_name$request_uri;
}
location /.well-known/ { }
}
Если я запрашиваю, например, http://myexamplevirtualhost.com/
, я перенаправляюсь на https://myexamplevirtualhost.com/
- это то, что я хочу. Аналогично, прямой запрос для https://myexamplevirtualhost.com/
работает по назначению.
Однако, если я попробую: http://myexamplevirtualhost.com/.well-known/foo123
, вместо сервера, просто обслуживающего http://myexamplevirtualhost.com/.well-known/foo123
(который является целью), он перенаправляет на https://myexamplevirtualhost.com/.well-known/foo123
.
Я пробовал много разных вещей - меняя порядок правил размещения и т. Д. - но я все еще не могу получить поведение, которое я хочу.
Что я делаю неправильно?
У вас есть HTTP Strict Transport Security? –
Да, серверный блок для отдельных доменов включает в себя: add_header Strict-Transport-Security max-age = 15768000 Хмм. Это может быть моей проблемой. – slamci