Nginx的'如果'不能正常工作
问题描述:
我有一些nginx的问题。这里是我的简单的虚拟主机配置,似乎并没有正常工作:Nginx的'如果'不能正常工作
server {
listen 80;
server_name my.site;
access_log /home/my.site/www/my.site/log/access.log;
error_log /home/my.site/www/my.site/log/error.log error;
root /home/my.site/www/my.site/public/;
charset utf-8;
location /search/ {
error_page 418 = @passenger;
recursive_error_pages on;
if ($arg_mode = block) { return 418; }
default_type text/html;
try_files $request_uri @passenger;
}
location/{
try_files $uri @passenger;
}
location @passenger {
root /home/my.site/www/my.site/public/;
passenger_enabled on;
}
}
问题恰恰与位置/搜索/。我希望nginx立即将请求传递给后端,如果uri包含参数'mode'且值为'block'(即uri看起来像http://my.site/search/word?mode=block&type=... (other parameters)
)
但现在它不起作用。如果静态文件/公共/搜索/字存在服务器发送它,即使参数mode =块存在于uri中...什么是我的失误?
答
你的配置很好,Nginx明智,任何请求/ search/with mode = block将被发送到@passenger。
一个简单的测试用例是...
server {
listen 80;
server example.com;
location /search/ {
error_page 418 = @passenger;
recursive_error_pages on;
if ($arg_mode = block) { return 418; }
default_type text/html;
echo "/search/";
}
location @passenger {
echo "@passenger!";
}
}
调用此使用curl ...
# curl -i http://example.com/search/word/?mode=block&a=b$c=d
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 02 Oct 2014 11:35:50 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
@passenger!
因此,如果文件被得到服务,那么这是在@passenger块发生正如@Alexey Ten在他的评论中推断的那样。
你确定它不是乘客发送文件? – 2014-10-02 09:33:47