Я хочу перенаправить запрос localhost на HTTPS. Вот как выглядит мой .conf:
server {
listen 80;
listen 443 ssl;
ssl_certificate /etc/ssl/localhost.crt;
ssl_certificate_key /etc/ssl/localhost.key;
server_name localhost;
return 301 https://$server_name$request_uri;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
Я запускаю это в контейнере Docker с -p 80:80 -p 443:443
но вызов сервера из браузера приводит к возникновению цикла https://localhost/
звонки.
Оба ваши https
и http
серверы используют один и тот же блок конфигурации, который сообщает nginx о перенаправлении на https://$server_name$request_uri
адрес. Это причина цикла перенаправления.
Вам необходимо иметь отдельный server
блок для https
, где вы обслуживаете фактический контент, и у вас есть перенаправление только в http
блок.
В вашем случае конфигурация будет выглядеть примерно так:
server {
listen 80;
server_name localhost;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/ssl/localhost.crt;
ssl_certificate_key /etc/ssl/localhost.key;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}