Techyou labs
真正的爱应该超越生命的长度、心灵的宽度、 灵魂的深度
常用标签

网上大多流传的是

location / {
 client_max_body_size    100m;
 client_body_buffer_size 128k;
 proxy_send_timeout   300;
 proxy_read_timeout   300;
 proxy_buffer_size    4k;
 proxy_buffers     16 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;
 proxy_connect_timeout 30s;
 proxy_pass http://127.0.0.1:81/;
 proxy_set_header   Host   $host;
 proxy_set_header   X-Real-IP  $remote_addr;
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }

这样做没任何意义,所有的请求全部转发到后端去了。我们只需要Apache来处理PHP部分,所以,正确的配置应该是

location ~ .*\.(php|php5)?$ {
 client_max_body_size    100m;
 client_body_buffer_size 128k;
 proxy_send_timeout   300;
 proxy_read_timeout   300;
 proxy_buffer_size    4k;
 proxy_buffers     16 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;
 proxy_connect_timeout 30s;
 proxy_pass http://$host:81/;
 proxy_set_header   Host   $host;
 proxy_set_header   X-Real-IP  $remote_addr;
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }

如果是这样将变量作为反向代理的地址的话会在Nginx0.6.18以后的版本中都会提示“ no resolver defined to resolve ”的类似错误,而在proxy_pass 中直接设置地址却不会。

原因是Nginx0.6.18以后的版本中启用了一个resolver指令,在使用变量来构造某个server地址的时候一定要用resolver指令来制定DNS服务器的地址,所以解决这个问题的方法很简单:

在nginx的配置文件中的http{}部分添加一行resolver 8.8.8.8;即可.

上面这种方法有一个缺陷,因为使用了resolver,所以效率要低下些。采用第一种方法中类似的 proxy_pass http://127.0.0.1:81/;也有一个问题,因为使用了 proxy_set_header Host $host;这个指令,故如果进行外部代理,可能无法取得正确内容。此事需要使用 proxy_set_header Host $proxy_host;指令来代替原有 proxy_set_header Host $host;

暂无评论

添加新评论