nginx

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Nginx and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎日本語 • ‎한국어 • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎

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

aio Enables file AIO support local
http Enable HTTP core support local
http-cache Enable HTTP cache support local
http2 Enable HTTP2 module support local
libatomic Use libatomic instead of builtin atomic operations local
luajit Use dev-lang/luajit instead of dev-lang/lua for lua support when building the lua http module. local
pcre-jit Enable JIT for pcre local
rtmp NGINX-based Media Streaming Server local
ssl Enable HTTPS module for http. Enable SSL/TLS support for POP3/IMAP/SMTP for mail. local
threads Add threads support for various packages. Usually pthreads global

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.ini
date.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_status
http {
    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 - быстрый, легковесный веб-сервер.

Внешние ресурсы