我有一个域名,它使用 nginx 网络服务器为我的网站提供服务,该网络服务器使用位置下的选项example.com
指向 nodejs docker 容器 3000 端口。proxy pass
/
server {
listen 80 default_server;
server_name example.com www.example.com;
index index.php index.html;
access_log /var/log/nginx/access_example.com.log;
error_log /var/log/nginx/error_example.com.log;
location / {
proxy_pass http://localhost:3000;
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;
}
}
现在我想添加一个 wordpress 网站,/blog
所以我在服务器块下添加了这些配置。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location /blog {
root /var/www;
try_files $uri $uri/ =404;
}
为什么我无法访问新安装的 wordpress,/var/www/blog/
如果我在我的终端上运行,它是正常的,我可以看到文件curl http://example.com/blog/license.txt
的内容,但没有加载我为测试添加的文件。license.txt
/var/www/blog/
index.php
index.html
我认为问题出在线try_files $uri $uri/ =404;
路上,但我没有找到任何有用的信息。任何帮助都将不胜感激
答案1
您可能已经知道,Wordpress 使用前端控制器架构 - 即运行任何 PHP 脚本的入口点是 $WORDPRESS_ROOT/index.php。您需要告诉 nginx 相应地路由请求:
try_files $uri $uri/ /blog/index.php?$args;
请注意,大多数静态内容的请求将由前两个值之一处理。没有 404 处理程序,因为 Wordpress 需要自己处理这种情况。
但index.php没有加载
嗯,对于发生的事情没有一个非常有意义的描述 - 即您是否明确提到了 ..../index.php 或只是 .../ ?您得到了什么回应?您的日志中有什么?
PHP(以及大多数 fcgi 处理程序)需要相当多的配置,这些配置通常包含在配置的其他地方。在 Ubuntu 上,如果从 repo 安装,我原本以为这些配置已经到位,但建议对其进行测试。我还建议在进行上述前端控制器修改之前解决这个问题,因为这会使事情变得有些复杂。使用一个简单的“hello world”PHP 脚本。