我正在使用Nginx服务器,并且不知道如何在现有网址中添加/ api前缀。
我有两个Flask公开的端点/ api / deepzoom和/ api / detection。 我还不想更改调用/ 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 Not Found错误。
任何人都可以帮助我弄清楚问题以及如何满足要求。谢谢!
答案 0 :(得分:0)
您问题中的rewrite...permanent
语句格式错误,无法执行您所需的功能。
permanent
导致重定向,响应为301 ^
和/
字符之间有空格$1
的值要在内部将URI传递给上游之前重写URI,可以使用rewrite...last
。有关详细信息,请参见this document。
例如:
rewrite ^(/(detection|deepzoom)(/.*)?)$ /api$1 last;
location ^~ /api/detection { ... }
location ^~ /api/deepzoom { ... }
请注意,如果端点是/api/deepzoom
,则您不希望在/
值上尾随location
。
您可以使用proxy_pass
指令实现类似的行为。有关详细信息,请参见this document。
例如:
location ^~ /deepzoom {
include uwsgi_params;
proxy_pass http://deepzoom/api/deepzoom;
}
请注意,location
和proxy_pass
的值都尾随/
,或者都没有尾随/
。