У нас есть машина на Ubuntu/Debian. Нужно установить на нее несколько веб-серверов.

Сперва установим веб-сервер nginx и php7

apt-get install nginx php7.0-fpm

Пусть у нас будет два сайта site1.ru и site2.ru и располагаться они будут в каталогах /var/www/html/site1 и /var/www/html/site2 соответственно.
Создадим для них конфигурационные файлы.

sudo touch /etc/nginx/sites-available/site1.ru
sudo touch /etc/nginx/sites-available/site2.ru
sudo ln -s /etc/nginx/sites-available/site1.ru /etc/nginx/sites-enabled/site1.ru
sudo ln -s /etc/nginx/sites-available/site2.ru /etc/nginx/sites-enabled/site2.ru

Отредактируем первый

sudo nano /etc/nginx/sites-available/site1.ru
server {
 listen 80;
 listen [::]:80;

root /var/www/html/site1;
 index index.php index.html index.htm;
 server_name site1.ru www.site1.ru;

location / {
 if (-e $request_filename.php){
 rewrite ^/(.*)$ /$1.php;
 }
 try_files $uri $uri/ =404;

}


 location ~ \.(php|html)$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }

и следом второй

sudo nano /etc/nginx/sites-available/site2.ru
server {
 listen 80;
 listen [::]:80;

root /var/www/html/site2;
 index index.php index.html index.htm;
 server_name site2.ru www.site2.ru;

location / {
 if (-e $request_filename.php){
 rewrite ^/(.*)$ /$1.php;
 }
 try_files $uri $uri/ =404;

}


 location ~ \.(php|html)$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }

проверим конфигурацию на ошибки:

sudo nginx -t

Если ошибок нет, мы увидим ответ:

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

перегружаем nginx

sudo nginx -s reload

Создадим файл общих настроек для ssl

sudo touch /etc/nginx/snippets/ssl.conf
sudo nano /etc/nginx/snippets/ssl.conf
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

Установим Cerbot – утилиту для получения и обновления сертификатов для наших сайтов.

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
sudo apt-get install python-certbot-nginx

Вставим в файл /etc/nginx/sites-available/site1.ru следующее:

location ~ /.well-known {
 allow all;
 }

include /etc/nginx/snippets/ssl.conf;
 listen 443 ssl;
 ssl_certificate /etc/letsencrypt/live/site1.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/site1.ru/privkey.pem;
 if ($scheme != "https") {
 return 301 https://$host$request_uri;
 }

Теперь он принимает вот такой вид:

server {
 listen 80;
 listen [::]:80;

root /var/www/html/site1;
 index index.php index.html index.htm;
 server_name site1.ru www.site1.ru;
location ~ /.well-known {
 allow all;
 }

include /etc/nginx/snippets/ssl.conf;
 listen 443 ssl;
 ssl_certificate /etc/letsencrypt/live/site1.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/site1.ru/privkey.pem;
 if ($scheme != "https") {
 return 301 https://$host$request_uri;
 }
location / {
 if (-e $request_filename.php){
 rewrite ^/(.*)$ /$1.php;
 }
 try_files $uri $uri/ =404;

}

location ~ \.(php|html)$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }

Аналогично для второго сайта:

server {
 listen 80;
 listen [::]:80;

root /var/www/html/site1;
 index index.php index.html index.htm;
 server_name site2.ru www.site2.ru;
location ~ /.well-known {
 allow all;
 }

include /etc/nginx/snippets/ssl.conf;
 listen 443 ssl;
 ssl_certificate /etc/letsencrypt/live/site2.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/site2.ru/privkey.pem;
 if ($scheme != "https") {
 return 301 https://$host$request_uri;
 }
location / {
 if (-e $request_filename.php){
 rewrite ^/(.*)$ /$1.php;
 }
 try_files $uri $uri/ =404;

}

location ~ \.(php|html)$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }

Установим сертификаты:

sudo certbot --nginx -d site1.ru -d www.site1.ru -d site2.ru -d www.site2.ru

После того, как сертификаты сгенерятся, необходимо перезапустить nginx.

sudo nginx -s reload

Пробуем зайти на наши сайты. Трафик должен направляться на https и перед URL сайта должна быть иконка с замочком.

Установка Nginx, php7.0-fpm и Let’s Encrypt
Метки:                     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *