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

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


Ситуация - это:

  • У нас (отдел в институте) есть основной веб-сервер, который должен быть обновленным скоро (рабочий Debian 6). Для контакта с обновлением я настроил nginx сервер, который проксирует части, которые, как известно, хорошо работали к обновленному серверу и другим к старому серверу.
  • Старый сервер имел много ProxyPass правила (существенный объем его работы проксирует). Я хочу сместить всех их к nginx, с тех пор, как я понимаю, nginx более производительно в проксировании.
  • Большое количество пользователей имеет пользовательские корневые каталоги, вручаемые другим сервером. Для этих пользователей, но тильды и версий нетильды доступны (т.е. http://my.site/muru и http://my.site/~muru был бы проксирован к http://other.server/~muru, но http://other.server/muru не существует).
  • Много папок были проксированы к другой папке на том же сервере. (например, http://my.site/local-club был бы проксирован к http://my.site/~local-club).

Мой основной вопрос:

  • Данный A и B оба проксируемый к C на другом сервере, должны я использовать rewrite или location с return перенаправить запросы на B кому: A, или продолжите проксировать обоих?
  • Данный A и B оба на том же сервере, при этом B проксируется к A, должны я использовать переписать или возвращаются для перенаправления B к A?

Перенаправление (и 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;
}
3
задан 29 October 2016 в 04:32
1 ответ

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

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

location /B {
    rewrite ^/B/foo/(.*)$ /A/newfoo/$1 permanent;
    rewrite ^/B/bar/(.*)$ /A/newbar/$2 permanent;
    rewrite ^/B/(.*)$ /A/$1 permanent;
}
3
ответ дан 3 December 2019 в 06:33

Теги

Похожие вопросы