我试图从memcached服务器获取自定义URL,使用eval模块将其分配给变量并告诉nginx重写请求。 我的配置文件包含在默认nginx.conf的http部分中,并具有以下代码:
map $request_uri $instanceId {
"~/instance1" "instance1"; #"http://127.0.0.1:8088";
"~/instance2" "instance2"; #"http://127.0.0.1:8089";
}
log_format myVariable '{"evaluation_response" : "$proxyUrl", "for instance" : "$instanceId"}';
log_format redirectUrl '{"redirect" : "$proxyUrl/$relative_request_uri?$query_string"}';
server {
listen 8058;
server_name "memcahed.test.com";
location ~(?:\/instance\d)?\/(?<relative_request_uri>(?:\w*\W*)*){
eval_override_content_type text/plain;
eval_escalate on;
eval $proxyUrl {
if ($instanceId = '') {
return 502;
}
set $memcached_key $instanceId;
memcached_pass 127.0.0.1:11211;
}
#access_log /home/Vlad/myAccess.log myVariable;
proxy_pass "$proxyUrl/$relative_request_uri?$query_string";
#access_log /home/Vlad/myAccess.log redirectUrl;
}
}
server {
listen 8088;
listen [::]:8088;
server_name "i1.test.com";
root /var/www/test.com/html;
index index.html index.htm;
location / {
try_files $uri /index.html;
}
}
server {
listen 8089;
listen [::]:8089;
server_name "i2.test.com";
root /var/www/test2.com/html;
index index.html index.htm;
location / {
try_files $uri /index.html;
}
}
服务器是伪造的,用于提供静态文件 - 我没有真正的文件。当我启用日志记录时 - 我看到正确的输出:
{"evaluation_response" : "http://127.0.0.1:8088", "for instance" : "instance1"}
{"redirect" : "http://127.0.0.1:8088/?-"}
{"evaluation_response" : "http://127.0.0.1:8089", "for instance" : "instance2"}
{"redirect" : "http://127.0.0.1:8089/?-"}
但页面从不加载(Chrome消息):
:: IP :: page无效:: IP ::没有发送任何数据。 ERR_EMPTY_RESPONSE
error.log不包含任何有用的信息(输出级别 - 调试),但如果您需要它,我可以为一个请求提供副本。 我的配置有什么问题?