Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
wiki:nginx-phpfpm [2015/06/01 03:21] [Для сайта на основе Wordpress] |
wiki:nginx-phpfpm [2015/06/01 04:04] (текущий) Ссылки |
||
|---|---|---|---|
| Строка 85: | Строка 85: | ||
| <code bash>sudo nano /etc/nginx/common/upstream</code> | <code bash>sudo nano /etc/nginx/common/upstream</code> | ||
| и добавим в него строчки | и добавим в него строчки | ||
| - | <code> | + | <code=php> |
| upstream php-fpm | upstream php-fpm | ||
| { | { | ||
| Строка 95: | Строка 95: | ||
| Редактируем файл «/etc/nginx/sites-available/example.com». Добавляем строчку | Редактируем файл «/etc/nginx/sites-available/example.com». Добавляем строчку | ||
| - | <code> | + | <code=php> |
| include common/upstream; | include common/upstream; | ||
| </code> | </code> | ||
| Строка 101: | Строка 101: | ||
| Далее описываем перенаправление от HTTP к HTTPS, если, конечно, это планируется. В таком случае необходимо наличие сертификатов для HTTPS (см. [[wiki:руководство_по_ubuntu_server:безопасность:certificates|Сертификаты]]) | Далее описываем перенаправление от HTTP к HTTPS, если, конечно, это планируется. В таком случае необходимо наличие сертификатов для HTTPS (см. [[wiki:руководство_по_ubuntu_server:безопасность:certificates|Сертификаты]]) | ||
| - | <code> | + | <code=php> |
| server | server | ||
| { | { | ||
| Строка 112: | Строка 112: | ||
| Начинаем описывать конфигурацию сайта | Начинаем описывать конфигурацию сайта | ||
| - | <code> | + | <code=php> |
| server | server | ||
| { | { | ||
| Строка 118: | Строка 118: | ||
| Сетевой порт для приема соединений: 80 — обычный HTTP; 443 — HTTPS (см. выше) | Сетевой порт для приема соединений: 80 — обычный HTTP; 443 — HTTPS (см. выше) | ||
| - | <code> | + | <code=php> |
| # Порты | # Порты | ||
| listen 80; | listen 80; | ||
| Строка 124: | Строка 124: | ||
| </code> | </code> | ||
| Корневая директория сайта работающего на данном сервере | Корневая директория сайта работающего на данном сервере | ||
| - | <code> | + | <code=php> |
| root /var/www; | root /var/www; | ||
| </code> | </code> | ||
| Возможные имена индексных файлов (их «Nginx» пытается открыть если он получил запрос вида «example.com/», вместо явного «example.com/index.html») | Возможные имена индексных файлов (их «Nginx» пытается открыть если он получил запрос вида «example.com/», вместо явного «example.com/index.html») | ||
| - | <code> | + | <code=php> |
| index index.php index.html index.htm; | index index.php index.html index.htm; | ||
| </code> | </code> | ||
| Имя сервера -- обычно доменное имя Вашего сервера | Имя сервера -- обычно доменное имя Вашего сервера | ||
| - | <code> | + | <code=php> |
| server_name example.com www.example.com; | server_name example.com www.example.com; | ||
| </code> | </code> | ||
| - | ==== Настройка шифрования SSL ==== | + | ==== Шифрование ==== |
| Необходимо наличие сертификата «*.crt» или «*.pem» и приватного секретного ключа «*.key» (см. [[wiki:руководство_по_ubuntu_server:безопасность:certificates|Сертификаты]]). Самоподписанный сертификат можно сгенерировать командой в терминале (см. [[http://manpages.ubuntu.com/manpages/lucid/man1/openssl.1ssl.html|man openssl]], [[http://manpages.ubuntu.com/manpages/precise/man1/req.1ssl.html|man req]]) | Необходимо наличие сертификата «*.crt» или «*.pem» и приватного секретного ключа «*.key» (см. [[wiki:руководство_по_ubuntu_server:безопасность:certificates|Сертификаты]]). Самоподписанный сертификат можно сгенерировать командой в терминале (см. [[http://manpages.ubuntu.com/manpages/lucid/man1/openssl.1ssl.html|man openssl]], [[http://manpages.ubuntu.com/manpages/precise/man1/req.1ssl.html|man req]]) | ||
| Строка 178: | Строка 178: | ||
| Файлы сертификатов для «HTTPS» | Файлы сертификатов для «HTTPS» | ||
| - | <code> | + | <code=php> |
| ssl_certificate /etc/ssl/certs/example.com_nginx.crt; # сертификат (можно свободно распространять) | ssl_certificate /etc/ssl/certs/example.com_nginx.crt; # сертификат (можно свободно распространять) | ||
| ssl_certificate_key /etc/ssl/private/example.com_nginx.key; # приватный ключ (секретный файл - НИКОМУ НЕ ПОКАЗЫВАТЬ) | ssl_certificate_key /etc/ssl/private/example.com_nginx.key; # приватный ключ (секретный файл - НИКОМУ НЕ ПОКАЗЫВАТЬ) | ||
| </code> | </code> | ||
| Дополнительные параметры требуемые для «HTTPS» | Дополнительные параметры требуемые для «HTTPS» | ||
| - | <code> | + | <code=php> |
| ssl_dhparam /etc/ssl/private/example.com_nginx.dh.key; # писать эту строчку только если файл есть | ssl_dhparam /etc/ssl/private/example.com_nginx.dh.key; # писать эту строчку только если файл есть | ||
| ssl_session_timeout 20m; # время 20 минут | ssl_session_timeout 20m; # время 20 минут | ||
| Строка 194: | Строка 194: | ||
| Продолжаем редактировать файл «/etc/nginx/sites-available/example.com». Подгружаем созданный выше конфигурационный файл с описанием настроек SSL | Продолжаем редактировать файл «/etc/nginx/sites-available/example.com». Подгружаем созданный выше конфигурационный файл с описанием настроек SSL | ||
| - | <code> | + | <code=php> |
| # Настройка шифрования SSL | # Настройка шифрования SSL | ||
| include common/ssl; | include common/ssl; | ||
| </code> | </code> | ||
| - | ==== Различные настройки ==== | + | ==== Прочие настройки ==== |
| Указание максимального размера запроса -- необходимо если сервер будет использоваться для загрузки больших файлов (например, для построения небольшого облачного хранилища на основе «ownCloud», эта строчка по сути делает то же что и указанные выше при настройке «PHP-FPM», только теперь для «Nginx») | Указание максимального размера запроса -- необходимо если сервер будет использоваться для загрузки больших файлов (например, для построения небольшого облачного хранилища на основе «ownCloud», эта строчка по сути делает то же что и указанные выше при настройке «PHP-FPM», только теперь для «Nginx») | ||
| - | <code> | + | <code=php> |
| client_max_body_size 200m; # увеличение максимального объема файла для загрузки до 200МБ | client_max_body_size 200m; # увеличение максимального объема файла для загрузки до 200МБ | ||
| </code> | </code> | ||
| Ещё одна опция | Ещё одна опция | ||
| - | <code> # Buffers | + | <code=php> # Buffers |
| fastcgi_buffers 64 4K; | fastcgi_buffers 64 4K; | ||
| </code> | </code> | ||
| - | ==== Настройки безопасности ==== | + | ==== Безопасность ==== |
| Опишем настройки безопасности в отдельном файле | Опишем настройки безопасности в отдельном файле | ||
| <code=bash>sudo touch /etc/nginx/common/security | <code=bash>sudo touch /etc/nginx/common/security | ||
| Строка 217: | Строка 217: | ||
| И укажем в нём | И укажем в нём | ||
| - | <code> | + | <code=php> |
| add_header X-Frame-Options "SAMEORIGIN"; | add_header X-Frame-Options "SAMEORIGIN"; | ||
| add_header X-Content-Type-Options "nosniff"; | add_header X-Content-Type-Options "nosniff"; | ||
| Строка 223: | Строка 223: | ||
| Сохраним и закроем файл, а затем подключим его строкой | Сохраним и закроем файл, а затем подключим его строкой | ||
| - | <code> | + | <code=php> |
| include common/security; | include common/security; | ||
| </code> | </code> | ||
| Строка 236: | Строка 236: | ||
| и введём | и введём | ||
| - | <code>gzip on; | + | <code=php>gzip on; |
| gzip_disable "msie6"; | gzip_disable "msie6"; | ||
| gzip_comp_level 6; | gzip_comp_level 6; | ||
| Строка 246: | Строка 246: | ||
| Следует сохранить, закрыть и затем подключить этот файл срочкой | Следует сохранить, закрыть и затем подключить этот файл срочкой | ||
| - | <code> | + | <code=php> |
| include common/gzip; | include common/gzip; | ||
| </code> | </code> | ||
| - | ==== Описание директорий сайта ==== | + | ==== Директории сайта ==== |
| Далее указание директорий сайта и правил работы с ними с использованием директив «location». Данная директива может обрабатывать регулярные выражения «Perl» (см. [[http://www.opennet.ru/docs/RUS/perl-maslov/re.html|Регулярные выражения (шаблоны)]]) | Далее указание директорий сайта и правил работы с ними с использованием директив «location». Данная директива может обрабатывать регулярные выражения «Perl» (см. [[http://www.opennet.ru/docs/RUS/perl-maslov/re.html|Регулярные выражения (шаблоны)]]) | ||
| Строка 259: | Строка 259: | ||
| Корневая директория | Корневая директория | ||
| - | <code> | + | <code=php> |
| location "/" | location "/" | ||
| { | { | ||
| Строка 267: | Строка 267: | ||
| </code> | </code> | ||
| К примеру, если хочется построить сайт на основе «WordPress», то можно описать корневую директорию так | К примеру, если хочется построить сайт на основе «WordPress», то можно описать корневую директорию так | ||
| - | <code> | + | <code=php> |
| location "/" | location "/" | ||
| { | { | ||
| Строка 278: | Строка 278: | ||
| Директории можно описывать по одной в этом же файле, но это не удобно и не наглядно. А можно указать строчку | Директории можно описывать по одной в этом же файле, но это не удобно и не наглядно. А можно указать строчку | ||
| - | <code> include common/locations/*.inc;</code> | + | <code=php> include common/locations/*.inc;</code> |
| которая укажет «Nginx», что нужно подключить все файлы в директории «/etc/common/locations/» которые соответствуют шаблону «*.inc», таким образом, если один из файлов нужно будет временно отключить, то его можно просто переименовать убрав расширение в имени. Создадим директорию где будут хранится эти файлы | которая укажет «Nginx», что нужно подключить все файлы в директории «/etc/common/locations/» которые соответствуют шаблону «*.inc», таким образом, если один из файлов нужно будет временно отключить, то его можно просто переименовать убрав расширение в имени. Создадим директорию где будут хранится эти файлы | ||
| <code=bash>sudo mkdir /etc/nginx/common/locations</code> | <code=bash>sudo mkdir /etc/nginx/common/locations</code> | ||
| Строка 286: | Строка 286: | ||
| sudo nano /etc/nginx/common/locations/restricted.inc</code> | sudo nano /etc/nginx/common/locations/restricted.inc</code> | ||
| со строчками | со строчками | ||
| - | <code> | + | <code=php> |
| location ^~ "/restricted/" | location ^~ "/restricted/" | ||
| { | { | ||
| Строка 300: | Строка 300: | ||
| Этот конфигурационный файл подключится автоматически, за счёт шаблона (см. выше). | Этот конфигурационный файл подключится автоматически, за счёт шаблона (см. выше). | ||
| - | ==== Для сайта на основе Wordpress ==== | + | ==== Wordpress ==== |
| Для более полной информации по настройке «Nginx» для «WordPress» следует обратиться к официальной документации (см. [[http://codex.wordpress.org/Nginx|codex.wordpress.org/Nginx]] и [[http://wiki.nginx.org/WordPress|wiki.nginx.org/WordPress]]) | Для более полной информации по настройке «Nginx» для «WordPress» следует обратиться к официальной документации (см. [[http://codex.wordpress.org/Nginx|codex.wordpress.org/Nginx]] и [[http://wiki.nginx.org/WordPress|wiki.nginx.org/WordPress]]) | ||
| Натройки «Wordpress», который, в данном примере, находится в папке «/var/www/wordpress» будут описаны в файле «/etc/nginx/common/locations/wordpress.inc» | Натройки «Wordpress», который, в данном примере, находится в папке «/var/www/wordpress» будут описаны в файле «/etc/nginx/common/locations/wordpress.inc» | ||
| - | <code>sudo touch /etc/nginx/common/locations/wordpress.inc | + | <code=bash>sudo touch /etc/nginx/common/locations/wordpress.inc |
| sudo nano /etc/nginx/common/locations/wordpress.inc</code> | sudo nano /etc/nginx/common/locations/wordpress.inc</code> | ||
| Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости | Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут перенаправляться запросы при необходимости | ||
| - | <code>location @wordpress | + | <code=php>location @wordpress |
| { | { | ||
| rewrite "^/wordpress/(.*)$" "/wordpress/index.php?q=$1" last; | rewrite "^/wordpress/(.*)$" "/wordpress/index.php?q=$1" last; | ||
| }</code> | }</code> | ||
| Аналогично примеру выше предотвращаем обработку остальных директив «location» | Аналогично примеру выше предотвращаем обработку остальных директив «location» | ||
| - | <code> | + | <code=php> |
| location ^~ "/wordpress/" | location ^~ "/wordpress/" | ||
| { | { | ||
| Строка 333: | Строка 333: | ||
| return 404; | return 404; | ||
| } | } | ||
| - | # Перенаправление php-файлов к серверу «PHP-FPM» | + | # Перенаправление php-файлов к серверу «PHP-FPM» см. ниже по статье |
| location ~ "^(/wordpress/.+?\.php)(/.*)?$" | location ~ "^(/wordpress/.+?\.php)(/.*)?$" | ||
| { | { | ||
| Строка 348: | Строка 348: | ||
| Сохраняем и закрываем этот файл. Опять же, он будет подключён автоматически. | Сохраняем и закрываем этот файл. Опять же, он будет подключён автоматически. | ||
| - | ==== Для облачного хранилища на основе ownCloud ==== | + | ==== ownCloud ==== |
| - | Для наиболее полной информации следует обратится к официальному руководству «OwnCloud» (см. [[http://doc.owncloud.org/server/6.0/admin_manual/installation/installation_source.html#nginx-configuration|Nginx Configuration]]). К примеру, «ownCloud» находится в папке «/var/www/owncloud». | + | Для наиболее полной информации следует обратится к официальному руководству «OwnCloud» (см. [[https://doc.owncloud.org/server/8.0/admin_manual/installation/nginx_configuration.html|Nginx Configuration]]). К примеру, «ownCloud» находится в папке «/var/www/owncloud». |
| Создадим файл настроек для «ownCloud» и отредактируем его | Создадим файл настроек для «ownCloud» и отредактируем его | ||
| - | <code>sudo touch /etc/nginx/common/locations/owncloud | + | <code=bash>sudo touch /etc/nginx/common/locations/owncloud.inc |
| - | sudo nano /etc/nginx/common/locations/owncloud</code> | + | sudo nano /etc/nginx/common/locations/owncloud.inc</code> |
| - | + | Многое аналогично примеру для «Wordpress» | |
| - | Добавим строчки базовых настроек | + | <code=php>location ^~ "/owncloud/" |
| - | <code>location "/owncloud/" | + | |
| { | { | ||
| + | root "/var/www"; | ||
| index index.php index.html index.htm; | index index.php index.html index.htm; | ||
| try_files $uri $uri/ =404; | try_files $uri $uri/ =404; | ||
| + | # ownCloud предоставляет свои красивые страницы для ошибок 404 и 403 - используем их | ||
| error_page 403 /owncloud/core/templates/403.php; | error_page 403 /owncloud/core/templates/403.php; | ||
| error_page 404 /owncloud/core/templates/404.php; | error_page 404 /owncloud/core/templates/404.php; | ||
| + | |||
| + | # Отключаем сжатие - оно создаёт проблемы для клиента синхронизации ownCloud | ||
| + | gzip off; | ||
| + | # Переопределяем глобальную настройку описанную в главном файле | ||
| + | # увеличиваем максимальный размер загружаемых файлов | ||
| + | client_max_body_size 16G; | ||
| + | # Запрещаем читать секретные файлы | ||
| + | location ~* "^/owncloud/(\.user\.ini|data|config|db_structure\.xml|README)(/.*)?$" | ||
| + | { | ||
| + | deny all; | ||
| + | return 404; | ||
| + | } | ||
| + | location ~ "^(/owncloud/.+?\.php)(/.*)?$" | ||
| + | { | ||
| + | try_files $1 $uri $uri/ $uri/index.php =404; | ||
| + | include common/php-fpm; | ||
| + | } | ||
| + | include common/deny; | ||
| + | include common/cache; | ||
| }</code> | }</code> | ||
| - | И также строчки для ограничения доступа | ||
| - | <code>location ~* "^/owncloud/(data|config|db_structure\.xml|README)((/.*)?)$" | ||
| - | { | ||
| - | deny all; | ||
| - | error_page 403 /owncloud/core/templates/403.php; | ||
| - | error_page 404 /owncloud/core/templates/404.php; | ||
| - | return 404; | ||
| - | }</code> | ||
| - | Иначе пользователь может загрузить php-скрипт в «/owncloud/data/files/user/» и выполнить его вызвав «example.com/owncloud/data/user/files/foo.php». | ||
| - | |||
| - | Подключаем этот конфигурационный файл строчкой | ||
| - | <code>include common/locations/owncloud;</code> | ||
| - | в файле «/etc/nginx/sites-available/example.com». | ||
| Начиная с версии «ownCloud» 8 появился отдельный файл для переопределения некоторых настроек «PHP-FPM» взамен указанных в «/etc/php5/fpm/php.ini». Открыть его можно командой | Начиная с версии «ownCloud» 8 появился отдельный файл для переопределения некоторых настроек «PHP-FPM» взамен указанных в «/etc/php5/fpm/php.ini». Открыть его можно командой | ||
| Строка 383: | Строка 390: | ||
| post_max_size=513M</code> | post_max_size=513M</code> | ||
| и поменять значения на требуемые. | и поменять значения на требуемые. | ||
| - | ==== Базовые ограничения доступа ==== | + | ==== Базовые ограничения ==== |
| - | Далее идет запрет доступа к определенным каталогам, подкаталогам и файлам сайта (или «CMS», на основе которых он построен). Опишем это в конфигурационном файле «/etc/nginx/common/locations/deny» | + | Выше была написана строчка для подключение файла «/etc/nginx/common/deny» |
| - | <code>sudo touch /etc/nginx/common/locations/deny | + | <code=php>include common/deny;</code> |
| - | sudo nano /etc/nginx/common/locations/deny</code> | + | рассмотрим его содержание. В нём идет запрет доступа к некоторым стандартным файлам. Создадим этот файл |
| - | <code># Ограничение доступа к разным файлам и папкам которые часто используются для хранения важной информации | + | <code=bash>sudo touch /etc/nginx/common/deny |
| - | location ~* "/(engine|inc|data|conf|config|bin|info|install|module|profile|theme)((/.*)?)$" | + | sudo nano /etc/nginx/common/deny</code> |
| - | { | + | с содержанием |
| - | deny all; | + | <code=php># Запрет доступа к .htaccess и .htpasswd файлам |
| - | return 404; | + | |
| - | } | + | |
| - | + | ||
| - | # Запрет доступа к .htaccess и .htpasswd файлам | + | |
| location ~* "/\.(htaccess|htpasswd)$" | location ~* "/\.(htaccess|htpasswd)$" | ||
| { | { | ||
| Строка 403: | Строка 406: | ||
| </code> | </code> | ||
| - | <note important>Следует быть бдительным, неверно указанный шаблон здесь может сильно навредить, возможно лучше не дописывать эти директивы или указать их в конце, так как они имеют высокий приоритет. Например, с приведенным выше шаблоном блокировки, станет невозможна загрузка и скачивание с сервера файлов системы контроля версий «Mercurial», которые содержат папку с именем «data» подпадающую под данный шаблон. Ситуация усугубится если использовать «ownCloud» и «ownCloud Client», который попытается загрузить эти файлы на сервер, но потом их не найдёт, и в конце концов просто удалит их в источнике, что фактически приведет к потере файлов</note> | + | <note important>Следует быть бдительным, неверно указанный шаблоны для запрета доступа (не только здесь но и в примерах выше) могут сильно навредить. Например, клиент ownCloud может начать удалять файлы которые не сможет загрузить на сервер из-за неправильного запрета где-то в конфигурационном файле</note> |
| Следует переписать все файлы «.htaccess» в директивы «Nginx». Найти эти файлы среди файлов сайта можно, например, командой | Следует переписать все файлы «.htaccess» в директивы «Nginx». Найти эти файлы среди файлов сайта можно, например, командой | ||
| - | <code bash>sudo find /var/www/ -name .htaccess</code> | + | <code=bash>sudo find /var/www/ -name .htaccess</code> |
| - | Подключаем этот конфигурационный файл строчкой | + | ==== Вызов PHP-FPM ==== |
| - | <code>include common/locations/deny;</code> | + | |
| - | в файле «/etc/nginx/sites-available/example.com». | + | |
| - | На этом описание директорий завершено | + | В примерах выше использовался файл «/etc/nginx/common/php-fpm» — в нём идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM» |
| - | + | ||
| - | ==== Перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM» ==== | + | |
| - | + | ||
| - | Далее идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM» | + | |
| <note important> | <note important> | ||
| Строка 422: | Строка 419: | ||
| Также, в файле "/etc/php5/fpm/pool.d/www.conf" должно присутствовать ограничение на разширение имени | Также, в файле "/etc/php5/fpm/pool.d/www.conf" должно присутствовать ограничение на разширение имени | ||
| исполняемых скриптов - "security.limit_extensions = .php .php3 .php4 .php5"</note> | исполняемых скриптов - "security.limit_extensions = .php .php3 .php4 .php5"</note> | ||
| - | <note>Очень желательно в шаблоне указать явно где разрешено выполнение скриптов</note> | ||
| - | <note>Важно следить что-бы выполнение скриптов не происходило в папках куда их можно свободно загрузить (например, если папка доступна одновременно FTP и HTTP серверу)</note> | ||
| - | |||
| - | Добавляем в файл «/etc/nginx/sites-available/example.com» строчки, к примеру | ||
| - | <code> | ||
| - | # Направление PHP-скрипта для обработки FastCGI или PHP-FPM серверу | ||
| - | location ~ "^(/index\.php|/info\.php|/(wordpress|owncloud)/.+?\.php)(/.*)?$" | ||
| - | { | ||
| - | # Решение проблемы с уязвимостью (см. http://forum.nginx.org/read.php?2,88845,page=3) | ||
| - | # Не будет работать (ошибка 404) если файлы хранятся на другом сервере | ||
| - | try_files $1 $uri $uri/ $uri/index.php?q=$uri&$args $uri/index.php =404; | ||
| - | </code> | ||
| - | где «$1» -- отсылка к 1-й скобке регулярного выражения в директиве «location …» и т.д. | ||
| - | Создаём файл с описанием настроек перенаправления к «PHP-FPM» | + | Создаём этот файл |
| - | <code>sudo touch /etc/nginx/common/php-fpm | + | <code=bash>sudo touch /etc/nginx/common/php-fpm |
| sudo nano /etc/nginx/common/php-fpm</code> | sudo nano /etc/nginx/common/php-fpm</code> | ||
| - | И в него добавляем строчки | + | с содержанием |
| - | <code> | + | <code=php> |
| # Настройки порта или сокета PHP-FPM производятся в файле "/etc/php5/fpm/pool.d/www.conf" | # Настройки порта или сокета PHP-FPM производятся в файле "/etc/php5/fpm/pool.d/www.conf" | ||
| fastcgi_pass php-fpm; | fastcgi_pass php-fpm; | ||
| Строка 452: | Строка 436: | ||
| set $path_info $fastcgi_path_info; | set $path_info $fastcgi_path_info; | ||
| fastcgi_param PATH_INFO $path_info; | fastcgi_param PATH_INFO $path_info; | ||
| - | # Указание дополнительных переменных окружения PHP | + | # Additional variables |
| - | fastcgi_param SERVER_ADMIN admin@example.com; | + | fastcgi_param SERVER_ADMIN email@example.com; |
| fastcgi_param SERVER_SIGNATURE nginx/$nginx_version; | fastcgi_param SERVER_SIGNATURE nginx/$nginx_version; | ||
| fastcgi_index index.php; | fastcgi_index index.php; | ||
| </code> | </code> | ||
| - | |||
| - | Сохраняем и закрываем файл, подключаем его строчкой | ||
| - | <code> include common/php-fpm;</code> | ||
| - | в файле «/etc/nginx/sites-available/example.com». | ||
| - | Закрываем фигурные скобки директивы «location» | ||
| - | <code> | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | ==== Доступ к Nagios через Nginx ==== | ||
| - | Если на сервере используется система мониторинга «Nagios», то обеспечение работы её веб-интерфейса тоже можно возложить на «Nginx», точнее на связку «Nginx+PHP-FPM/FastCGIWrap». Установим дополнительное ПО «FastCGIWrap» | ||
| - | <code bash>sudo apt-get install fcgiwrap</code> | ||
| - | это позволит открывать «*.cgi» файлы. | ||
| - | |||
| - | Открываем описанный выше файл со списком серверов выгрузки данных (upstream) | ||
| - | <code bash>sudo nano /etc/nginx/common/upstream</code> | ||
| - | и добавим в него строчки | ||
| - | <code> | ||
| - | upstream fcgiwrap | ||
| - | { | ||
| - | # FastCGIWrap сервер | ||
| - | server unix:/var/run/fcgiwrap.socket; | ||
| - | } | ||
| - | </code> | ||
| - | Создаём файл с параметрами для «FastCGIWrap» | ||
| - | <code>sudo touch /etc/nginx/common/fcgiwrap | ||
| - | sudo nano /etc/nginx/common/fcgiwrap</code> | ||
| - | где укажем | ||
| - | <code> | ||
| - | # Отключаем сжатие для быстродействия | ||
| - | gzip off; | ||
| - | |||
| - | # Стандартные параметры | ||
| - | include fastcgi_params; | ||
| - | |||
| - | # Доп. параметры | ||
| - | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
| - | fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name; | ||
| - | fastcgi_param SERVER_ADMIN admin@example.com; | ||
| - | fastcgi_param SERVER_SIGNATURE nginx/$nginx_version; | ||
| - | |||
| - | # Направление запроса к upstream-серверу | ||
| - | fastcgi_pass fcgiwrap; | ||
| - | </code> | ||
| - | |||
| - | Создаём файл с описанием настроек для «Nagios» | ||
| - | <code bash>sudo touch /etc/nginx/common/locations/nagios</code> | ||
| - | и откроем его для редактирования | ||
| - | <code bash>sudo nano /etc/nginx/common/locations/nagios</code> | ||
| - | И укажем необдимые параметры. | ||
| - | В «Ubuntu» «Nagios» устанавливается в разные папки, «PHP»-файлы веб-интерфейса обычно находятся в «/usr/share/nagios3/htdocs/» | ||
| - | <code> | ||
| - | location "/nagios/" | ||
| - | { | ||
| - | index index.php index.html; | ||
| - | try_files $uri $uri/ /nagios/index.php; | ||
| - | alias "/usr/share/nagios3/htdocs/"; | ||
| - | } | ||
| - | </code> | ||
| - | «CSS»-файлы для веб-инрфейса находятся в «/etc/nagios3/stylesheets/» | ||
| - | <code> | ||
| - | location ^~ "/nagios/stylesheets/" | ||
| - | { | ||
| - | alias "/etc/nagios3/stylesheets/"; | ||
| - | } | ||
| - | location ^~ "/nagios3/stylesheets/" | ||
| - | { | ||
| - | alias "/etc/nagios3/stylesheets/"; | ||
| - | } | ||
| - | </code> | ||
| - | Картинки тоже прийдется описать отдельно | ||
| - | <code> | ||
| - | location ^~ "/nagios/images/" | ||
| - | { | ||
| - | alias "/usr/share/nagios3/htdocs/images/"; | ||
| - | } | ||
| - | location ^~ "/nagios3/images/" | ||
| - | { | ||
| - | alias "/usr/share/nagios3/htdocs/images/"; | ||
| - | } | ||
| - | </code> | ||
| - | «JS»-скрипты | ||
| - | <code> | ||
| - | location ^~ "/nagios/js/" | ||
| - | { | ||
| - | alias "/usr/share/nagios3/htdocs/js/"; | ||
| - | } | ||
| - | location ^~ "/nagios3/js/" | ||
| - | { | ||
| - | alias "/usr/share/nagios3/htdocs/js/"; | ||
| - | } | ||
| - | </code> | ||
| - | Перенаправление «PHP»-скриптов уже было описано выше, но тут требуется сделать дополнительные настройки, опишем все заново | ||
| - | <code> | ||
| - | location ~ "^/nagios/(.+?\.php)(/.*)?$" | ||
| - | { | ||
| - | # Папки nagios в /var/www нет, так что требуется сделать внутренне перенаправление в папку /usr/share/nagios3/htdocs/ | ||
| - | root "/usr/share/nagios3/htdocs/"; | ||
| - | # Проверка существования файла на диске | ||
| - | # $1 - отсылка к первой скобке регулярного выражения в location | ||
| - | # Если ничего не найдено, то открыть /nagios/index.php (можно поменять на =404) | ||
| - | try_files $1 $uri $uri/ /nagios/index.php; | ||
| - | # Собственно перенаправление | ||
| - | rewrite "^/nagios/(.+?\.php)(/.*)?$" /$1$2 break; | ||
| - | # Авторизация | ||
| - | auth_basic "Authorization required to access Nagios"; | ||
| - | auth_basic_user_file htpasswd; | ||
| - | |||
| - | # Перенаправление запросов к PHP-FPM | ||
| - | include common/php-fpm; | ||
| - | } | ||
| - | </code> | ||
| - | Подобным образом описываем перенаправление запросов к «CGI»-сприптам серверу «FastCGIWarp» | ||
| - | <code> | ||
| - | location ~* ^/cgi-bin/nagios3/(.+?\.cgi)$ | ||
| - | { | ||
| - | root "/usr/lib/cgi-bin/nagios3"; | ||
| - | try_files $1 $uri $uri/ =404; | ||
| - | rewrite "^/cgi-bin/nagios3/(.+?\.cgi)$" /$1 break; | ||
| - | |||
| - | auth_basic "Authorization required to access Nagios"; | ||
| - | auth_basic_user_file htpasswd; | ||
| - | |||
| - | # Передаём скрипту параметры аутентификации | ||
| - | fastcgi_param AUTH_USER $remote_user; | ||
| - | fastcgi_param REMOTE_USER $remote_user; | ||
| - | |||
| - | include common/fcgiwrap; | ||
| - | } | ||
| - | </code> | ||
| - | Сохраняем и закрываем файл. | ||
| - | |||
| - | А в файле «/etc/nginx/sites-available/example.com» дописываем | ||
| - | <code> | ||
| - | # Nagios | ||
| - | include common/locations/nagios; | ||
| - | </code> | ||
| - | |||
| - | Выше были описаны параметры аутентификации для доступа к «Nagios», однако сам файл с пользователем и хеш-суммой от пароля хранится в неизвестном для «Nginx» файле «/etc/nagios3/htpasswd.users». Просто перенесём эти настройки в известный для «Nginx» файл «/etc/nginx/htpasswd», например, командой выполненной от корневого пользователя «root» | ||
| - | <code bash> | ||
| - | cat /etc/nagios3/htpasswd.users >> /etc/nginx/htpasswd | ||
| - | </code> | ||
| - | хотя, конечно, лучше это сделать вручную. | ||
| ==== Кеширование ==== | ==== Кеширование ==== | ||
| + | Выше, в примерах, был упомянут файл «/etc/nginx/common/cache» | ||
| - | Сайт работает значительно лучше когда часть контента сохранена на стороне клиента с прошлого посещения сайта. Не все файлы можно кешировать. Поэтому описание кеширования производится в самом конце (т.е. эти настройки будут иметь наименьший приоритет и есть шанс что это не повлияет на правильную работу сайта). Создаём файл с параметрами для кеширования | + | Сайт работает значительно лучше когда часть контента сохранена на стороне клиента с прошлого посещения сайта. Не все файлы можно кешировать. Поэтому описание кеширования производится в самом конце (т.е. эти настройки будут иметь наименьший приоритет и есть шанс что это не повлияет на правильную работу сайта). Создадим файл с параметрами для кеширования |
| - | <code>sudo touch /etc/nginx/common/cache | + | <code=bash>sudo touch /etc/nginx/common/cache |
| sudo nano /etc/nginx/common/cache</code> | sudo nano /etc/nginx/common/cache</code> | ||
| где укажем | где укажем | ||
| - | <code>location ~* ".+\.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|css|swf|js|atom|jpe?g|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" | + | <code=php>location ~* ".+\.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|css|swf|js|atom|jpe?g|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" |
| { | { | ||
| access_log off; | access_log off; | ||
| Строка 614: | Строка 456: | ||
| }</code> | }</code> | ||
| - | и указываем считывать этот файл строчкой в «/etc/nginx/sites-available/example.com» | + | ==== Окончание ==== |
| - | <code> | + | |
| - | include common/cache; | + | |
| - | </code> | + | |
| - | + | ||
| - | ==== Завершение редактирования конфигурации ==== | + | |
| Закрываем фигурные скобки директивы «server» в «/etc/nginx/sites-available/example.com» | Закрываем фигурные скобки директивы «server» в «/etc/nginx/sites-available/example.com» | ||
| - | <code> | + | <code=php> |
| } | } | ||
| </code> | </code> | ||
| Строка 634: | Строка 471: | ||
| sudo service php5-fpm restart | sudo service php5-fpm restart | ||
| </code> | </code> | ||
| + | |||
| + | ====== Проверка ====== | ||
| + | |||
| + | Проверить свой сайт можно создав файл «info.php» с содержанием | ||
| + | <code=php><?php | ||
| + | phpinfo(); | ||
| + | ?> | ||
| + | </code> | ||
| + | затем скопировав его, например, в «/var/www/wordpress/wp-content/uploads/», затем открыв адрес в браузере «http://example.com/wordpress/wp-content/uploads/info.php», если он выполнится вместо того чтобы просто сохранится — то что-то настроено неправильно, в этой директории php файлы выполняться не должны ни в коем случае (она доступна для загрузки) | ||
| + | |||
| + | Проверить свой сайт на скорость и прочее можно тут: | ||
| + | * [[http://www.webpagetest.org/|webpagetest.org]] | ||
| + | * [[https://developers.google.com/speed/pagespeed/insights/|developers.google.com]] | ||
| + | * [[https://www.ssllabs.com/ssltest/|ssllabs.com]] | ||
| ====== Ссылки ====== | ====== Ссылки ====== | ||