我们在 nginx 日志中发现了一些奇怪的东西。一些仅来自 bingbot 的请求直接发送到后端,但如果我们从 curl 触发此请求,它们会像往常一样处理。请看配置。
我有两台服务器,一台(server1)如果是前端,它将一些请求代理到server2,一些请求由他自己处理。
请查看服务器 1 配置:
server {
listen 80;# default_server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
server_name myservername.com;
location / {
index index.html;
root /var/www/apps/delta/shared/public;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://cloud;
break;
}
}
location /store/index/ {
index index.html;
root /var/www/apps/delta/shared/public;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://delta;
break;
}
}
}
server2 的配置文件很简单,在上游处理请求,没什么有趣的。
因为它必须使用此配置:nginx 需要处理从“/store/index”开始的请求,例如上游“delta”处的http://myservername.com/store/index/category/898/author/989,他做到了它。但是:对于 bing 请求,他忽略了位置 /store/index 和对上游云(server2)的代理请求
看一下: Server1 日志:
157.55.39.83 - - [04/May/2016:15:33:45 +0300] "GET /store/index/category/67/author/6 HTTP/1.1" 200 12150 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
Server2 日志,一点点自定义日志,xxxx - 我的前端 ip:
x.x.x.x - - [04/May/2016:15:33:45 +0300] "GET /store/index/category/67/author/6 HTTP/1.0" 200 12137 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "myservername.com" 5.045
我们看到的:
- 对 server2 的 nginx 代理请求
- bingbot请求http 1.0版本
- 这是一个代理请求,而不是两个从 bingbot 到 server1 和同时到 server2 的请求。
- 在我从另一台服务器发出相同的请求后: curl -0 -v http://myservername.com/store/index/category/67/author/6一切正常,只有 server1 处理此请求,而 nginx 不代理此到服务器 2。
我完全糊涂了。位置就像我通常需要的用户请求一样工作。并且由于未知原因,并且仅针对 bingbot 请求,它会将它们代理到 server2。请告诉我也许 bingbot 发送了一些标头或配置中有什么问题?非常感谢!