Веб-сервер на основе Nginx и PHP-FPM Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
wiki:nginx-phpfpm [2015/06/01 03:20]
удалил устаревшую информацию
wiki:nginx-phpfpm [2015/06/01 03:52]
синтаксим
Строка 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>​
Строка 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;
Строка 202: Строка 202:
  
 Указание максимального размера запроса -- необходимо если сервер будет использоваться для загрузки больших файлов (например,​ для построения небольшого облачного хранилища на основе «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>​
Строка 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>​
Строка 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/"​
 { {
Строка 305: Строка 305:
  
 Натройки «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)(/​.*)?​$"​
  {  {
Строка 346: Строка 346:
 } }
 </​code>​ </​code>​
-Сохраняем и закрываем этот файл.+Сохраняем и закрываем этот файл. Опять же, он будет подключён автоматически.
  
 ==== Для облачного хранилища на основе 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». Открыть его можно командой
Строка 385: Строка 392:
 ==== Базовые ограничения доступа ==== ==== Базовые ограничения доступа ====
  
-Далее идет запрет доступа к определенным каталогам, ​подкаталогам ​и файлам сайта (или «CMS», ​на основе которых он построен)Опишем это ​в конфигурационном ​файле «/​etc/​nginx/​common/​locations/​deny» +Выше было написана ​строчка для подключение файла ​«/​etc/​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-скриптов внутреннему ​серверу «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>​ +<code=bash>sudo touch /​etc/​nginx/​common/​php-fpm
- # Направление 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+
 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;​
Строка 613: Строка 455:
  expires max;​  expires max;​
  }</​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>​