Nginx
Материал из lulzette's wiki
Скрыть версию и ось на error pages
server_tokens off;
страшная редиректовая ебола
rewrite
Синтаксис: rewrite regex замена [флаг];
Умолчание: —
Контекст: server, location, if
Если указанное регулярное выражение соответствует URI запроса, URI изменяется в соответствии со строкой замены. Директивы rewrite выполняются последовательно, в порядке их следования в конфигурационном файле. С помощью флагов можно прекратить дальнейшую обработку директив. Если строка замены начинается с “http://”, “https://” или “$scheme”, то обработка завершается и клиенту возвращается перенаправление.
Необязательный параметр флаг может быть одним из:
last
завершает обработку текущего набора директив модуля ngx_http_rewrite_module, после чего ищется новый location, соответствующий изменённому URI;
break
завершает обработку текущего набора директив модуля ngx_http_rewrite_module аналогично директиве break;
redirect
возвращает временное перенаправление с кодом 302; используется, если заменяющая строка не начинается с “http://”, “https://” или “$scheme”;
permanent
возвращает постоянное перенаправление с кодом 301.
Полный URL перенаправлений формируется согласно схеме запроса ($scheme) и директив server_name_in_redirect и port_in_redirect.
Пример:
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}
Если же эти директивы поместить в location “/download/”, то нужно заменить флаг last на break, иначе nginx сделает 10 циклов и вернёт ошибку 500:
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
Если в строке замены указаны новые аргументы запроса, то предыдущие аргументы запроса добавляются после них. Если такое поведение нежелательно, можно отказаться от этого добавления, указав в конце строки замены знак вопроса, например:
rewrite ^/users/(.*)$ /show?user=$1? last;
Если в регулярном выражении встречаются символы “}” или “;”, то всё выражение следует заключить в одинарные или двойные кавычки.
root/alias
location
try_files
Модуль ngx_http_core_module
Директиву try_files удобно использовать в случае, если необходимо проверить несколько папок перед отдачей файла:
server {
...
root /var/www;
try_files $uri /var/storage$uri;
...
}
- Проверим наличие файла в папках /var/www и /var/storage
Для PHP часто необходимо все запросы отправлять на index.php, если не существует файла:
server {
...
root /var/www;
try_files $uri /index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- проверим наличие файла и запустим index.php, если такого файла не существует