Да, можно настроить NGINX для работы одновременно по протоколам HTTP и HTTPS без необходимости его перезапуска. Чтобы избежать остановки сервера при изменениях в конфигурации, вместо перезапуска NGINX можно использовать его плавное перезагрузку с помощью команды `nginx -s reload`.
Чтобы настроить NGINX для работы с HTTP и HTTPS, вам нужно будет настроить два серверных блока (server block) — один для HTTP на порту 80 и один для HTTPS на порту 443. В случае, если у вас ещё нет SSL-сертификатов и вы хотите избежать ошибок при запуске NGINX, вы можете установить самоподписанный сертификат для временной работы по HTTPS до того как получите настоящий сертификат.
Пример базовой конфигурации для NGINX:
```nginx
# HTTP server block
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/html;
index index.html index.htm;
}
# Перенаправление с HTTP на HTTPS
# Уберите следующие две строки, если не хотите автоматическое перенаправление
# return 301 https://$server_name$request_uri;
}
# HTTPS server block
server {
listen 443 ssl;
server_name example.com www.example.com;
# Пути к сертификату и приватному ключу
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# Настройки SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers '...';
# Другие директивы SSL...
location / {
root /var/www/html;
index index.html index.htm;
}
}
```
Если вы только начинаете и у вас ещё нет сертификатов, вы можете сгенерировать самоподписанный сертификат и использовать его временно:
```bash
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/example.com.key -out /etc/nginx/ssl/example.com.crt
```
Заполните требуемые данные, и этот самоподписанный сертификат и ключ можно использовать в конфигурации HTTPS.
После изменения конфигурации не забудьте проверить её на ошибки:
```bash
sudo nginx -t
```
Если все верно, выполните плавную перезагрузку NGINX:
```bash
sudo nginx -s reload
```
Когда у вас появится настоящий SSL-сертификат (например, от Let's Encrypt), вы просто обновите пути к сертификату и приватному ключу в конфигурации NGINX и снова выполните `nginx -s reload`.