Skip to content

nginx

Конфиг для HTTPS

/etc/nginx/sites-available/default:

Nginx Configuration File
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name site.local;

    location / {
        index webpage.html
        try_files $uri $uri/ =404;
    }
}

К слову, /etc/nginx/sites-enabled/default - это просто ссылка на /etc/nginx/sites-available/default:

Всё, что находится внутри {} директивы server - конфиги сервера

listen-ы устанавливают порты, которые будет сервер слушать (через которые будет доступен сервер). Сначала идет конфиг IPv4, а потом IPv6.

ssl_certificate и ssl_certificate_key в данном случае используются для обозначения пути к ssl сертификату и ключу.

root указывает путь к директории с html файлами.

index index.html index.htm index.nginx-debian.html
Директива index определяет список файлов-индексов в порядке приоритета, которые будут использоваться, если в URL не указано имя конкретного файла. Список идет от более приоритетного к менее приоритетному, то есть, если не будет найден первый индекс-файл, то будет искаться второй и т.д.

server_name указывает доменное имя, которое будет обслуживаться сервером. По дефолту стоит значение _ (underscore) , что означает "любой домен".

В блоке location есть параметр index, который указывает индексную (начальную) страницу в директории, указанной после параметра root выше.
Там же есть try_files, который ищет index page; если не находит - возвращает ошибку "404 Not Found".

Подтягивание конфигов

После применения настроек нужно выполнить:

Bash
systemctl reload nginx

reload нужен как раз для подтягивания конфигов, чтобы не restart-ить nginx лишний раз. Ибо restart сервера - сбой.

Проверить конфиги на ошибки можно командой:

Bash
nginx -t


Как поднять HTTPS nginx сервер

Создание приватного ключа и SSL сертификата для HTTPS

Генерация приватного ключа:

Bash
openssl genrsa -out server.key 4096

Генерация CSR:

Bash
openssl req -new -key server.key –out server.csr

Создание сертификата:

Bash
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Вывод информации о сертификате:

Bash
openssl x509 -noout -text -in server.crt

Проверка hash

Вывод модуля сертификата:

Bash
openssl x509 -noout -modulus -in ssl_certificate.crt | openssl md5

Вывод модуля приватного ключа:

Bash
openssl rsa -noout -modulus -in private.key | openssl md5


Вообще у меня есть скрипт (sslCertCreator) на этот случай:

```bash

!/bin/bash

Генерация приватного ключа

openssl genrsa -out server.key 4096

Генерация CSR

echo -e "RU\nMoscow\n\nAboba Foundation\nIT\nsite.local\n\n\n\n" | openssl req -new -key server.key -out server.csr

Создание сертификата

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Вывод информации о сертификате

openssl x509 -noout -text -in server.crt

Вывод модуля сертификата

openssl x509 -noout -modulus -in server.crt | openssl md5

Вывод модуля приватного ключа

openssl rsa -noout -modulus -in server.key | openssl md5

Удаление server.csr, т.к. не нужен

rm server.csr
```


Перемещение сертификата и ключа в папку /etc/nginx/ssl/

server.csr  не нужен - удаляй, это ж просто request.
server.crt и server.key кидай в /etc/nginx/ssl/ (папку такую нужно создать!)


Результат

Результат можно увидеть на 127.0.0.1

[!info] Cопоставление localhost-а с доменным именем
Чтобы заходить на сайт по доменному имени, которое мы задали нужно добавить в файл /etc/hosts строку:
127.0.0.1 site.local


HTTPS здорового человека: [[Lets Encrypt]]
Базовая HTTP аутентификация: [[nginx-basic-http-auth]]

nginx #web