Nginx является самым популярным из используемых сейчас веб-серверов. Он отличается широтой функционала (может использоваться как независимый сервер, прокси, балансер) и высокой скоростью работы.
Простейшая конфигурация, достаточная для отдачи статических сайтов — можно применять для заглушек и Landing Page:
server {
listen 80;
root /var/www/example.com:
index index.php index.html;
server name example.com
location / {
try_files $uri $uri/ =404;
}
}
Nginx PHP-FPM настройка связки и отдача скриптов через Nginx
Поскольку Nginx может отдавать только статику для работы ему нужен менеджер процессов — чаще всего это PHP-FPM, хотя сервер может направлять запросы в Apache, UWSGI и т.п. Можно считать, что он работает самостоятельно только в случае с PHP-FPM.
В конфигурационном файле это выглядит так:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
В качестве fastcgi_pass здесь указывается сетевой сокет 127.0.0.1:9000, также возможно указание Unix сокета — fastcgi_pass unix:/var/run/php5-fpm.sock; в случае использования fpm. Использования Unix сокета предпочтительной из соображений безопасности. Также с сокетом скорость работы будет выше.
Последние 2 директивы отвечают за передачу имени скрипта и метода запроса, их использование необходимо для корректной коммуникации fastcgi с бэкендом.
$document_root — обеспечит приведение к корневой директории
$fastcgi_script_name — заменится при запросе на путь к конкретному скрипту
Комбинация директив обеспечит правильный вызов скрипта при обращении по URI
fastcgi_param в Nginx
fastcgi_param можно указывать для всех директив конфигурационного файла
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
location /scripts {
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
}
В этом случае значения унаследуются всеми нижестоящими location-ами. Стоит помнить про один момент — если fastcgi_param переопределить в одном из location — ни одна из одноименных вышестоящих директив учитываться не будет (для location в котором определяется fastcgi_param).
Избежать этого можно используя include, подключая с его помощью заранее созданные конфиги, текущие правила при этом не перезаписываются.
В файле fastcgi_common перечисляются директивы fastcgi_param, затем в основном конфиге файл вызывается в нужной секции.
location ~ \.php$ {
include fastcgi_common;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
}
В такой файл следует помещать все директивы. которые мы хотели бы кастомизировать — значения которых меняют определенные уровнем выше
Конфигурационный файл Nginx для отдачи динамического содержимого
upstream backend {
server example.com;
}
server {
listen 80 default server;
root /var/www/example.com;
index index.php;
server name example.com
location / {
try_files $uri $uri/ =404;
}
location ~\.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $uri =404; #cgi.fix_pathinfo=0 in php.ini
fastcgi_pass backend;
fastcgi_index index.php;
include fastcgi_params;
}
}
В файл добавлен блок upstream backend позволяющий балансировать нагрузку на несколько бэкендов. Это позволяет сохранить приложение в работоспособном состоянии в случае отказа одного из серверов, выполняющих скрипты и отвечающих на запросы пользователя.