Действия

Nginx

Материал из lulzette's wiki

Версия от 08:07, 18 января 2021; Losted (обсуждение | вклад) (→‎location)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Скрыть версию и ось на error pages

server_tokens off;

страшные редиректы

TODO: переписать, страшного ничего нет, https://rav.pw/nginx-location/ https://www.karashchuk.com/Apache/htaccess_regexp/

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

if

Вот, например, редирект с http на https:

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
}

try_files

 Модуль ngx_http_core_module


Директиву try_files удобно использовать в случае, если необходимо проверить несколько папок перед отдачей файла:

server {
	...
	root /var/www;
	try_files $uri /var/storage$uri;
	...
}
  1. Проверим наличие файла в папках /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;
	}
}
  1. проверим наличие файла и запустим index.php, если такого файла не существует