最近发现将nginx跟php放在同一台服务器上压力挺大的。于是就做了个动静分离,把nginx和php分别部署在两台服务器上。
好景不长,发现后台验证码,死活刷不出来,只有一个裂图。
想了想该不会是动静分离的原因吧。登上服务器一看,果然nginx服务器上并没有生成这个图片,图片都存在了php服务器上。
这样想着,有没有什么办法能直接获取到后端呢。想着用proxy_pass代理到后端看看
location ~* /media/captcha/([a-z]*)/(.*)$ { proxy_pass http://proxy.test.com:88/captcha/$1/$2; }
没想到代理后竟然报错502
于是查看日志
2015/10/05 15:17:25 [error] 7589#0: *549967 no resolver defined to resolve proxy.test.com, client: 180.191.103.242, server: www.test.com, request: "GET /captcha/base/299b5dd35f902f3b7502a157071f49bc.png HTTP/1.1", host: " www.test.com"
发现很多这样的日志,google 之,原来是没有定义 reoliver
location ~* /captcha/([a-z]*)/(.*)$ { resolver 8.8.8.8; proxy_pass http://proxy.test.com:88/captcha/$1/$2; }
这样一改就ok了。
由这个问题,还发现了一个其他的问题。也在这里做个记录吧。
当初这个动静分离之前,还想着做个反向代理。因为非80端口,转发。首页打开倒是正常,但是样式全没了,图片也打不开。
server { listen 81; server_name www.test.com; access_log logs/test.access.log; keepalive_timeout 90; client_max_body_size 4m; location / { proxy_redirect off; proxy_set_header Host $host:81; #这个地方要跟listen端口相同,否则很多页面就只是www.test.com:80 而不是81端口了。 #以下两行为获取用户真实IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #一下设置防止php文件获取为502报错 proxy_set_header Connection ""; proxy_connect_timeout 400s; #连接后端服务器超时时间 proxy_read_timeout 400s; #后端服务器响应请求超时时间 proxy_send_timeout 400s; #后端服务器发送数据超时时间 proxy_buffer_size 32k; #代理请求缓存区大小 proxy_buffers 4 64k; #系统繁忙时可申请的proxy_buffers大小 proxy_busy_buffers_size 128k; #系统繁忙时可申请的proxy_buffers大小 proxy_ignore_client_abort on; #不允许客户端关闭连接 proxy_pass http://192.168.0.10:81; 81端口后面,最好也不要再添加/;否则会引发一些想不到的问题 } }
本文出自 “孜孜不倦的学习着...” 博客,请务必保留此出处http://jonyisme.blog.51cto.com/3690784/1700251
原文地址:http://jonyisme.blog.51cto.com/3690784/1700251