Nginx
Обновлено 7 мая 2021
Установка и настройка Nginx
Выполните установку Nginx:
emerge -a www-servers/nginx
Настройка Nginx
Все настройки Nginx прописываются в файле /etc/nginx/nginx.conf. Параметры для сайтов хранятся в каталоге /etc/nginx/sites-enabled.
Запустите Nginx:
/etc/init.d/nginx start
Добавьте Nginx в автозагрузку:
rc-update add nginx
Пример настройки Nginx
Создайте файл настроек для localhost:
server { listen 80; server_name localhost; access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; root /var/calculate/www/localhost/htdocs; }
Создайте индексный файл для проверки работоспособности сервера:
mkdir -p /var/calculate/www/localhost/htdocs
echo 'Hello!' > /var/calculate/www/localhost/htdocs/index.html
Перед тем, как перезапускать службу Nginx, всегда выполняйте проверку правильности сделанных изменений командой nginx -t
Если всё верно, то будет выведено следующее:
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
После успешной проверки перечитайте конфигурацию Nginx:
/etc/init.d/nginx reload
Чтобы проверить, что Nginx работает и есть доступ, воспользуйтесь консольным веб-клиентом curl:
curl http://localhost
Hello!
Настройка HTTPS для Nginx
Сгенерируйте ключ для протокола Диффи-Хеллмана:
Generating DH parameters, 4096 bit long safe prime, generator 2 This is going to take a long time
Создайте файл описания общих параметров SSL:
# This file contains important security parameters. If you modify this file # manually, Certbot will be unable to automatically provide future security # updates. Instead, Certbot will print and log an error message with a path to # the up-to-date file that you will need to refer to when manually updating # this file. ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; ssl_dhparam /etc/nginx/ssl-dhparams.pem;
Получение сертификата Let's Encrypt
Получите сертификат доменов www.example.org и example.org для Nginx, следуя руководству.
Пример настроки HTTPS
Добавьте настройки HTTPS для example.org:
server { listen 80; listen 443 ssl; server_name www.example.org example.org; include ssl.conf; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; access_log /var/log/nginx/example.org.access_log main; error_log /var/log/nginx/example.org.error_log info; include acme.conf; root /var/calculate/www/example.org/htdocs; }
Перенаправление с HTTP на HTTPS
Добавьте правило перенаправления запросов с http://example.org на https://example.org:
server { listen 80; listen 443 ssl; server_name www.example.org example.org; include ssl.conf; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; access_log /var/log/nginx/example.org.access_log main; error_log /var/log/nginx/example.org.error_log info; include acme.conf; if ($scheme = http) { return 301 https://$server_name$request_uri; } root /var/calculate/www/example.org/htdocs; }
Установка и настройка PHP-FPM
PHP-FPM (FastCGI Process Manager) - это высокопроизводительный и масштабируемый интерфейс для взаимодействия web-сервера и web-приложения, дальнейшее развитие технологии CGI. Основное преимущество FastCGI в изоляции между динамическим языком и web-сервером. Эта технология позволяет запускать web-сервера и CGI-процессы на различных хостах, что улучшает масштабируемость и безопасность без заметной потери производительности.
Для установки PHP-FPM выполните:
emerge -a dev-lang/php
После вывода всей информации для установки PHP необходимо согласиться с версией PHP по умолчанию. Отменить установку и указать необходимую версию PHP можно при следующей установке. Для вывода информации о всех имеющихся и работающих расширениях используйте команду php -m
.
Использование UNIX-сокета для взаимодействия Nginx c PHP является предпочтительным и рекомендуемым вариантом!
Внесите необходимые изменения в файл настроек, указав временную зону:
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "Europe/Moscow"
Заметка
В примерах указан путь для версии PHP 7.4. Отредактируйте путь, если используется другая версия PHP.
Запустите сервис PHP-FPM:
/etc/init.d/php-fpm start
Добавьте PHP-FPM в автозагрузку:
rc-update add php-fpm
Пример настройки Nginx с PHP кодом
Для поддержки PHP добавьте следующие настройки в конфигурацию сайта, работающего под Nginx. В примере ниже Nginx обменивается информацией с процессом PHP через UNIX-сокет. В блок server добавьте блок location, в котором и будут описаны правила работы с PHP.
Выполните настройки:
# localhost server { listen 80; server_name www.example.org example.org; access_log /var/log/nginx/example.org.access_log main; error_log /var/log/nginx/example.org.error_log info; root /var/calculate/www/localhost/htdocs; location ~ \.php$ { # Проверка на несуществующие скрипты или ошибку 404 # Без этой строки nginx будет сразу отправлять любые запросы, оканчивающиеся на .php, в php-fpm try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/php-fpm.socket; } }
Создайте файл, указав в нем код для вывода информации о PHP:
echo '<?php phpinfo(); ?>' > /var/calculate/www/localhost/htdocs/info.php
Назначьте необходимые права для всех файлов в корневой папке сайта:
chown -R nginx:nginx /var/calculate/www/localhost/htdocs
Добавьте необходимую запись в DNS. В случае отсутствия DNS можно внести запись в статическую таблицу имен компьютера, с которого будет производится доступ к ресурсу.
Для систем на базе Linux отредактируем список доменных имён:
192.168.0.1 www.example.org example.org
Проверьте правильность настройки Nginx и перечитайте конфигурацию:
nginx -t && /etc/init.d/nginx reload
Запустите PHP-FPM:
/etc/init.d/php-fpm start
Укажите в веб браузере путь http://example.org/info.php. В случае успешной настройки вы увидите страницу с полной информацией о PHP.
Настройка обратного прокси на Nginx
Под обратным проксированием обычно понимается процесс, в котором сервер, получающий запрос от клиента, не обрабатывает его полностью самостоятельно, а частично или целиком отправляет этот запрос для обработки другим (upstream) серверам. Иными словами, он не перенаправляет клиента, а самостоятельно отправляет запрос и возвращает полученный ответ обратно клиенту.
Настройте обратный прокси example.org, взаимодействующий с внутренним HTTP-сервисом, использующим порт 8080:
server { listen 80; server_name www.example.org example.org; access_log /var/log/nginx/proxy.log; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; } }
Запрет обработки неописанных сайтов
В некоторых случаях вам может понадобиться запретить Nginx обрабатывать запросы с произвольными доменными имеными. Выполните настройку, чтобы Nginx на неописанные сайты закрывал соединение без ответа:
server { listen 80 default_server; server_name _; access_log /var/log/nginx/noname_80.access_log main; return 444; } server { listen 443 ssl default_server; ssl_ciphers aNULL; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_tickets off; server_name _; access_log /var/log/nginx/noname_443.access_log main; return 444; }
Перезагрузите настройки Nginx:
/etc/init.d/nginx reload