nginx
Конфиг для HTTPS
/etc/nginx/sites-available/default:
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".
Подтягивание конфигов
После применения настроек нужно выполнить:
systemctl reload nginx
reload нужен как раз для подтягивания конфигов, чтобы не restart-ить nginx лишний раз. Ибо restart сервера - сбой.
Проверить конфиги на ошибки можно командой:
nginx -t
Как поднять HTTPS nginx сервер
Создание приватного ключа и SSL сертификата для HTTPS
Генерация приватного ключа:
openssl genrsa -out server.key 4096
Генерация CSR:
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
Проверка hash
Вывод модуля сертификата:
openssl x509 -noout -modulus -in ssl_certificate.crt | openssl md5
Вывод модуля приватного ключа:
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]]