在代理之前删除可选的结尾斜杠

我想代理一些请求到另一台服务器,并永远不会发送结尾的斜杠。 我已经拿出了正在工作的以下内容,但这真的是最好的方法吗? 这感觉有点像我漫长的一天,虽然也许我已经盯着它太久了…

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

就个人而言,我不喜欢location指令中的复杂正则expression式,因为nginx需要testing每个请求的URI。 通过使用一个或多个rewrite...break语句,可以使用一个可以更简单的scheme。

例如:

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

^~修饰符避免了任何正则expression式位置块的干扰。 请参阅此文档了解更多

捕获是非贪婪的,所以可选的尾部/将被删除。