Конфигурация Nginx для чайников
Aug 11, 2016 15:09 · 278 words · 2 minute read
Основная причина некорректной работы web-сервера Nginx (и любых других систем) — бездумный копипаст конфигурационных файлов. Тем более, что подводных камней в настройке Nginx довольно много. Давайте разберемся с некоторыми из них!
Часто описание root-каталога размещают внутри контекста location
, и это вполне допустимо. Но правильнее все же указывать его в секции server
, например так:
server {
server_name example.com;
root /var/www/public/;
location / {
# some configuration
}
location /admin {
# some configuration
}
location /upload {
# some configuration
}
}
Не стоит плодить директивы index
в каждой секции server
, достаточно один раз прописать их в блоке http
:
http {
index index.php index.htm index.html;
server {
server_name www.example.com;
location / {
# some configuration
}
}
server {
server_name example.com;
location / {
# some configuration
}
location /admin {
# some configuration
}
}
}
Многие уже знают, что If = зло. По возможности, старайтесь обходиться без этой директивы, и не вздумайте использовать if
для проверки наличия файлов — для этого есть try_files
. Неправильно:
...
location / {
if (!-f $request_filename) {
break;
}
}
...
Правильно:
...
location / {
try_files $uri $uri/ /index.html;
}
...
Перенаправлять запросы на php тоже надо уметь. Вот так, например, делать не стоит:
server {
server_name example.com
root /var/www/public/;
location / {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/phpcgi.socket;
}
}
Намного лучше написать:
server {
server_name example.com
root /var/www/public/;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/phpcgi.socket;
}
}
Главное — читайте документацию, внимательно проверяйте конфигурационные файлы, используйте nginx -t
. Не повредит также оставлять комментарии — так всегда можно вспомнить зачем в конфиге появился тот или иной параметр.