У нас есть машина на 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 сайта должна быть иконка с замочком.