我使用 Nginx 作为处理 PHP 的 Apache 的反向代理,这是我的 nginx 站点配置:
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 返回的请求未经解析,所以我专门用于处理 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"
答案1
location ~ \.php$ {
proxy_pass http://www.example.com:80;
}
在您的配置中,Nginx 正在监听端口 80。因此将 index.php 文件传递给 Nginx(端口 80)将使其无法解析。因此,假设 Apache 监听端口 81,正确的proxy_pass
指令应该是...
location ~ \.php$ {
proxy_pass http://www.example.com:81;
}
要了解有关 Nginx 如何处理代理请求的更多信息,请查看官方 wikiHttpProxy模块。