我正在尝试使用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资源”
有什么办法可以使它工作? 我找不到任何解决办法
答案 0 :(得分:1)
使用以下方法可以匹配URI中的任何点:
location ~* \..*$ {
# try_files $uri $uri/ =404;
# ...
}
让我们把正则表达式拆开:
~*
告诉nginx进行不区分大小写的正则表达式匹配(~
区分大小写)\.
匹配文字点符号.
.*
此处的点等于除空格以外的任何符号,星号将前面的符号修改为“尽可能匹配此符号” $
匹配行尾如果您想匹配log.in
之类的“格式错误”的uri,也可以使用此正则表达式
编辑:根据您的情况,您必须将此正则表达式放在之后
location ~* /static/*
,因此它不会与点/static/image.png
之类的uri匹配。请参阅注释以获取解释。
请记住,此位置块将与传递的URI中的任意点匹配。因此,它也将匹配这些/a.ssets/images/
,/assets/favicon.ico
这样的URI。即使它们应该匹配,也不会使用任何非终止位置(没有^~
或=
的位置),如果点正则表达式匹配,并且它是第一个匹配正则表达式位置。它优先于其他任何内容。
nginx's docs中有关位置匹配首选项的重要摘要:
使用前面的“〜*”修饰符(不区分大小写)或“〜”修饰符(区分大小写)指定正则表达式。为了找到与给定请求匹配的位置,nginx首先检查使用前缀字符串定义的位置(前缀位置)。其中,将选择并记住具有最长匹配前缀的位置。然后按照在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一个匹配项上终止,并使用相应的配置。如果未找到与正则表达式匹配的内容,则使用前面记住的前缀位置的配置。