Редактирование Nginx
Материал из K.Wiki
Внимание! Вы не авторизовались на сайте.
В истории изменений этой страницы будет записан ваш IP-адрес.Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM | + | В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM]] и [[MySQL]] в операционной системе [[Ubuntu]]. |
== Установка == | == Установка == | ||
Строка 5: | Строка 5: | ||
== Файл конфигурации == | == Файл конфигурации == | ||
− | Настройки хранятся в файле | + | Настройки хранятся в файле <tt>/etc/nginx/nginx.conf</tt>. |
− | < | + | |
− | + | ||
− | ## Количество рабочих процессов, рекомендуется устанавливать по числу ядер. | + | # Пользователь, от имени которого запускается nginx. |
− | worker_processes | + | user www-data; |
− | + | ||
− | + | # Количество рабочих процессов, рекомендуется устанавливать по числу ядер. | |
− | pid /run/nginx.pid; | + | worker_processes 4; |
− | + | ||
− | + | # Файл с ID процесса. | |
− | timer_resolution 100ms; | + | pid /run/nginx.pid; |
− | + | ||
− | + | # Директива уменьшает разрешение времени в рабочих процессах, за счёт чего уменьшается число системных вызовов gettimeofday(). | |
− | events { | + | timer_resolution 100ms; |
− | + | ||
− | + | # Ограничение на максимальное число открытых файлов. | |
− | + | worker_rlimit_nofile 8192; | |
− | + | ||
− | + | events { | |
− | + | # Максимальное число подключений к серверу на один рабочий процесс. | |
− | + | worker_connections 768; | |
− | + | ||
− | } | + | # Эффективный метод обработки соединений, используемый в Linux 2.6+ |
− | + | use epoll; | |
− | + | ||
− | http { | + | # Если выключен, то рабочий процесс за один раз принимает только одно новое соединение. |
− | + | #multi_accept on; | |
− | + | } | |
− | + | ||
− | + | http { | |
− | + | ## | |
− | + | # Основные настройки. | |
− | + | ## | |
− | + | ||
− | + | # Разрешить использовать sendfile(). | |
− | + | sendfile on; | |
− | + | ||
− | + | # Разрешить использование параметра сокета TCP_NOPUSH во FreeBSD или TCP_CORK в Linux. | |
− | + | # Параметр включается только при использовании sendfile. | |
− | + | tcp_nopush on; | |
− | + | ||
− | + | # Разрешить использование параметра TCP_NODELAY. | |
− | + | # Параметр включаются только при переходе соединения в состояние keep-alive. | |
− | + | tcp_nodelay on; | |
− | + | ||
− | + | # Таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. | |
− | + | # Значение 0 запрещает keep-alive соединения с клиентами. | |
− | + | keepalive_timeout 65; | |
− | + | ||
− | + | # Максимальный размер хэш-таблиц типов. | |
− | + | types_hash_max_size 2048; | |
− | + | ||
− | + | # Запретить выдавать версию nginx’а в сообщениях об ошибках и в поле “Server” заголовка ответа. | |
− | + | server_tokens off; | |
− | + | ||
− | + | # Подключить описание MIME-типов. | |
− | + | include /etc/nginx/mime.types; | |
− | + | ||
− | + | # MIME-тип ответов по умолчанию. | |
− | + | default_type application/octet-stream; | |
− | + | ||
− | + | ||
− | + | ## | |
− | + | # Настройки логов. | |
− | + | ## | |
− | + | ||
− | + | # Настройки файла логов доступа. | |
− | + | access_log /var/log/nginx/access.log; | |
− | + | ||
− | + | # Настройки файла логов ошибок. | |
− | + | error_log /var/log/nginx/error.log; | |
− | + | ||
− | + | ||
− | + | ## | |
− | + | # Настройки сжатия. | |
− | + | ## | |
− | + | ||
− | + | # Разрешить сжатие ответа методом gzip. | |
− | + | gzip on; | |
− | + | ||
− | + | # Запретить сжатие ответа методом gzip для запросов с полями заголовка “User-Agent”, совпадающими с заданными регулярными выражениями. | |
− | + | gzip_disable "msie6"; | |
− | + | ||
− | + | # Разрешить или запретить выдавать в ответе поле заголовка “Vary: Accept-Encoding”, если активны директивы gzip, gzip_static или gunzip. | |
− | + | #gzip_vary on; | |
− | + | ||
− | + | # Разрешить или запретить сжатие ответа методом gzip для проксированных запросов в зависимости от запроса и ответа. | |
− | + | #gzip_proxied any; | |
− | + | ||
− | + | # Степень сжатия ответа методом gzip. | |
− | + | # Допустимые значения находятся в диапазоне от 1 до 9. | |
− | + | #gzip_comp_level 6; | |
− | + | ||
− | + | # Число и размер буферов, в которые будет сжиматься ответ. | |
− | + | #gzip_buffers 16 8k; | |
− | + | ||
− | + | # Минимальная HTTP-версия запроса, необходимую для сжатия ответа. | |
− | + | #gzip_http_version 1.1; | |
− | + | ||
− | + | # Разрешить сжатие ответа методом gzip для указанных MIME-типов в дополнение к “text/html”. | |
− | + | gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; | |
− | + | ||
− | + | ||
− | + | ## | |
− | + | # Настройки виртуальных хостов. | |
− | + | ## | |
− | + | ||
− | + | # Подключить дополнительные файлы настроек. | |
− | + | include /etc/nginx/conf.d/*.conf; | |
− | + | ||
− | + | # Подключить настройки активных сайтов. | |
− | + | include /etc/nginx/sites-enabled/*; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | } | + | |
Для учета изменений настроек нужно перезагрузить службу | Для учета изменений настроек нужно перезагрузить службу | ||
− | + | # service nginx reload | |
− | Ссылки | + | === Ссылки === |
* [http://nginx.org/ru/docs/ngx_core_module.html Основная функциональность - nginx.org] | * [http://nginx.org/ru/docs/ngx_core_module.html Основная функциональность - nginx.org] | ||
* [http://nginx.org/ru/docs/http/ngx_http_core_module.html Модуль ngx_http_core_module - nginx.org] | * [http://nginx.org/ru/docs/http/ngx_http_core_module.html Модуль ngx_http_core_module - nginx.org] | ||
Строка 150: | Строка 128: | ||
== Виртуальные хосты == | == Виртуальные хосты == | ||
Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx. | Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx. | ||
− | По-умолчанию, настройки хранятся в отдельных файлах в директории | + | По-умолчанию, настройки хранятся в отдельных файлах в директории <tt>/etc/nginx/sites-available/</tt>, |
− | а для активации хоста нужно создать символьную ссылку в директории | + | а для активации хоста нужно создать символьную ссылку в директории <tt>/etc/nginx/sites-enabled/</tt> на соответствующий файл настроек |
− | + | # ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта} | |
− | и | + | и перезапустить сервер |
− | + | # service nginx reload | |
Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке | Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке | ||
server { | server { | ||
− | + | # Обрабатываемый порт. | |
− | + | ||
− | + | ||
− | + | ||
listen 80; | listen 80; | ||
− | + | # Обрабатываемый порт для определенного домена. | |
#listen {имя домена} 8080; | #listen {имя домена} 8080; | ||
− | + | # Обрабатываемый порт для ipv6. | |
#listen [::]:80 [{имя домена}] ipv6only=on; | #listen [::]:80 [{имя домена}] ipv6only=on; | ||
− | + | # Директория с файлами сайта. | |
root /var/www/{имя сайта}/www; | root /var/www/{имя сайта}/www; | ||
− | ## Файл лога для проблем доступа. | + | # Для того, чтобы сайт был доступен по адресам <nowiki>http://{имя домена 1}/</nowiki> и <nowiki>http://{имя домена 2}/</nowiki>. |
+ | server_name {имя домена 1} {имя домена 2}; | ||
+ | |||
+ | # Файл лога для проблем доступа. | ||
access_log /var/www/{имя сайта}/access.log; | access_log /var/www/{имя сайта}/access.log; | ||
− | + | # Файл лога для ошибок. | |
error_log /var/www/{имя сайта}/error.log; | error_log /var/www/{имя сайта}/error.log; | ||
− | + | # Подключение шаблона со стандартными настройками. | |
include /etc/nginx/templates/default; | include /etc/nginx/templates/default; | ||
− | + | # Страница для ошибки 404. | |
#error_page 404 /404.html; | #error_page 404 /404.html; | ||
− | + | # Перенаправление при ошибках на статическую страницу /50x.html. | |
#error_page 500 502 503 504 /50x.html; | #error_page 500 502 503 504 /50x.html; | ||
#location = /50x.html { | #location = /50x.html { | ||
Строка 189: | Строка 167: | ||
#} | #} | ||
} | } | ||
− | |||
=== Шаблоны === | === Шаблоны === | ||
Благодаря директиве <tt>include</tt> в блок настроек виртуального хоста можно включать внешние файлы. | Благодаря директиве <tt>include</tt> в блок настроек виртуального хоста можно включать внешние файлы. | ||
Шаблоны принято использовать для описания общих настроек. | Шаблоны принято использовать для описания общих настроек. | ||
− | Файлы шаблонов, как правило, сохраняются в директорию | + | Файлы шаблонов, как правило, сохраняются в директорию <tt>/etc/nginx/templates/</tt>. |
− | Например, стандартные настройки HTTP-хоста в файле | + | Например, стандартные настройки HTTP-хоста в файле <tt>/etc/nginx/templates/default</tt> |
− | + | # Файлы, открываемые при пустом пути, в порядке приоритета. | |
− | index | + | index index.html index.htm; |
location / { | location / { | ||
− | + | # Сначала запрос обрабатывается как файл, потом как директория, потом происходит переход на страницу 404. | |
try_files $uri $uri/ =404; | try_files $uri $uri/ =404; | ||
− | + | # Раскоментировать для использования naxsi в этой области. | |
#include /etc/nginx/naxsi.rules | #include /etc/nginx/naxsi.rules | ||
} | } | ||
− | + | # Закрыть доступ к файлами .htaccess и .htpassword. | |
location ~ /\.ht { | location ~ /\.ht { | ||
deny all; | deny all; | ||
} | } | ||
− | + | # Отключить логи, связанные с отсутствием иконки сайта. | |
location = /favicon.ico { | location = /favicon.ico { | ||
log_not_found off; | log_not_found off; | ||
Строка 219: | Строка 196: | ||
} | } | ||
− | + | # Доступ к файлу с настройками для поисковых роботов. | |
location = /robots.txt { | location = /robots.txt { | ||
allow all; | allow all; | ||
log_not_found off; | log_not_found off; | ||
access_log off; | access_log off; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
=== PHP === | === PHP === | ||
− | Для работы с [[PHP-FPM]] достаточно создать шаблон | + | Для работы с [[PHP-FPM]] достаточно создать шаблон <tt>/etc/nginx/templates/php</tt> (<tt>{имя домена}</tt> нужно заменить своим значением) |
− | + | # Адрес FastCGI-сервера (имя или адрес и порт или путь к UNIX-сокету). | |
− | + | # Указывается в настройках виртуального хоста. | |
#fastcgi_pass | #fastcgi_pass | ||
− | + | # Имя файла, который при создании переменной $fastcgi_script_name будет добавляться после URI, если URI заканчивается слэшом. | |
fastcgi_index index.php; | fastcgi_index index.php; | ||
− | + | # Передавать ли клиенту ответы FastCGI-сервера с кодом больше либо равным 300. | |
#fastcgi_intercept_errors on; | #fastcgi_intercept_errors on; | ||
− | + | # Добавить параметры из /etc/nginx/fastcgi_param. | |
include fastcgi_params; | include fastcgi_params; | ||
− | + | # Путь к скрипту, который будет передан в PHP-FPM. | |
− | + | ||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
+ | # При использовании chroot окружения нужно указывать путь по-другому. | ||
+ | #fastcgi_param SCRIPT_FILENAME /{имя домена}$fastcgi_script_name; | ||
− | + | # Закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа. | |
fastcgi_ignore_client_abort off; | fastcgi_ignore_client_abort off; | ||
− | и добавить в настройки виртуального хоста блок (<tt>{ | + | и добавить в настройки виртуального хоста блок (<tt>{имя сайта}</tt> нужно заменить своим значением) |
− | + | # Настройки обработки PHP-скриптов. | |
location ~ \.php$ { | location ~ \.php$ { | ||
− | + | # Подключение шаблона с настройками PHP. | |
include /etc/nginx/templates/php; | include /etc/nginx/templates/php; | ||
− | + | # Путь к UNIX-сокету PHP-FPM. | |
− | fastcgi_pass unix:{ | + | fastcgi_pass unix:/var/run/php5-fpm_{имя сайта}.sock; |
} | } | ||
Строка 268: | Строка 239: | ||
Например (<tt>{адрес почты}</tt> и <tt>{имя сайта}</tt> нужно заменить своими значениями) | Например (<tt>{адрес почты}</tt> и <tt>{имя сайта}</tt> нужно заменить своими значениями) | ||
− | + | # Путь к sendmail и параметр, указывающий адрес почты администратора сайта. | |
fastcgi_param PHP_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f{адрес почты}"; | fastcgi_param PHP_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f{адрес почты}"; | ||
− | + | # Директории с файлами сайта, файлами сессий и временными файлами. | |
− | fastcgi_param PHP_ADMIN_VALUE "open_basedir = /var/www/{имя сайта}/:/ | + | fastcgi_param PHP_ADMIN_VALUE "open_basedir = /var/www/{имя сайта}/:/var/www/{имя сайта}/save/:/var/www/{имя сайта}//tmp/"; |
− | + | # Ограничение памяти для выполнения скриптов. | |
fastcgi_param PHP_VALUE "memory_limit = 256M"; | fastcgi_param PHP_VALUE "memory_limit = 256M"; | ||
− | + | # Максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. | |
fastcgi_param PHP_VALUE "max_execution_time = 60"; | fastcgi_param PHP_VALUE "max_execution_time = 60"; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Ссылки === | === Ссылки === | ||
Строка 336: | Строка 263: | ||
[[Категория:База знаний]] | [[Категория:База знаний]] | ||
[[Категория:Linux]][[Категория:Ubuntu]] | [[Категория:Linux]][[Категория:Ubuntu]] | ||
− |