gpt4 book ai didi

nginx - 如何将任何包含点的路径与 nginx 匹配?

转载 作者:行者123 更新时间:2023-12-02 17:41:05 27 4
gpt4 key购买 nike

我正在尝试使用 nginx 配置实现代理

这个想法是有一个 http 服务器托管我的网站(我的 SPA)。并在我的 http 服务器上有一个指向另一个 api 的路由。

这是我的nginw配置文件

client_max_body_size 100M;

server {
listen 80;
server_name localhost;

root /usr/share/nginx/html;
index index.html index.htm;

location ^~ /proxyapi/ {
proxy_read_timeout 180s;
proxy_send_timeout 180s;
proxy_pass http://localhost:5000/;
}

location ~* /static/* {
try_files $uri =404;
expires 1y;
access_log off;
add_header Cache-Control "public";
}

# Any route that doesn't have a file extension (e.g. /devices)
location / {
try_files $uri $uri/ /index.html;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

大部分时间都工作正常

当我打电话http://my-nginx-host/proxyapi/search/login时,它有效...

除非登录名中有

http://my-nginx-host/proxyapi/search/login => 工作正常

http://my-nginx-host/proxyapi/search/log.in => 失败并显示“404 未找到资源”

有什么办法可以让它发挥作用吗?我找不到任何解决方案

最佳答案

匹配 URI 中的任意点可以这样完成:

location ~* \..*$ {
# try_files $uri $uri/ =404;
# ...
}

让我们把正则表达式拆开:

  • ~* 告诉 nginx 进行不区分大小写的正则表达式匹配(~ 区分大小写)
  • \. 匹配文字点符号 .
  • .* 这里的点等于除空格之外的任何符号,星号修改前面的符号以“尽可能多地匹配”
  • $ 匹配行尾

如果您想匹配“格式错误”的 uri,例如 log.in

,您可以使用此正则表达式

编辑:在您的情况下,您必须将此正则表达式放在您的之后location ~*/static/* 因此它不会匹配带点的 uri,如 /static/image.png。请参阅注释以获取解释。


注释

请记住,此位置 block 将匹配传递的 URI 中的任意位置的任何点。因此它也会匹配 /a.ssets/images//assets/favicon.ico 等 URI。任何非终止位置(没有 ^~= 的位置)即使应该匹配,也不会被使用,如果点正则表达式匹配并且它是第一个匹配的正则表达式位置它优先于其他任何内容。

来自nginx's docs的重要片段关于位置偏好的匹配:

Regular expressions are specified with the preceding “~*” modifier (for case-insensitive matching), or the “~” modifier (for case-sensitive matching). To find location matching a given request, nginx first checks locations defined using the prefix strings (prefix locations). Among them, the location with the longest matching prefix is selected and remembered. Then regular expressions are checked, in the order of their appearance in the configuration file. The search of regular expressions terminates on the first match, and the corresponding configuration is used. If no match with a regular expression is found then the configuration of the prefix location remembered earlier is used.

关于nginx - 如何将任何包含点的路径与 nginx 匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56329864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com