Установка Nginx Free HTTPS Certificate в Ubuntu Linux

Этот туториал покажет вам все шаги, необходимые для настройки блоков серверов Nginx в Ubuntu Linux.

Серверные блоки Nginx очень похожи на функцию виртуального хоста Apache.

Этот учебник был протестирован на Ubuntu 18.04.

1. Установите Nginx на Ubuntu Linux

Используйте команду Ubuntu APT для установки сервера Nginx.

# apt-get update
# apt-get install nginx

Перезапустите веб-сервер Nginx вручную.

# service nginx restart
# service nginx status

Проверьте статус сервиса Nginx.

● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-12-29 04:29:22 UTC; 1h 17min ago
Docs: man:nginx(8)
Process: 2233 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status
Process: 2221 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exite
Main PID: 2238 (nginx)
Tasks: 2 (limit: 1152)
CGroup: /system.slice/nginx.service
├─2238 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2239 nginx: worker process

Вы завершили установку веб-сервера Nginx в Ubuntu Linux.

2. Добавьте поддержку PHP в Nginx

Nginx нужна внешняя программа для добавления поддержки PHP.

Используйте команду Ubuntu APT для установки необходимых PHP-пакетов.

# apt-get update
# apt-get install php7.2-fpm

Необязательный. Используйте следующую команду для установки наиболее используемых модулей PHP.

# apt-get install php7.2-xml php7.2-curl php7.2-gd php7.2-mbstring php7.2-mysql
# apt-get install php7.2-bz2 php7.2-zip php7.2-json php7.2-readline

Найдите расположение файла конфигурации PHP в вашей системе.

Отредактируйте файл конфигурации php.ini.

# updatedb
# locate php.ini
# vi /etc/php/7.2/fpm/php.ini

Ваша версия PHP может отличаться от нашей.

Ваше местоположение файла конфигурации PHP может не совпадать с нашим.

Вот файл с нашей конфигурацией.

file_uploads = On
max_execution_time = 300
memory_limit = 256M
post_max_size = 32M
max_input_time = 60
max_input_vars = 4440
upload_max_filesize = 32M

Отредактируйте файл конфигурации веб-сайта Nginx по умолчанию.

# vi /etc/nginx/sites-available/default

Вот оригинальный файл, перед нашей конфигурацией.

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}

Вот новый файл с нашей конфигурацией.

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}

Убедитесь, что в вашем файле конфигурации Nginx нет ошибок.

# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите службу PHP.
Перезапустите сервис Nginx.

# service php7.2-fpm restart
# service nginx restart

Вы завершили интеграцию Nginx с PHP на Ubuntu Linux.

3. Настройте серверные блоки Nginx

Блокировка сервера - это функция, которая позволяет одному серверу Nginx предлагать несколько веб-сайтов с одним и тем же IP-адресом.

Давайте создадим необходимую инфраструктуру для использования функции блоков Nginx Server.

# mkdir /websites/mining-pool -p
# cd /websites/mining-pool
# mkdir www
# chown www-data.www-data /websites -R

Наш сайт будет называться mining-pool.ninja.

Файлы веб-сайта mining-pool.ninja должны находиться в каталоге / sites / mining-pool / www.

Alert!

Mining-pool.ninja was used as an example!

You need to change your configuration files to reflect your website name.

Создайте файл конфигурации Nginx Virtualhost на своем веб-сайте.

# vi /etc/nginx/sites-available/mining-pool.conf

Вот файл с нашей конфигурацией.

server {
listen 80;
listen [::]:80;
root /websites/mining-pool/www;
index index.php index.html index.htm;
server_name mining-pool.ninja;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}

Создайте символическую ссылку для включения конфигурации виртуального хоста Nginx.

Перезапустите сервис Nginx.

# ln -s /etc/nginx/sites-available/mining-pool.conf /etc/nginx/sites-enabled/
# service nginx restart

Вы завершили настройку блока Nginx Server.

4. Настройте домен DNS

Доступ к GODADDY и купить домен DNS.

В нашем примере мы приобретаем домен с именем MINING-POOL.NINJA.

Вы можете использовать любой веб-сайт для покупки домена DNS, GoDaddy - это мой личный выбор.

Создайте запись DNS, указывающую ваш веб-сайт на компьютер, на котором работает Nginx.

