Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
− | В этой статье описывается установка и настройка веб-сервера nginx для работы с [[PHP-FPM]], [[node.js]] и [[MySQL]] в операционной системе [[Ubuntu]].
| |
− |
| |
| == Установка == | | == Установка == |
| # apt-get install nginx | | # apt-get install nginx |
− | | + | == PHP == |
− | == Файл конфигурации == | + | === Установка === |
− | Настройки хранятся в файле '''/etc/nginx/nginx.conf'''.
| + | # apt-get install php5-mysql php5-fpm |
− | <pre>## Пользователь, от имени которого запускается nginx.
| + | |
− | user www-data;
| + | |
− | | + | |
− | ## Количество рабочих процессов, рекомендуется устанавливать по числу ядер.
| + | |
− | worker_processes auto;
| + | |
− | | + | |
− | ## Файл с ID процесса.
| + | |
− | pid /run/nginx.pid;
| + | |
− | | + | |
− | ## Директива уменьшает разрешение времени в рабочих процессах, за счёт чего уменьшается число системных вызовов gettimeofday().
| + | |
− | timer_resolution 100ms;
| + | |
− | | + | |
− | | + | |
− | events {
| + | |
− | ## Максимальное число подключений к серверу на один рабочий процесс.
| + | |
− | worker_connections 768;
| + | |
− | | + | |
− | ## Эффективный метод обработки соединений, используемый в Linux 2.6+
| + | |
− | use epoll;
| + | |
− | | + | |
− | ## Если выключен, то рабочий процесс за один раз принимает только одно новое соединение.
| + | |
− | 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;
| + | |
− | | + | |
− | ## Задать размер корзины в хэш-таблицах имён серверов.
| + | |
− | ## Значение по умолчанию зависит от размера строки кэша процессора.
| + | |
− | # server_names_hash_bucket_size 64;
| + | |
− | | + | |
− | ## Разрешить или запретить использовать в абсолютных перенаправлениях, выдаваемых nginx’ом, основное имя сервера, задаваемое директивой server_name.
| + | |
− | ## Если использование основного имени сервера запрещено, то используется имя, указанное в поле “Host” заголовка запроса.
| + | |
− | ## Если же этого поля нет, то используется IP-адрес сервера.
| + | |
− | # server_name_in_redirect off;
| + | |
− | | + | |
− | ## Подключить описание MIME-типов.
| + | |
− | include /etc/nginx/mime.types;
| + | |
− | | + | |
− | ## MIME-тип ответов по умолчанию.
| + | |
− | default_type application/octet-stream;
| + | |
− | | + | |
− | | + | |
− | ####
| + | |
− | ## Настройки SSL
| + | |
− | ####
| + | |
− | | + | |
− | ## Разрешить указанные протоколы.
| + | |
− | ## Параметры TLSv1.1 и TLSv1.2 работают только при использовании библиотеки OpenSSL версии 1.0.1 и выше.
| + | |
− | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
| + | |
− | | + | |
− | ## Указать, чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские.
| + | |
− | ssl_prefer_server_ciphers on;
| + | |
− | | + | |
− | | + | |
− | ####
| + | |
− | ## Настройки логов.
| + | |
− | ####
| + | |
− | | + | |
− | ## Задать путь, формат и настройки буферизованной записи в лог.
| + | |
− | ## http://nginx.org/ru/docs/http/ngx_http_log_module.html#access_log
| + | |
− | access_log /var/log/nginx/access.log;
| + | |
− | | + | |
− | ## Настроить запись в лог.
| + | |
− | ## На одном уровне может использоваться несколько логов (1.5.2).
| + | |
− | ## http://nginx.org/ru/docs/ngx_core_module.html#error_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/javascript text/xml application/xml application/xml+rss text/javascript;
| + | |
− | | + | |
− | | + | |
− | ####
| + | |
− | ## Настройки виртуальных хостов.
| + | |
− | ####
| + | |
− | | + | |
− | ## Подключить дополнительные файлы настроек.
| + | |
− | include /etc/nginx/conf.d/*.conf;
| + | |
− | | + | |
− | ## Подключить настройки активных сайтов.
| + | |
− | include /etc/nginx/sites-enabled/*;
| + | |
− | }</pre>
| + | |
− | | + | |
− | Для учета изменений настроек нужно перезагрузить службу
| + | |
− | sudo service nginx reload
| + | |
− | | + | |
− | Ссылки
| + | |
− | * [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_gzip_module.html Модуль ngx_http_gzip_module - nginx.org]
| + | |
− | | + | |
− | == Виртуальные хосты == | + | |
− | Виртуальные хосты используются для описания параметров отдельных сайтов, которые обслуживает nginx.
| + | |
− | По-умолчанию, настройки хранятся в отдельных файлах в директории '''/etc/nginx/sites-available/''',
| + | |
− | а для активации хоста нужно создать символьную ссылку в директории '''/etc/nginx/sites-enabled/''' на соответствующий файл настроек
| + | |
− | sudo ln -s /etc/nginx/sites-available/{имя сайта} /etc/nginx/sites-enabled/{имя сайта}
| + | |
− | и перезагрузить службу
| + | |
− | sudo service nginx reload
| + | |
− | | + | |
− | Один файл может содержать описание для нескольких сайтов, каждое должно находиться логическом блоке
| + | |
− | server {
| + | |
− | ## Для того, чтобы сайт был доступен по адресам <nowiki>http://{имя домена 1}/</nowiki> и <nowiki>http://{имя домена 2}/</nowiki>.
| + | |
− | server_name {имя домена 1} {имя домена 2};
| + | |
− |
| + | |
− | ## Обрабатываемый порт.
| + | |
− | listen 80;
| + | |
− | ## Обрабатываемый порт для определенного домена.
| + | |
− | #listen {имя домена} 8080;
| + | |
− | ## Обрабатываемый порт для ipv6.
| + | |
− | #listen [::]:80 [{имя домена}] ipv6only=on;
| + | |
− |
| + | |
− | ## Директория с файлами сайта.
| + | |
− | root /var/www/{имя сайта}/www;
| + | |
− |
| + | |
− | ## Файл лога для проблем доступа.
| + | |
− | access_log /var/www/{имя сайта}/access.log;
| + | |
− |
| + | |
− | ## Файл лога для ошибок.
| + | |
− | error_log /var/www/{имя сайта}/error.log;
| + | |
− |
| + | |
− | ## Подключение шаблона со стандартными настройками.
| + | |
− | include /etc/nginx/templates/default;
| + | |
− |
| + | |
− | ## Страница для ошибки 404.
| + | |
− | #error_page 404 /404.html;
| + | |
− |
| + | |
− | ## Перенаправление при ошибках на статическую страницу /50x.html.
| + | |
− | #error_page 500 502 503 504 /50x.html;
| + | |
− | #location = /50x.html {
| + | |
− | # root /var/www/{имя сайта}/www;
| + | |
− | #}
| + | |
− | }
| + | |
− | Если <code>server_name</code> совпадает с именем сайта, то можно использовать макрос <code>$server_name</code> для подстановки вместо <code>{имя сайта}</code>.
| + | |
− | | + | |
− | === Шаблоны ===
| + | |
− | Благодаря директиве <tt>include</tt> в блок настроек виртуального хоста можно включать внешние файлы.
| + | |
− | Шаблоны принято использовать для описания общих настроек.
| + | |
− | Файлы шаблонов, как правило, сохраняются в директорию '''/etc/nginx/templates/'''.
| + | |
− | | + | |
− | Например, стандартные настройки HTTP-хоста в файле '''/etc/nginx/templates/default'''
| + | |
− | ## Файлы, открываемые при пустом пути, в порядке приоритета. | + | |
− | index index.php index.html index.htm;
| + | |
− |
| + | |
− | location / {
| + | |
− | ## Сначала запрос обрабатывается как файл, потом как директория, потом происходит переход на страницу 404.
| + | |
− | try_files $uri $uri/ =404;
| + | |
− |
| + | |
− | ## Раскоментировать для использования naxsi в этой области.
| + | |
− | #include /etc/nginx/naxsi.rules
| + | |
− | }
| + | |
− |
| + | |
− | ## Закрыть доступ к файлами .htaccess и .htpassword.
| + | |
− | location ~ /\.ht {
| + | |
− | deny all;
| + | |
− | }
| + | |
− |
| + | |
− | ## Отключить логи, связанные с отсутствием иконки сайта.
| + | |
− | location = /favicon.ico {
| + | |
− | log_not_found off;
| + | |
− | access_log off;
| + | |
− | }
| + | |
− |
| + | |
− | ## Доступ к файлу с настройками для поисковых роботов.
| + | |
− | location = /robots.txt {
| + | |
− | allow all;
| + | |
− | log_not_found off;
| + | |
− | access_log off;
| + | |
− | }
| + | |
− | | + | |
− | # Активировать кэширование.
| + | |
− | location ~* \.(ico|css|js)$ {
| + | |
− | expires 7d;
| + | |
− | add_header Pragma public;
| + | |
− | add_header Cache-Control "public, must-revalidate, proxy-revalidate";
| + | |
− | }
| + | |
− | | + | |
− | === PHP ===
| + | |
− | Для работы с [[PHP-FPM]] достаточно создать шаблон '''/etc/nginx/templates/php''':
| + | |
− | ## Адрес FastCGI-сервера (имя или адрес и порт или путь к UNIX-сокету).
| + | |
− | ## Указывается в настройках виртуального хоста.
| + | |
− | #fastcgi_pass
| + | |
− |
| + | |
− | ## Имя файла, который при создании переменной $fastcgi_script_name будет добавляться после URI, если URI заканчивается слэшом.
| + | |
− | fastcgi_index index.php;
| + | |
− |
| + | |
− | ## Передавать ли клиенту ответы FastCGI-сервера с кодом больше либо равным 300.
| + | |
− | #fastcgi_intercept_errors on;
| + | |
− |
| + | |
− | ## Добавить параметры из /etc/nginx/fastcgi_param.
| + | |
− | include fastcgi_params;
| + | |
− |
| + | |
− | ## Путь к скрипту, который будет передан в PHP-FPM.
| + | |
− | ## При использовании chroot окружения нужно указывать относительный путь.
| + | |
− | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
| + | |
− |
| + | |
− | ## Закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа.
| + | |
− | fastcgi_ignore_client_abort off;
| + | |
− | и добавить в настройки виртуального хоста блок (<tt>{путь к файлу сокета}</tt> нужно заменить своим значением)
| + | |
− | ## Настройки обработки PHP-скриптов.
| + | |
− | location ~ \.php$ {
| + | |
− | ## Подключение шаблона с настройками PHP.
| + | |
− | include /etc/nginx/templates/php;
| + | |
− |
| + | |
− | ## Путь к UNIX-сокету PHP-FPM.
| + | |
− | fastcgi_pass unix:{путь к файлу сокета}
| + | |
− | }
| + | |
− | | + | |
− | С помощью директивы <tt>fastcgi_param</tt> и параметра <tt>PHP_VALUE</tt> можно изменять настройки службы PHP.
| + | |
− | Если использовать параметр <tt>PHP_ADMIN_VALUE</tt>, то указанная настройка не сможет быть изменена скриптом.
| + | |
− | | + | |
− | Например (<tt>{адрес почты}</tt> и <tt>{имя сайта}</tt> нужно заменить своими значениями)
| + | |
− | ## Путь к sendmail и параметр, указывающий адрес почты администратора сайта.
| + | |
− | fastcgi_param PHP_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f{адрес почты}";
| + | |
− |
| + | |
− | ## Директории с файлами сайта, файлами сессий и временными файлами.
| + | |
− | fastcgi_param PHP_ADMIN_VALUE "open_basedir = /var/www/{имя сайта}/:/tmp/:/";
| + | |
− |
| + | |
− | ## Ограничение памяти для выполнения скриптов.
| + | |
− | fastcgi_param PHP_VALUE "memory_limit = 256M";
| + | |
− |
| + | |
− | ## Максимальное время в секундах, в течение которого скрипт должен полностью загрузиться.
| + | |
− | fastcgi_param PHP_VALUE "max_execution_time = 60";
| + | |
− | | + | |
− | Если при выполнении скриптов возникает ошибка 502, то может помочь добавление
| + | |
− | fastcgi_buffer_size 16k;
| + | |
− | fastcgi_buffers 4 16k;
| + | |
− | в настройки виртуального сервера.
| + | |
− | | + | |
− | === node.js ===
| + | |
− | Для работы с сервером, основанным на [[node.js]] достаточно создать шаблон '''/etc/nginx/templates/nodejs_{имя сервера}''' (пример для сервера, основанного на [[node.js/Express|Express]]; <tt>{имя сервера}</tt>, <tt>{путь к корневой директории проекта}</tt>, <tt>{номер порта}</tt> и {путь к unix-сокету} нужно заменить подходящими значениями):
| + | |
− | <pre>## Директория с файлами сайта.
| + | |
− | root {путь к корневой директории проекта}/public;
| + | |
− | | + | |
− | ## Файл лога для проблем доступа.
| + | |
− | access_log {путь к корневой директории проекта}/access.log;
| + | |
− | | + | |
− | ## Файл лога для ошибок.
| + | |
− | error_log {путь к корневой директории проекта}/error.log;
| + | |
− | | + | |
− | ## Передача node.js обработки запросов не статического контента.
| + | |
− | location ~ ^/(?!css|images|js|favicon.ico) {
| + | |
− | ## Для сервера, слушающего порт.
| + | |
− | #proxy_pass http://localhost:{номер порта};
| + | |
− | ## Для сервера, слушающего unix-сокет.
| + | |
− | proxy_pass http://unix:{путь к unix-сокету}:$uri$is_args$args;
| + | |
− | | + | |
− | proxy_http_version 1.1;
| + | |
− | proxy_set_header Upgrade $http_upgrade;
| + | |
− | proxy_set_header Connection 'upgrade';
| + | |
− | proxy_set_header Host $host;
| + | |
− | proxy_cache_bypass $http_upgrade;
| + | |
− | }
| + | |
− | | + | |
− | ## Отключить логи, связанные с отсутствием иконки сайта.
| + | |
− | location = /favicon.ico {
| + | |
− | log_not_found off;
| + | |
− | access_log off;
| + | |
− | }
| + | |
− | | + | |
− | ## Доступ к файлу с настройками для поисковых роботов.
| + | |
− | location = /robots.txt {
| + | |
− | allow all;
| + | |
− | log_not_found off;
| + | |
− | access_log off;
| + | |
− | }</pre>
| + | |
− | и подключить этот файл в настройках каждого виртуального хоста, работающего с рассматриваемым сервером [[node.js]].
| + | |
− | | + | |
− | === Ссылки ===
| + | |
− | * [http://nginx.org/ru/docs/http/ngx_http_fastcgi_module.html Модуль ngx_http_fastcgi_module - nginx.org]
| + | |
− | * [http://php.net/manual/ru/info.configuration.php PHP: Настройка во время выполнения - Manual]
| + | |
− | * [https://modx.pro/hosting/797-set-php-options-through-nginx/ Установка параметров php через Nginx]
| + | |
− | | + | |
− | == Ссылки ==
| + | |
− | * [http://habrahabr.ru/post/164401/ Nginx+php-fpm+perl под Debian Squeeze]
| + | |
− | * [http://howitmake.ru/blog/ubuntu/80.html Настройка Nginx с поддержкой PHP-FPM в Ubuntu 12.04 (включает: Nginx, php-fpm, MySQL, Memcached)]
| + | |
− | * [http://manualpages.pro/node/31 Полноценный http-сервер без Apache, на nginx+php-fpm под Debian Squeeze]
| + | |
− | | + | |
− | [[Категория:База знаний]]
| + | |
− | [[Категория:Linux]][[Категория:Ubuntu]]
| + | |
− | [[Категория:nginx]][[Категория:PHP]][[Категория:node.js]][[Категория:MySQL]]
| + | |