我正在使用我的nginx服务器,我不知道如何添加/api前缀到现有的网址。
我有两个端点/api/deepzoom和/api/detection被Flask公开。我还不想更改前端中调用/deepzoom和/detection的代码。
当使用/deepzoom从前端调用时,如何将url路径重写/重定向到/api/deepzoom
我目前在nginx.conf中的代码片段:
upstream platform {
server platform:5001;
}
upstream models {
server models:4999;
}
upstream deepzoom {
server deepzoom:5999;
}
server {
listen 80 ;
server_name myhost.mydomain.com;
client_max_body_size 0;
client_body_buffer_size 1m;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
send_timeout 10m;
proxy_buffer_size 512k;
proxy_buffers 4 1024k;
proxy_busy_buffers_size 1024k;
proxy_redirect off;
location ^~ /api/detection/ {
include uwsgi_params;
proxy_pass http://models;
}
location ^~ /api/deepzoom/ {
include uwsgi_params;
proxy_pass http://deepzoom;
}
location / {
include uwsgi_params;
proxy_pass http://platform;
}
}
我已经尝试在服务器块中添加行:
rewrite ^ /detection/ http://$server_name/api/detection/$1 permanent;
rewrite ^ /deepzoom/ http://$server_name/api/deepzoom/$1 permanent;
但它不起作用,出现404 NotFound错误。
任何人都可以帮助我弄清楚它和如何满足要求。谢谢!
2条答案
按热度按时间to94eoyn1#
问题中的
rewrite...permanent
语句格式错误,无法执行所需的功能。permanent
导致重定向,并返回301响应^
和/
字符之间有空格$1
的值要在向上游传递URI之前在内部重写URI,可以使用
rewrite...last
。有关详细信息,请参阅此文档。例如:
/api/deepzoom
,则您不希望在location
值上有尾随的/
。*您可以使用
proxy_pass
指令实现类似的行为。有关详细信息,请参阅本文档。例如:
location
和proxy_pass
值都有尾随/
,或者都没有尾随/
。*3zwtqj6y2#
当我在nginx前面运行一个React应用程序时,我发现了这个问题。我希望所有对应用程序的请求都有前缀
/mypref
,因为我的应用程序文件在一个名为/mypref
的子目录中。如果一个url已经以/mypref
开头,我想把url的剩余部分“转发”到index.html,这样react-router就可以处理它了。下面的nginx配置很适合我:我在这里使用了相对重定向,因为我的应用程序位于网关前面,我不希望用户离开网关。