среда, 13 марта 2024 г.

Настройка https в Nginx (openssl)

Источники: первый, второй.

На виртуальной машине Oracle VM VirtualBox установлен пакет LEMP (Debian 12.4, Nginx, MySQL/Mariadb, PHP 8.2).

Имя web-ресурса: ae-eco.local, для него и будем настраивать сертификат.


1. Обновляем пакеты GNU\Linux:

# apt-get update && apt-get upgrade


2. Создаем каталог для хранения сертификатов и переходим в него:

# mkdir /etc/nginx/ssl && cd /etc/nginx/ssl


3. Генерируем файлы сертификата и ключа:

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ae-eco.key -out ae-eco.crt

При генерации сертификата на вопросы отвечаем как считаем нужным, в моём случае:
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Astrakhan
Locality Name (eg, city) []:Astrakhan
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Private
Organizational Unit Name (eg, section) []:Private
Common Name (e.g. server FQDN or YOUR name) []:ae-eco.local
Email Address []:admin@ae-eco.local



4. В настройке сервера Nginx указываем следующее:

server {
    ...
    listen 443 ssl http2;
    ssl_certificate /etc/nginx/ssl/ae-eco.crt;
    ssl_certificate_key /etc/nginx/ssl/ae-eco.key;
    ...
}



5. Для переадресации со схемы http на https добавляем:

server {
    ...
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
    ...
}



6. Проверяем конфигурацию Nginx:

# nginx -t

или

# nginx -T


7. Перезапускаем Nginx:

# systemctl restart nginx


Заключение:
В моём случае настройка виртуального сервера в файле /etc/nginx/sites-enabled/default для локального web-ресурса ae-eco.local:
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
server_name ae-eco.local;
ssl_certificate /etc/nginx/ssl/ae-eco.crt;
ssl_certificate_key /etc/nginx/ssl/ae-eco.key;
#redirect non-https traffic
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
root /var/www/ae-eco.local/public_html;
index index.php index.html index.htm index.nginx-debian.html;
access_log /var/www/ae-eco.local/ae-eco.local.access.log;
error_log /var/www/ae-eco.local/ae-eco.local.error.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_NAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
}

Docker. Первые контейнеры

Источник:  php.dragomano.ru Структура каталогов: ~/develop/web/project/                  nginx/      - сервис web-сервера                php...