You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理环境下配置PHP执行失败的问题求助

Docker部署网站Nginx PHP配置问题解决

原本Nginx配置通过proxy_pass转发所有请求到backend_server(127.0.0.1:8000)时网站正常,但添加PHP处理的location块后,无法找到.php文件,调整proxy_pass参数也无效。

问题根源

你的PHP location块同时配置了proxy_pass和fastcgi_pass,这两个指令互斥:proxy_pass用于将请求转发给HTTP后端服务,fastcgi_pass用于直接将PHP请求交给PHP-FPM处理,同时配置会导致Nginx逻辑混乱,无法正确处理请求。

分场景解决方案

场景1:后端服务(8000端口)已处理PHP请求

如果backend_server本身是能处理PHP的HTTP服务(比如运行PHP的Apache容器、内置PHP的Web服务容器),只需将PHP请求转发给后端即可,不需要FastCGI配置:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
    }

    # 专门处理PHP请求的location
    location ~ \.php$ {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

upstream backend_server {
    server 127.0.0.1:8000;
}

注意:proxy_pass后如果加斜杠/会截断请求路径,不加则保留完整URI,需根据后端服务的路由规则调整。

场景2:通过PHP-FPM直接处理本地PHP文件

如果PHP文件存放在Nginx所在容器/服务器本地,需要通过PHP-FPM处理,需删除proxy_pass,并确保配置正确指向文件目录和PHP-FPM:

server {
    listen 80;
    server_name example.com;

    # 指定网站根目录(需包含PHP文件)
    root /var/www/html;
    index index.php index.html;

    location / {
        proxy_pass http://backend_server/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
    }

    # PHP请求处理
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # Docker环境下如果PHP-FPM是独立容器,改用TCP连接(例如php-fpm容器名:9000)
        # fastcgi_pass php-fpm:9000;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;  
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

upstream backend_server {
    server 127.0.0.1:8000;
}

Docker环境额外注意事项

  • Nginx容器需挂载PHP文件所在目录到配置的root路径(如/var/www/html)
  • 若使用独立的PHP-FPM容器,需用TCP连接(fastcgi_pass php-fpm:9000;),确保两个容器在同一Docker网络
  • 若坚持使用Unix套接字,需将PHP-FPM的套接字目录挂载到Nginx容器中,保证Nginx有权限访问

内容的提问来源于stack exchange,提问作者anonimason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:05:07