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

Ubuntu 22.04下Nginx单域名无法解析PHP问题求助

问题排查与修复方案

你的Nginx配置存在几个关键问题,直接导致PHP无法正常解析:

1. FastCGI套接字路径错误

第一个server块中fastcgi_pass的路径缺失根目录符号/:

# 错误写法
fastcgi_pass unix:var/run/php/php8.1-fpm.sock;
# 正确写法
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;

路径错误会让Nginx找不到PHP-FPM的套接字文件,无法转发PHP请求。

2. 正则匹配顺序冲突

第一个server块中的location ~ /是宽泛的正则匹配,会优先拦截所有请求(包括.php文件),导致后续的PHP解析规则完全失效。需改为非正则的location /,Nginx匹配优先级为:精确匹配 > 正则匹配 > 普通前缀匹配,这样不会抢占PHP规则的匹配权。

3. 重复Server块导致配置混乱

你有两个监听80端口且server_name完全相同的server块,这会让Nginx无法确定使用哪套规则处理请求。Certbot生成的HTTP转HTTPS规则应单独作为精简server块,无需重复配置root、日志等内容。

4. PHP匹配规则不严谨

第二个server块中的location ~ \.php未加$结尾,会匹配test.php.txt这类非PHP文件,存在安全风险且可能引发解析异常,应改为location ~ \.php$。

修正后的完整配置

# HTTP 转 HTTPS 跳转(仅保留核心规则)
server {
    listen 80;
    listen [::]:80;
    server_name mydomain.com www.mydomain.com;

    return 301 https://$host$request_uri;
}

# HTTPS 主站点配置
server {
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;
    server_name mydomain.com www.mydomain.com;

    root /var/www/mydomain;
    index index.php index.html index.htm index.nginx-debian.html;

    access_log /var/log/nginx/mydomain_access.log;
    error_log /var/log/nginx/mydomain_error.log;

    client_max_body_size 100M;

    # 处理静态文件和WordPress路由
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 解析规则
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        # 注:snippets/fastcgi-php.conf已包含SCRIPT_FILENAME配置,无需重复编写
    }

    # Certbot 自动生成的SSL配置
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    add_header Strict-Transport-Security "max-age=31536000" always;
    ssl_trusted_certificate /etc/letsencrypt/live/mydomain.com/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
}

验证与重启步骤

  1. 检查Nginx配置语法:
sudo nginx -t
  1. 重载Nginx配置:
sudo systemctl reload nginx
  1. 确认PHP-FPM服务状态:
sudo systemctl status php8.1-fpm

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:41:55