Настройка SSL vhost и получение сертификата
Кратко: добавьте SSL-настройки в ваш nginx vhost или создайте отдельный SSL vhost, сгенерируйте CSR (запрос на подпись сертификата), отправьте его CA и замените самоподписанный сертификат на доверенный. В конце — проверьте цепочку сертификатов и усилите TLS-конфигурацию.
Важно: в конфигурации nginx поведение слушающих директив (listen) отличается для версий до 0.8.21 и более новых — обратите внимание на слово default и параметры ssl / ipv6only.
5 Настройка SSL vhost
Далее создаём SSL vhost. Удобство nginx в том, что часто нет необходимости делать отдельный vhost: можно добавить директивы SSL в существующий HTTP vhost.
Откройте файл:
vi /etc/nginx/sites-available/www.hostmauritius.com.vhostЕсли у вас nginx >= 0.8.21, используйте конфигурацию вида:
| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 listen 443 ssl; listen [::]:443 ipv6only=on ssl; ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |
Если у вас nginx < 0.8.21, используйте listen с ключевым словом default при дополнительных опциях:
| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 listen 443 default ssl; listen [::]:443 default ipv6only=on ssl; ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |
Мы просто добавили строки:
listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem;
ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key;
Для nginx < 0.8.21 нужно добавить слово default в listen, если используются дополнительные опции (ssl или ipv6only=on). Слово default может применяться только в одном vhost, поэтому при создании дополнительных SSL vhost оставьте его без default — параметры будут унаследованы от vhost с default.
Обратите также внимание на замену строки rewrite: вместо жёсткой http-версии мы используем $scheme, чтобы перенаправление корректно работало для http и https:
rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent;Перезагрузите nginx:
/etc/init.d/nginx reloadТеперь SSL vhost будет использовать указанную приватную пару (ключ + сертификат). При использовании самоподписанного сертификата браузер покажет предупреждение:

