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; } } }
关键调整说明
Symfony路径映射
- 用
alias替代root:因为URL路径/pm与实际目录/var/www/mysite/pm/public名称不匹配,alias会直接将URL路径映射到指定目录,避免Nginx在实际目录下拼接URL路径导致的错误。 - 修正PHP参数:使用
$request_filename确保传递给PHP-FPM的文件路径正确。 - 重写规则优化:保留查询参数,符合Symfony的路由解析逻辑。
- 用
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
相关产品推荐
相关产品推荐

