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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
wiki:nginx-phpfpm [2015/06/01 03:39]
[Базовые ограничения доступа]
wiki:nginx-phpfpm [2015/06/01 03:50]
[Кеширование]
Строка 410: Строка 410:
 Следует переписать все файлы «.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» ==== ==== Перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM» ====
-  + 
-Далее идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»+В примерах выше использовался файл «/​etc/​nginx/​common/​php-fpm» — в нём ​идет перенаправление обработки php-скриптов внутреннему серверу «PHP-FPM»
  
 <note important>​ <note important>​
Строка 418: Строка 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>​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;​
Строка 448: Строка 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>​sudo touch /​etc/​nginx/​common/​cache
 sudo nano /​etc/​nginx/​common/​cache</​code>​ sudo nano /​etc/​nginx/​common/​cache</​code>​
Строка 609: Строка 455:
  expires max;​  expires max;​
  }</​code>​  }</​code>​
- 
-и указываем считывать этот файл строчкой в «/​etc/​nginx/​sites-available/​example.com» 
-<​code>​ 
- include common/​cache;​ 
-</​code>​ 
  
 ==== Завершение редактирования конфигурации ==== ==== Завершение редактирования конфигурации ====