Назад | Перейти на главную страницу

Nginx SSL-перезапись на localhost

Я хочу перенаправить запрос 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;
    }
}