Nginx的反向代理使用try_files是服务的PHP文件unparsed

我使用Nginx作为处理PHP的Apache的反向代理,这里是我的nginx站点configuration:

server { listen 80 default; server_name localhost; access_log /var/log/nginx/localhost.access.log; root /var/www/www.example.com/httpdocs; location ~ \.php$ { proxy_pass http://www.example.com:80; } location ~ /\.ht { deny all; } #location / { try_files $uri @proxy; #} location @proxy { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; proxy_pass http://www.example.com:81; } } 

我的问题是index.php请求正在由nginx unparsed返回,所以我专门处理php文件的位置没有做它应该做的。

如果我请求index.php?q=whatever ,这是一个有效的请求的Apache,然后该网站返回一个500的错误:

 2012/07/13 11:22:27 [alert] 8490#0: *17994 4096 worker_connections are not enough while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php?q=whatever HTTP/1.0", upstream: "http://127.0.0.1:80/index.php?q=whatever", host: "www.example.com" 

  location ~ \.php$ { proxy_pass http://www.example.com:80; } 

在你的configuration中,Nginx正在侦听端口80.所以将index.php文件传递给Nginx(端口80)将使其不被parsing。 所以,假设Apache侦听端口81,正确的proxy_pass指令将是…

  location ~ \.php$ { proxy_pass http://www.example.com:81; } 

要详细了解Nginx如何处理代理请求,请查看HttpProxyModule上的官方wiki。