В нашем примере мы создали запись DNS, указывающую домену MINING-POOL.NINJA на IP-адрес 35.163.100.49.

Godaddy Apache DNS Configuration

Используйте команду NSLOOKUP для проверки конфигурации DNS

# apt-get update
# apt-get install dnsutils
# nslookup mining-pool.ninja

Non-authoritative answer:
Name: mining-pool.ninja
Address: 35.163.100.49

Вы завершили настройку домена DNS.

Чтобы протестировать нашу конфигурацию, давайте создадим простую тестовую страницу PHP.

# vi /websites/mining-pool/www/index.php

Вот содержимое файла index.php.

<?php phpinfo(); ?>

Откройте браузер и попробуйте получить доступ к HTTP-версии вашего сайта.

В нашем примере в браузере был введен следующий URL:

• http://mining-pool.ninja

Информационная страница PHP должна быть представлена.

PHPInfo Nginx

5. Настройте бесплатный сертификат HTTPS на Nginx

Установите необходимые пакеты для использования LET'S ENCRYPT Free SSL / TLS Certificates в Ubuntu Linux

# apt-get install software-properties-common
# add-apt-repository universe
# add-apt-repository ppa:certbot/certbot
# apt-get update
# apt-get install python-certbot-nginx

Запросите и установите бесплатный HTTPS-сертификат Nginx.

certbot --nginx -d mining-pool.ninja

• Нажмите (A), чтобы согласиться с Условиями обслуживания.
• Нажмите (Y), чтобы поделиться своей электронной почтой и получать информационные бюллетени.
• Нажмите (2), чтобы автоматически перенаправить ваш веб-сайт HTTP на версии HTTPS.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): techexpert.tips@gmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mining-pool.ninja
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/mining-pool.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/mining-pool.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://mining-pool.ninja

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=mining-pool.ninja
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/mining-pool.ninja/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/mining-pool.ninja/privkey.pem
Your cert will expire on 2019-03-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Система автоматически запросит бесплатный сертификат.

Он также настроит ваш веб-сервер Nginx на перенаправление всего HTTP-доступа к HTTPS-версии вашего сайта.

В нашем примере система изменила файл конфигурации Virtualhost с именем mining-pool.conf.

Вот содержимое измененного файла mining-pool.conf.

server {
root /websites/mining-pool/www;
index index.php index.html index.htm;
server_name mining-pool.ninja;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mining-pool.ninja/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mining-pool.ninja/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
if ($host = mining-pool.ninja) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80;
listen [::]:80;
server_name mining-pool.ninja;
return 404; # managed by Certbot
}

Файл KEY содержит ваш закрытый ключ сертификата и должен постоянно храниться в безопасном месте.

Файл ключа для mining-pool.ninja хранится по адресу /etc/letsencrypt/live/mining-pool.ninja/privkey.pem.

6. Протестируйте бесплатный сертификат HTTPS на Nginx

Все необходимые настройки выполнены.

Настало время протестировать вашу конфигурацию.

Откройте браузер и попробуйте получить доступ к HTTP-версии вашего сайта.

В нашем примере в браузере был введен следующий URL:

• http://mining-pool.ninja

Nginx автоматически перенаправит HTTP-запрос на HTTPS-версию вашего сайта.

Lets Encrypt Nginx HTTPS

Вы завершили настройку бесплатного сертификата Nginx HTTPS.

7. Как продлить бесплатный сертификат HTTPS

LET'S ENCRYPT Бесплатные сертификаты SSL / TLS действительны только в течение 90 дней.

Система создает запланированное задание для автоматического продления любого сертификата в течение тридцати дней после истечения срока действия.

Имя запланированной задачи - certbot, и оно находится в каталоге /etc/cron.d.

Вот содержимое файла /etc/cron.d/certbot:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
#
# Important Note! This cronjob will NOT be executed if you are
# running systemd as your init system. If you are running systemd,
# the cronjob.timer function takes precedence over this cronjob. For
# more details, see the systemd.timer manpage, or use systemctl show
# certbot.timer.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

Используйте следующую команду для имитации процесса обновления сертификата.

# certbot renew --dry-run

Вы должны увидеть следующие сообщения:

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/mining-pool.ninja.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for mining-pool.ninja
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/mining-pool.ninja/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/mining-pool.ninja/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -