nginx如何代理传递除一个目录之外的所有请求?

nginx如何代理传递除一个目录之外的所有请求?,nginx,nginx-reverse-proxy,nginx-config,Nginx,Nginx Reverse Proxy,Nginx Config,我试图做的是,所有传入的请求都将由我的Angular应用程序处理。但有一个目录用于必须排除的RESTAPI 我当前的nginx配置锁定如下: location /rest { try_files $uri $uri/ /rest/index.php$is_args$args; } location ~ / { proxy_pass http://127.0.0.1:4000; } 上述配置总是以http://127.0.0.1:4000。RESTAPI本身似乎可以工作,因为当

我试图做的是,所有传入的请求都将由我的Angular应用程序处理。但有一个目录用于必须排除的RESTAPI

我当前的nginx配置锁定如下:

location /rest {
    try_files $uri $uri/ /rest/index.php$is_args$args;
}

location ~ / {
    proxy_pass http://127.0.0.1:4000;
}
上述配置总是以
http://127.0.0.1:4000
。RESTAPI本身似乎可以工作,因为当我禁用
位置~/
时,会调用REST并返回内容。因此,我想要实现的是:

https://SERVER       -> http://127.0.0.1:4000
https://SERVER/xyz   -> http://127.0.0.1:4000
...
https://SERVER/rest  -> http://127.0.0.1/rest

代理如何转发所有请求,但如果给定了特定目录,则无法转发?

我首先尝试将第一条规则修改为:

location ^~ /rest {...
根据这里的信息:

这应确保在第一个匹配时不会遇到sercond块:

如果最长匹配前缀位置具有^~修饰符,则 Nginx将立即结束搜索,并选择此位置进行搜索 满足要求


location~/
是一个正则表达式位置,它匹配任何内容。也许您想使用
location/
,这是一个默认位置,它只匹配不由其他位置处理的URI。有关详细信息,请参阅。此外,您可能会尝试在上问这个问题,您可能会在那里找到一个更简单的答案…所有对
/rest/…
的请求都使用相同的脚本,
/rest/index.php
?或者可能会有对一些静态内容或其他PHP脚本的请求?这看起来真的很有效。谢谢!但是现在index.php文件已下载但未执行。还有什么想法吗?这里的问题是,nginx不做php。我将使用PHP-FPM。因此,我插入了一个PH规则。请看我最后的答案