This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
nginx
nginx — это надежный, маленький и очень производительный веб-сервер и обратный прокси-сервер. Это хорошая альтернатива популярным веб серверам, таким как Apache и lighttpd.
Установка
Перед непосредственной установкой пакета www-servers/nginx, сначала будет неплохо взглянуть на USE-флаги для Nginx.
Расширенные USE-флаги
Nginx использует модули для расширения своих возможностей. Для более простого сопровождения такого модульного подхода, ebuild для nginx поддерживает расширенные (USE_EXPAND) USE-флаги для обозначения нужных компонентов.
- Модули HTTP включаются через переменную NGINX_MODULES_HTTP
- Почтовые модули включаются через переменную NGINX_MODULES_MAIL
- Дополнительные модули включаются через переменную NGINX_ADD_MODULES
Эти переменные необходимо настроить в /etc/portage/make.conf. Их описание можно найти в /usr/portage/profiles/desc/nginx_modules_http.desc и /usr/portage/profiles/desc/nginx_modules_mail.desc.
Например, для включения модуля fastcgi
:
/etc/portage/make.conf
NGINX_MODULES_HTTP="fastcgi"
Вышеописанное переопределяет стандартное значение NGINX_MODULES_HTTP значением fastcgi
. Для включения модуля fastcgi
без переопределения NGINX_MODULES_HTTP можно указать следующую запись в /etc/portage/package.use:
/etc/portage/package.use
www-servers/nginx NGINX_MODULES_HTTP: fastcgi
USE-флаги
USE flags for www-servers/nginx Robust, small and high performance http and reverse proxy server
+http
|
Enable HTTP core support |
+http-cache
|
Enable HTTP cache support |
+http2
|
Enable HTTP2 module support |
+pcre2
|
Enable support for pcre2 |
aio
|
Enables file AIO support |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
http3
|
Enable HTTP3 module support |
ktls
|
Enable Kernel TLS offload (kTLS) |
libatomic
|
Use libatomic instead of builtin atomic operations |
pcre
|
Add support for Perl Compatible Regular Expressions |
pcre-jit
|
Enable JIT for pcre |
rtmp
|
NGINX-based Media Streaming Server |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
ssl
|
Enable HTTPS module for http. Enable SSL/TLS support for POP3/IMAP/SMTP for mail. |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
threads
|
Add threads support for various packages. Usually pthreads |
vim-syntax
|
Pulls in related vim syntax scripts |
Emerge
После настройки USE-флагов установите www-servers/nginx:
root #
emerge --ask www-servers/nginx
Проверка установки
Стандартная конфигурация nginx определяет виртуальный сервер с корневым каталогом в /var/www/localhost/htdocs. Однако в связи с bug #449136, ebuild nginx'а создает только каталог /var/www/localhost, без индексного файла. Для получения рабочей стандартной конфигурации создайте каталог /var/www/localhost/htdocs и простой индексный файл:
root #
mkdir /var/www/localhost/htdocs
root #
echo 'Hello, world!' > /var/www/localhost/htdocs/index.html
Пакет nginx включает в себя init-скрипт, позволяющий останавливать, запуска и перезапускать службу веб-сервера. Для запуска службы nginx запустите следующую команду:
root #
/etc/init.d/nginx start
Чтобы проверить, что nginx запущен должным образом, перейдите в своем веб-браузере на адрес http://localhost, либо используйте один из веб-клиентов для командной строки (например, curl):
user $
curl http://localhost
Конфигурация
Конфигурация nginx находится в файле /etc/nginx/nginx.conf.
Доступ к одному сайту
Следующий пример показывает конфигурацию для доступа к одному сайту без динамических возможностей (таких как PHP).
/etc/nginx/nginx.conf
Конфигурация Gentoo по умолчаниюuser nginx nginx; worker_processes 1; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 10m; client_body_timeout 10m; send_timeout 10m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; request_pool_size 4k; gzip off; output_buffers 1 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; ignore_invalid_headers on; index index.html; server { listen 127.0.0.1; server_name localhost; access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; root /var/www/localhost/htdocs; } }
Доступ к нескольким сайтам
Через директиву include
возможно использовать конфигурации из разных файлов:
/etc/nginx/nginx.conf
Конфигурация для нескольких сайтовuser nginx nginx; worker_processes 1; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 10m; client_body_timeout 10m; send_timeout 10m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; request_pool_size 4k; gzip off; output_buffers 1 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; ignore_invalid_headers on; index index.html; include /etc/nginx/conf.d/*.conf; }
/etc/nginx/conf.d/local.conf
Простой хостserver { listen 127.0.0.1; server_name localhost; access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; root /var/www/localhost/htdocs; }
/etc/nginx/conf.d/local-ssl.conf
Простой SSL хостserver { listen 443 ssl; server_name host.tld; ssl_certificate /etc/ssl/nginx/host.tld.pem; ssl_certificate_key /etc/ssl/nginx/host.tld.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK; ssl_dhparam /etc/ssl/nginx/host.tld.dh4096.pem; ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; }
Поддержка PHP
Добавьте следующие строки в конфигурацию nginx для включения поддержки PHP. В данном примере nginx обменивается информацией с процессом PHP через UNIX-сокет.
/etc/nginx/nginx.conf
Поддержка PHP... http { ... server { ... location ~ \.php$ { # Проверка на несуществующие скрипты или ошибку 404 # Без этой строки nginx будет сразу отправлять любые запросы, оканчивающиеся на .php, в php-frm try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/php-fpm.socket; } } }
Для такой конфигурации необходимо собрать PHP с поддержкой менеджера процессов FastCGI (dev-lang/php), включив USE-флаг fpm
:
root #
echo "dev-lang/php fpm" >> /etc/portage/package.use
Пересоберите PHP с включенным fpm
USE-флагом:
root #
emerge --ask dev-lang/php
Использование UNIX-сокета для взаимодействия является предпочтительной и рекомендуемой конфигурацией
Просмотрите конфигурацию в файле /etc/php/fpm-php5.5/php-fpm.conf и добавьте следующую строку:
/etc/php/fpm-php5.5/php-fpm.conf
Запуск PHP с поддержкой UNIX-сокетаlisten = /run/php-fpm.socket listen.owner = nginx
Установите часовой пояс в php-frm (файл php.ini). Замените <PUT_TIMEZONE_HERE>
на подходящее значение:
/etc/php/fpm-php5.5/php.ini
Настройка часового пояса в php.inidate.timezone = <введите часовой пояс здесь>
Запуск демона php-fpm:
root #
/etc/init.d/php-fpm start
Добавьте php-fpm в уровень запуска default:
root #
rc-update add php-fpm default
Перезагрузите nginx с измененной конфигурацией:
root #
/etc/init.d/nginx reload
Список доступа по IP-адресам
Следующий пример демонстрирует получение доступа по конкретному URL (в данном случае /nginx_status):
- конкретные хосты (например 192.0.2.1 127.0.0.1)
- и IP-сети (например 198.51.100.0/24)
/etc/nginx/nginx.conf
Включение и настройка списков доступа по IP-адресу для страницы /nginx_statushttp { server { location /nginx_status { stub_status on; allow 127.0.0.1/32; allow 192.0.2.1/32; allow 198.51.100.0/24; deny all; } } }
Базовая аутентификация
nginx может ограничить доступ к ресурсам с помощью проверки имя пользователя и пароля:
/etc/nginx/nginx.conf
Включение и настройка аутентификации пользователя для /http { server { location / { auth_basic "Authentication failed"; auth_basic_user_file conf/htpasswd; } } }
Файл htpasswd может быть сгенерирован следующим образом:
user $
openssl passwd
Поддержка TLS
Настоятельно рекомендуется использовать только TLS и отключить известные небезопасные шифры.
/etc/nginx/nginx.conf
Включение TLS и отключение небезопасных алгоритмовserver { listen 443; server_name host.tld; ssl on; ssl_certificate /etc/ssl/nginx/host.tld.pem; ssl_certificate_key /etc/ssl/nginx/host.tld.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK; ssl_dhparam /etc/ssl/nginx/host.tld.dh4096.pem; }
ebuild устанавливает набор готовых самоподписанных сертификатов в /etc/ssl/nginx/
Защищенная пересылка
Сертификат по алгоритму Диффи — Хеллмана может быть создан при помощи openssl:
user $
openssl dhparam -out dh4096.pem 4096
Сторонние модули
Скачайте исходные тексты сторонних модулей и поместите их в каталог /usr/src. Вручную скомпилируйте выбранный модуль Nginx, после чего добавьте соответствующие строки в /etc/portage/make.conf:
/etc/portage/make.conf
Добавление сторонних модулейNGINX_ADD_MODULES="/usr/src/nginxmodule"
Пересоберите nginx с поддержкой сторонних модулей:
root #
emerge --ask www-servers/nginx
Использование
Управление службой
OpenRC
Запуск nginx:
root #
/etc/init.d/nginx start
Остановка nginx:
root #
/etc/init.d/nginx stop
Добавление nginx в уровень запуска default:
root #
rc-update add nginx default
Перезапуск nginx сервиса:
root #
/etc/init.d/nginx restart
Устранение проблем
В случае проблем следующие команды помогут найти ошибки.
Проверка конфигурации
Проверьте, что запущенная конфигурация nginx не содержит ошибок.
root #
/usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
При запуске nginx с параметром -t
будет произведена проверка синтаксиса файла конфигурации без запуска самого демона nginx.
Проверка запущенных процессов
Проверьте, запущены ли процессы nginx:
user $
ps aux | egrep 'nginx|PID'
PID TTY STAT TIME COMMAND 26092 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 26093 ? S 0:00 nginx: worker proces
Проверка адреса привязки и портов
Проверьте, что демон nginx прослушивает правильный TCP-порт (например, 80 для HTTP или 443 для HTTPS):
root #
netstat -tulpen | grep :80
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 0 12336835 -26092/nginx: master
Смотрите также
- Apache - самый популярный HTTP-сервер, используемый в Интернете.
- Lighttpd - быстрый, легковесный веб-сервер.
Внешние ресурсы
- https://nginx.org/en/docs/beginners_guide.html — руководство по nginx для новичков. Весьма полезено для тех, кто мало что знает о nginx.
- https://nginx.com/resources/admin-guide/ — продвинутое руководство по ngnix. Информативно для «практикующих» сетевых администраторов.
- http://wiki.nginx.org/Main — Вики nginx.
- https://github.com/h5bp/server-configs-nginx — конфигурации от H5BP для nginx.