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

Удалите необязательный завершающий слеш перед проксированием

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

location ~ ^/proxy(?<proxy_to_path>.+[^/])/?$ {
    proxy_pass              http://127.0.0.1:8080$proxy_to_path;
}

Лично мне не нравятся сложные регулярные выражения в location директивы, потому что nginx необходимо проверить каждый запрошенный URI. Вы можете использовать более простую схему, используя один или несколько rewrite...break заявления.

Например:

location ^~ /proxy/ {
    rewrite ^/proxy(.+?)/?$ $1 break;
    proxy_pass http://127.0.0.1:8080;
}

В ^~ модификатор избегает любого вмешательства со стороны любых блоков расположения регулярных выражений. Видеть этот документ для большего.

Захват не является жадным, так что дополнительный трейлинг / будет удален.