Удалите необязательную косую черту в конце перед проксированием

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

location ~ ^/proxy(?<proxy_to_path>.+[^/])/?$ {
    proxy_pass              http://127.0.0.1:8080$proxy_to_path;
}
1
задан 20 June 2017 в 15:48
1 ответ

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

Например:

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

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

Захват не является жадным, поэтому необязательный завершающий / будет удален.

2
ответ дан 3 December 2019 в 20:21

Теги

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