Назад | Перейти на главную страницу

Должен ли я использовать rewrite, return или proxy_pass в nginx?

В Документация Apache довольно четко заявляет, что mod_rewrite должно быть только крайней мерой. Для nginx, в разделе "Подводные камни" есть примеры, когда request_uri практически не изменился.


Ситуация такая:


Мой главный вопрос:

Перенаправление (и return) имеет то преимущество, что четко указывает связь между двумя каталогами.


Мой rewrite правила выглядят так:

rewrite ^/B(/.*) /A$1 permanent;

И return правила:

location ~ ^/B(/.*) {
    return 301 /A$1;
}

С участием:

location ~ ^/~(A|D|E|F..)/ {
    proxy_pass https://other.server;
    proxy_redirect default;
}

На самом деле это не имеет значения, execpt, если ваш сервер nginx будет обрабатывать тысячи запросов в секунду, и вы хотите, чтобы каждый запрос не тратил время процессора на соответствие регулярных выражений перезаписи. Теперь я бы сказал, что используйте наиболее понятный способ записи файлов конфигурации, пока вы не достигнете этого предела, тогда, если у вас нет бюджета для масштабирования вашей инфраструктуры, пришло время подумать о том, чтобы обмануть вашу конфигурацию, чтобы она соответствовала вашему трафику. Недостатком возврата является то, что если у вас есть несколько перенаправлений, вы получите одно место, оборачивающее одну директиву возврата. Используя перезаписи, вы можете поместить несколько из них в одно общее место и протестировать первый параметр для более конкретного шаблона.

Обновление: пример множественного перенаправления в общем месте:

location /B {
    rewrite ^/B/foo/(.*)$ /A/newfoo/$1 permanent;
    rewrite ^/B/bar/(.*)$ /A/newbar/$2 permanent;
    rewrite ^/B/(.*)$ /A/$1 permanent;
}