Важно: вместо добавления SSL в существующий vhost вы можете создать отдельный SSL vhost. Ниже — два варианта такой конфигурации.
Первый вариант: отдельный SSL vhost (вариант A)
Откройте тот же файл:
vi /etc/nginx/sites-available/www.hostmauritius.com.vhostЕсли nginx >= 0.8.21, можно оставить http vhost как есть и добавить второй server-блок для 443 (здесь используется ssl on;):
| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } server { listen 443; ## listen for ipv4 listen [::]:443 ipv6only=on; ## listen for ipv6 ssl on; ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |
Для nginx < 0.8.21 в блоках listen добавляется default при дополнительных опциях.
Перезагрузите nginx:
/etc/init.d/nginx reloadВторой вариант: отдельный SSL vhost (вариант B)
Этот вариант делает то же самое, но помечает listen с флагом ssl (вместо ssl on;):
| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } server { listen 443 ssl; ## listen for ipv4 listen [::]:443 ssl ipv6only=on; ## listen for ipv6 ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |
Для nginx < 0.8.21 понадобится добавлять default в listen при использовании ssl.
Перезагрузите nginx:
/etc/init.d/nginx reload6 Создание CSR (Certificate Signing Request)
Чтобы получить доверенный сертификат от CA (Verisign, Thawte, Comodo и т. п.), нужно сгенерировать CSR из приватного ключа и отправить его CA. CA вернёт сертификат, который заменит самоподписанный.
Создадим директорию для CSR:
mkdir /etc/ssl/csrГенерация CSR на основе закрытого ключа:
openssl req -new -key /etc/ssl/private/www.hostmauritius.com.key -out /etc/ssl/csr/www.hostmauritius.com.csrВо время генерации вас попросят ввести данные — они попадут в сертификат и будут видны пользователям при просмотре деталей сертификата в браузере. Критично правильно указать Common Name (CN) — это ваш домен/хост: www.hostmauritius.com в примере.
Пример интерактивного ввода (для ориентира):
root@server1:~# openssl req -new -key /etc/ssl/private/www.hostmauritius.com.key -out /etc/ssl/csr/www.hostmauritius.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]: <– DE
State or Province Name (full name) [Some-State]: <– Lower Saxony
Locality Name (eg, city) []: <– Lueneburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <– Example Ltd
Organizational Unit Name (eg, section) []: <– IT
Common Name (eg, YOUR name) []: <– www.hostmauritius.com
Email Address []: <– [email protected]
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: <– ENTER
An optional company name []: <– ENTER
root@server1:~#
После этого у вас появится CSR в /etc/ssl/csr/www.hostmauritius.com.csr. Просмотреть можно так:
cat /etc/ssl/csr/www.hostmauritius.com.csr(внутреннее содержимое CSR не меняйте вручную).
7 Получение доверенного сертификата
Чтобы получить сертификат, передайте CSR в выбранный CA. Платные CA, такие как Verisign/Thawte/Comodo, доверяются большинством браузеров и устранят предупреждения. CAcert.org — пример бесплатного CA, но его корневой сертификат не встроен во многие браузеры, поэтому предупреждения остаются.
Пример процедуры с CAcert.org (показываю общий поток действий — логика сходна у других CA):
- Зарегистрируйтесь на сайте CA и подтвердите владение доменом (например, через email, найденный в WHOIS).

- Перейдите в раздел Server Certificates > New и вставьте ваш CSR в текстовое поле, затем Submit.

- Подтвердите отправку и дождитесь выдачи сертификата. После выпуска сертификат можно скачать или скопировать со страницы CA.


Когда сертификат выдан, сделайте резервную копию самоподписанного сертификата и замените его на выданный CA:
cp /etc/ssl/certs/www.hostmauritius.com.pem /etc/ssl/certs/www.hostmauritius.com.pem_bak
> /etc/ssl/certs/www.hostmauritius.com.pem
vi /etc/ssl/certs/www.hostmauritius.com.pemВставьте сертификат (PEM) из панели CA в файл /etc/ssl/certs/www.hostmauritius.com.pem и сохраните.

Перезагрузите nginx:
/etc/init.d/nginx reloadЕсли CA не требует отдельного chain/intermediate файла, вы закончили: теперь сайт должен открываться по HTTPS без предупреждений в браузерах, доверяющих этому CA. Для сертификатов от CAcert.org предупреждения останутся, пока браузер не доверит корневому CA (см. главу 8 в оригинале).

7.1 Файлы цепочки сертификатов и промежуточные сертификаты
Некоторые CA требуют, чтобы вы инсталлировали цепочку сертификатов (intermediate) в nginx вместе с основным сертификатом. Поскольку nginx не имеет отдельной директивы для цепочки (в отличие от Apache), нужно просто дописать intermediate-категории в конец основного PEM-файла.
Пример, если chain сохранён в /etc/ssl/certs/CAcert_chain.pem:
cat /etc/ssl/certs/CAcert_chain.pem >> /etc/ssl/certs/www.hostmauritius.com.pemПерезагрузите nginx:
/etc/init.d/nginx reloadПосле этого сертификат и цепочка будут поданы nginx в нужном порядке.
Дополнения: рекомендации, проверки, безопасность и отладка
Ниже — практические советы и дополнительные материалы для устойчивой, безопасной и совместимой SSL-настройки.
Быстрая методология (mini‑method)
- Создайте резервные копии: ключи, сертификаты, конфиги nginx.
- Добавьте SSL-директивы в vhost или создайте отдельный SSL vhost.
- Сгенерируйте CSR из приватного ключа.
- Отправьте CSR в CA и получите PEM-сертификат (и chain, если нужно).
- Поместите сертификат и key в /etc/ssl/certs и /etc/ssl/private соответственно.
- Перезагрузите nginx и проверьте сайт по HTTPS.
- Усильте TLS-параметры и проверьте совместимость и безопасность.
Ролевые чек-листы
- Сисадмин:
- Сделать backup ключей и конфигураций.
- Проверить права доступа на /etc/ssl/private (600/только root).
- Применить изменения и перезагрузить nginx.
- Разработчик/владелец приложения:
- Проверить, что URL‑перенаправления работают корректно (http -> https).
- Проверить работу кук и mixed content (все ресурсы грузятся по HTTPS).
- Проверяющий/менеджер безопасности:
- Проверить цепочку сертификатов и отсутствие предупреждений в браузерах.
- Провести тесты на протоколы/шифры (см. ниже).
Критерии приёмки
- Сайт открывается по https:// и сертификат валиден для домена (CN/SAN совпадают).
- Нет предупреждений браузера (если используется доверенный CA).
- Сертификат имеет корректную цепочку (если требуется).
- Права и владельцы файлов ключей корректны (закрытый ключ доступен только root).
Тесты и контроль качества (примеры)
- Открыть https://www.hostmauritius.com в браузере: проверить отсутствие предупреждений.
- Проверить цепочку: openssl s_client -connect www.hostmauritius.com:443 -showcerts
- Проверить соответствие CN/SAN: openssl x509 -in /etc/ssl/certs/www.hostmauritius.com.pem -noout -text
Когда настройка не работает — распространённые причины
- Проблемы с путями к файлам (ошибочный путь в ssl_certificate или ssl_certificate_key).
- Неправильные права на приватный ключ (/etc/ssl/private должен быть защищён).
- CN/SAN CSR не совпадает с хостом, поэтому браузер предупреждает.
- Не добавлен intermediate-файл у CA, который требует цепочку.
- В nginx синтаксическая ошибка в конфигурации — используйте nginx -t для проверки.
Альтернативные подходы
- Использовать автоматические бесплатные CA, такие как Let’s Encrypt — выдаёт доверенные сертификаты и поддерживает автоматическое обновление.
- Централизованное управление сертификатами (например, через Vault/PKI или internal CA) — подходит для инфраструктуры с большим количеством сервисов.
- Использовать reverse-proxy/terminator TLS (например, балансировщик) и держать сертификаты на уровне балансировщика.
Усиление безопасности TLS (рекомендации)
- Отключите SSLv2 и SSLv3; разрешите TLSv1.2 и TLSv1.3 (если поддерживается).
- Выберите современные шифры и предпочитайте серверные настройки шифрования.
- Включите HSTS (Strict-Transport-Security) для принудительного HTTPS при достижении требуемой готовности.
- Включите OCSP stapling, если CA и nginx поддерживают — это улучшает проверку статуса сертификата.
Пример минимальных рекомендаций в nginx (пример, адаптируйте под вашу версию nginx):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:...';
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;(Не копируйте список шифров без проверки — используйте актуальные рекомендации официальных источников или тесты вроде SSL Labs.)
Совместимость и миграция (nginx версии)
- Для nginx старее 0.8.21 используйте слово default в listen, когда применяете дополнительные параметры (ssl, ipv6only=on).
- В более новых версиях достаточно указывать ssl в listen или использовать ssl on (хотя в новых релизах предпочтительнее флаг в listen).
- Всегда проверяйте синтаксис команды: nginx -t и логи /var/log/nginx/error.log при неясных ошибках.
Когда нужна цепочка сертификатов
- Если CA выдал intermediate сертификат, его нужно добавить в PEM после основного сертификата (concat в один файл), иначе браузеры могут считать цепочку неполной.
Короткий глоссарий
- CSR: запрос подписи сертификата (Certificate Signing Request).
- CA: центры сертификации (Certificate Authority).
- vhost: виртуальный хост nginx (server-блок).
- PEM: формат кодировки сертификатов и ключей.
Заключение
В этом материале вы увидели основные варианты добавления SSL в nginx — либо расширить существующий vhost, либо создать отдельный SSL vhost — и последовательность получения доверенного сертификата от CA: генерация CSR, загрузка в CA, установка сертификата и (при необходимости) цепочки intermediate. После установки важно проверить работу HTTPS, права на ключи и усилить TLS-настройки для безопасности.
Важно: всегда создавайте резервные копии и проверяйте конфигурацию nginx перед перезагрузкой.
Ключевые действия: резервная копия → добавление SSL → генерация CSR → получение сертификата → проверка и усиление безопасности.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента