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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
wiki:nginx-phpfpm [2015/06/01 02:52]
[Сжатие]
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 "/"​
  {  {
Строка 277: Строка 277:
 Соответственно сам сайт должен размещаться в каталоге «/​var/​www/​wordpress/​» Соответственно сам сайт должен размещаться в каталоге «/​var/​www/​wordpress/​»
  
-Некая директория «/​var/​www/​restricted» доступная только авторизованным пользователям сервера. Создадим для неё файл конфигурации «/​etc/​nginx/​common/​locations/​restricted» +Директории можно описывать по одной в этом же файле, но это не удобно и не наглядно. А можно указать строчку 
-<​code>​sudo mkdir /​etc/​nginx/​common/​locations +<​code=php>​ include common/​locations/​*.inc;</​code>​ 
-sudo touch /​etc/​nginx/​common/​locations/​restricted +которая укажет «Nginx», что нужно подключить все файлы в директории «/​etc/​common/​locations/​» которые соответствуют шаблону «*.inc», таким образом,​ если один из файлов нужно будет временно отключить,​ то его можно просто переименовать убрав расширение в имени. Создадим директорию где будут хранится эти файлы 
-sudo nano /​etc/​nginx/​common/​locations/​restricted</​code>​+<​code=bash>​sudo mkdir /​etc/​nginx/​common/​locations</​code>​ 
 + 
 +Некая директория «/​var/​www/​restricted» доступная только авторизованным пользователям сервера. Создадим для неё файл конфигурации «/​etc/​nginx/​common/​locations/​restricted.inc» 
 +<code=bash>sudo touch /​etc/​nginx/​common/​locations/​restricted.inc 
 +sudo nano /​etc/​nginx/​common/​locations/​restricted.inc</​code>​
 со строчками со строчками
-<​code>​+<code=php>
 location ^~ "/​restricted/"​ location ^~ "/​restricted/"​
 { {
- auth_basic "​Access to this forlder ​is restricted";​+ auth_basic "​Access to this folder ​is restricted";​
  auth_basic_user_file htpasswd;​  auth_basic_user_file htpasswd;​
- autoindex on; + autoindex on;​ 
- allow all; + allow all; 
- try_files $uri $uri/ =404;+ try_files $uri $uri/ =404;
 } }
 </​code>​ </​code>​
-Синтаксис «^~» указывает,​ что при совпадении ​регулярные выражения ​ниже проверятся не будут. Это необходимо,​ иначе возможно выполнение PHP-скриптов внутри этой папки без запроса пароля.+Синтаксис «^~» указывает,​ что при совпадении ​здесь директивы «location» ​ниже проверяться не будут.
  
-Этот конфигурационный файл подключим в «/​etc/​nginx/​sites-available/​example.com» +Этот конфигурационный файл подключится автоматически,​ за счёт шаблона (см. ​выше).
-<​code>​ +
- # Restricted +
- include common/​locations/​restricted;​ +
-</​code>​+
  
 ==== Для сайта на основе Wordpress ==== ==== Для сайта на основе Wordpress ====
Строка 304: Строка 304:
 Для более полной информации по настройке «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» +Натройки «Wordpress»,​ который,​ в данном примере,​ находится в папке «/​var/​www/​wordpress» будут описаны в файле «/​etc/​nginx/​common/​locations/​wordpress.inc» 
-<​code>​sudo touch /​etc/​nginx/​common/​locations/​wordpress +<code=bash>sudo touch /​etc/​nginx/​common/​locations/​wordpress.inc 
-sudo nano /​etc/​nginx/​common/​locations/​wordpress</​code>​ +sudo nano /​etc/​nginx/​common/​locations/​wordpress.inc</​code>​ 
-Ограничиваем доступ ​к секретной информации +Указываем виртуальную директорию (используется для удобства и читабельности) в которую будут ​перенаправляться запросы при необходимости 
-<​code>​ +<code=php>​location ​@wordpress
-location ​~* "^/wordpress/​(wp-config.php)((/​.*)?​)$"​+
 { {
- deny all; + rewrite "​^/​wordpress/​(.*)$"​ "/​wordpress/​index.php?​q=$1"​ last
- return 404+}</​code>​ 
-} +Аналогично ​примеру выше предотвращаем ​обработку остальных ​директив «location» 
-</​code>​ +<code=php
-Описываем директорию «example.com/​wordpress» +location ​^~ "/​wordpress/"​
-<​code>​ +
-location "/​wordpress/"​+
 { {
- index index.php;​ + root "/​var/​www";​ 
- try_files $uri $uri/ @wordpress;​ # ​попробовать прочитать файл или папку + index index.php;​ 
- # если не существует, ​то перенаправить ​запрос к WordPress + try_files $uri $uri/ @wordpress;​ #​ проверить существует ​ли файлиначе направить ​в виртуальную директорию 
-+  
-</​code>​ + Ограничение доступа к секретному ​файлу 
-где «@wordpress» -- виртуальный путь, который используется ​для удобства ​и читабельности и описан ниже как + location ~* "^/wordpress/wp-config.php(/​.*)?​$"​
-<​code>​ +
-location @wordpress +
-+
- # Перенаправление  +
- rewrite "​^/​wordpress/​(.*)$"​ "/​wordpress/​index.php?​q=$1"​ last; +
-+
-</​code>​ +
- +
-Подключаем этот конфигурационный файл строчкой +
-<​code>​include common/​locations/​wordpress;</​code>​ +
-в файле «/​etc/​nginx/​sites-available/​example.com». +
- +
-==== Для сайта на основе Dokuwiki ==== +
-Ограничение доступа к базе данных и настройкам «Dokuwiki» (см. [[https://​www.dokuwiki.org/​security#​web_access_security|Web Access Security]]),​ который, к примеру, находится в папке «/​var/​www/​dokuwiki» +
-<​code>​ +
- location ~* "^/dokuwiki/(data|conf|bin|inc)((/.*)?)$"+
  {  {
- deny all; # запретить все для всех + deny all; 
- return 404; # вернуть код ошибки + return 404;
- index /​dokuwiki/​doku.php;​ #​ индексный файл+
  }  }
-</​code>​ + # Ни в коем случае не выполнять файлы php в папках куда их может кто-то загрузить 
-==== Для сайта на основе ​MediaWiki ==== + # Проще ​всего просто заблокировать любые операции ​с такими ​файлами регулярным ​выражением 
-Ограничение доступа к файлам ​«MediaWiki» который,​ к примеру, находится в папке «/​var/​www/​mediawiki» + location ~* "/(uploads|files)/.*\.php.?(/​.*)?​$"​
- location ~* "^/mediawiki/(cache|maintenance|includes|tests|serialized|extensions/​Math/​math|languages)((/.*)?)$"+
  {  {
- deny all; # запретить все для всех + deny all; 
- return 404; # вернуть код ошибки+ return 404;
  }  }
-==== Для сайта ​на основе SMF ==== + # Перенаправление ​php-файлов к серверу ​«PHP-FPM» см. ниже по статье 
-Ограничение ​доступа к файлам «Simple Machines Forum», который, ​к примерунаходится в папке «/​var/​www/​smf» + location ~ "^(/wordpress/.+?\.php)(/​.*)?​$"​
-<​code>​ +
- location ~"^/smf/(cache|Packages|attachments)((/.*)?)$"+
  {  {
- deny all; запретить ​все для всех +Проверяем существование файлов, ​пробуем исправить если нет, иначе выдаём ошибку 
- return 404; # вернуть код ошибки+$1 указывает на первую скобку в регулярном выражении выше - собственно адрес запрошенного php файла 
 + try_files $1 $uri $uri/ $uri/​index.php =404;​ 
 + include common/​php-fpm;​
  }  }
 + # Другие настройки,​ см. ниже по статье
 + include common/​deny;​
 + include common/​cache;​
 +}
 </​code>​ </​code>​
-==== Для сайта на основе phpBB ==== +Сохраняем и закрываем этот ​файл. Опять же, он будет подключён автоматически.
-Ограничение доступа к файлам «phpBB», который, к примеру,​ находится ​в папке «/​var/​www/​phpbb» +
-<​code>​ +
- location ~* "​^/​phpbb/​(images/​avatars/​upload|files|cache|includes|store|config.php|common.php)((/​.*)?​)$"​ +
-+
- deny all; # запретить все для всех +
- return 404; # вернуть код ошибки +
-+
-</​code>​ +
-==== Для сайта на основе Drupal ==== +
-Настройки для сайта на основе «Drupal»который, к примеру, находится в папке «/​var/​www/​drupal» и ограничение ​доступа ​к его файлам +
-<​code>​ +
- location "/​drupal/"​ +
-+
- index /​drupal/​index.php;​ #​ индексный файл +
- try_files $uri $uri/ =404; # проверить есть ли файл из запроса на диске, иначе - вернуть ошибку +
- error_page 404 /​drupal/​index.php; # разрешить PHP сайту самому обрабатывать ошибку +
- }+
  
- location ~* "​^/​drupal/​(.*\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?​|xtmpl)|(\..*|Entries.*|Repository|Root|Tag|Template))((/​.*)?​)$"​ 
- { 
- deny all; # запретить все для всех 
- error_page 404 /​drupal/​index.php;​ #​ разрешить PHP сайту самому обрабатывать ошибку 
- return 404; # вернуть код ошибки 
- } 
-</​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». Открыть его можно командой
Строка 426: Строка 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)$"​
 { {
Строка 444: Строка 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>​
Строка 463: Строка 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;​
Строка 493: Строка 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;​
Строка 654: Строка 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>​