@MishaXXL

Возможно ли настроить NGINX для работы по http и https без перезапуска?

При попытке запустить такой конфиг, есть проблема
Сперва нужно закомментировать return 301 https://$host$request_uri; до получения сертификатов
Но даже без редиректа, nginx выдает ошибку от 443 сервера, что нет сертификатов
Получается, сперва нужно запускать nginxс настройками только под http, получать сертификаты, а после уже раскомментировать 443 порт и вставлять логику редиректа

Возможно реализовать итоговую логику так, чтобы не останавливать nginxи не комментировать/раскомментировать куски кода?

upstream client {
  server client:5173;
}


server {
    listen [::]:80;
    listen 80;
    server_name $DOMAIN;

    return 301 https://$host$request_uri;

   	location / {
	      proxy_pass http://client/;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}

    	location /.well-known/acme-challenge {
		allow all;
    	        root /var/www/certbot/;
  	}
  
}

server {
    listen [::]:443 ssl;
    listen 443 ssl;

     server_name $DOMAIN;
 
    ssl_certificate /etc/nginx/ssl/live/dev.ru/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/dev.ru/privkey.pem;
 
	location /.well-known/acme-challenge {
	      allow all;
    	      root /var/www/certbot/;
  	}
 
    location / {
	proxy_pass http://client/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  • Вопрос задан
  • 212 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
server {
    listen [::]:80;
    listen 80;
    server_name $DOMAIN;

    location /.well-known/acme-challenge/ {
        allow all;
    	root /var/www/certbot/;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}
Ответ написан
karabanov
@karabanov
Системный администратор
Можешь подкинуть ему самоподписанный сертификат, чтобы валидация конфига прошла и сервер запустился, потом поменяешь на настоящий сертификат.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Если так невмоготу комментировать весь блок 443, можно сделать так:
server {
#    listen [::]:443 ssl;
#    listen 443 ssl;
      listen 80;

     server_name temp.$DOMAIN;
#    ssl_certificate ...
#    ssl_certificate_key ...

Reload nginx-у, получение сертификата(ов), возвращение настроек к нормальному состоянию, опять reload, всё.

P.S. Ну и разумеется безусловный return 301 https://$host$request_uri; будет ломать всю валидацию домена по http.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы