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

Nginx配置:在根目录下同时部署WordPress与Symfony应用

解决方案:Nginx同时配置Symfony与WordPress实例

针对你的需求,现有配置的核心问题在于Symfony路径映射逻辑错误——当你为/pm location设置root /var/www/mysite/pm/public时,Nginx会尝试在/var/www/mysite/pm/public/pm/目录下查找文件,这与实际路径不符。以下是修正后的完整配置,可实现服务器根目录保持/var/www/mysite,同时让Symfony通过/pm访问、WordPress通过/blog访问的需求:

upstream php8.1-fpm {
    server unix:/var/run/php/php8.1-fpm.sock max_fails=0;
}

server {
    listen 80;
    server_name mysite;
    root /var/www/mysite;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    # 禁止访问.ht系列文件
    location ~ /\.ht {
        deny all;
    }

    # 默认根目录返回410(资源不存在)
    location / {
        return 410;
    }

    # 移除URL末尾多余斜杠的全局规则
    if (!-d $request_filename) {
        rewrite ^/(.+)/$ /$1 permanent;
    }

    # Symfony 配置:URL路径/pm映射到实际目录/var/www/mysite/pm/public
    location ^~ /pm {
        alias /var/www/mysite/pm/public;
        index index.php index.html;
        try_files $uri $uri/ @symfony_pm;

        error_log /var/log/nginx/symfony_error.log;
        access_log /var/log/nginx/symfony_access.log;

        # PHP请求处理规则
        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass php8.1-fpm;
        }
    }

    # Symfony路由重写:将非文件请求转发到index.php
    location @symfony_pm {
        rewrite ^/pm/(.*)$ /pm/index.php?$1 last;
    }

    # WordPress配置:URL路径/blog映射到实际目录/var/www/mysite/blog
    location ^~ /blog {
        alias /var/www/mysite/blog;
        index index.php index.html;
        try_files $uri $uri/ /blog/index.php?$args;

        error_log /var/log/nginx/wordpress_error.log;
        access_log /var/log/nginx/wordpress_access.log;

        # PHP请求处理规则
        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass php8.1-fpm;
        }
    }
}

关键调整说明

  1. Symfony路径映射

    • 用alias替代root:因为URL路径/pm与实际目录/var/www/mysite/pm/public名称不匹配,alias会直接将URL路径映射到指定目录,避免Nginx在实际目录下拼接URL路径导致的错误。
    • 修正PHP参数:使用$request_filename确保传递给PHP-FPM的文件路径正确。
    • 重写规则优化:保留查询参数,符合Symfony的路由解析逻辑。
  2. WordPress路径映射

    • 简化try_files规则:直接将非文件请求转发到/blog/index.php并携带查询参数,适配WordPress的伪静态需求。
    • 同样使用alias确保路径映射准确(即使URL与目录名相同,alias也比root更稳妥)。

可选:若需Symfony通过/pm/public访问

如果你确实需要Symfony的访问路径为/pm/public,只需调整Symfony相关配置块:

# Symfony 配置:URL路径/pm/public映射到实际目录/var/www/mysite/pm/public
location ^~ /pm/public {
    alias /var/www/mysite/pm/public;
    index index.php index.html;
    try_files $uri $uri/ @symfony_pm_public;

    error_log /var/log/nginx/symfony_error.log;
    access_log /var/log/nginx/symfony_access.log;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass php8.1-fpm;
    }
}

location @symfony_pm_public {
    rewrite ^/pm/public/(.*)$ /pm/public/index.php?$1 last;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:16:07