我有如下配置,但我收到 500 错误。这个错误可能在哪里?
upstream masterservers {server 192.168.1.1:8000;}
upstream slaveservers {server 192.168.1.2:8001;}
map $request_uri $redirect_to {
"target=master" masterservers;
"target=slave" slaveservers;
}
server {
listen 80;
server_name 192.168.1.10;
location / {
proxy_pass http://$redirect_to;
}
}
当我如下调用 URL 时,出现以下错误。
http://192.168.1.10/app/index.html?target=master
http://192.168.1.10/app/index.html?target=slave
Nginx 日志:*2 invalid URL prefix in "http://", client: 192.168.1.11, server: 192.168.1.10, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.10", referrer: "http://192.168.1.10/app/index.html?target=master"
您正在将您的
$request_uri
(等于/app/index.html?target=master
您的示例中的 to)target=master
与target=slave
字符串进行比较。没有匹配,因此$redirect_to
变量变为空字符串。如果要检查是否$request_uri
包含 atarget=master
或target=slave
子字符串,可以在map
块内使用正则表达式模式:或更好地检查
$arg_target
变量值:当请求中没有指定查询参数(或其值无效)时,还可以考虑使用一些
default
值:target
最后一个可以简化为
或进行一些初步检查,例如
更新
如果我正确理解您的附加问题 - 如何从与主 HTML 文件相同的上游加载所有资产 -如果使用两个链式块不存在查询参数,您可以尝试从 HTTP
Referer
标头值获取上游名称(这里是正则表达式真的到位):target
map