我在域 (example.com) 的根目录中部署了一个 NodeJS 应用程序,过去 7 天内我一直在努力在子目录 (example.com/blog) 中添加博客。尽管我已经设置好了,但我认为 Nginx 配置存在一些问题,因为我无法访问博客文章(博客主页可以访问)。还值得一提的是,如果我在 Wordpress 设置中将永久链接设置为纯文本,我就可以访问这些帖子,但由于 SEO,我不想这样做。
如果我查看错误日志,我可以看到以下内容:
2022/09/02 15:43:43 [error] 86838#86838: *6 "/var/www/html/example.com/blog/advantages-of-social-media-2/index.php" is not found (2: No such file or directory), client: 142.52.23.144, server: www.example.com, request: "GET /blog/advantages-of-social-media-2/ HTTP/1.1", host: "www.example.com", referrer: "https://www.example.com/blog/"
Wordpress 安装位于,/var/www/html/example.com/blog
但我没有在配置中添加/blog
,但我仍然可以访问博客主页。如果我添加它,那么我就无法再访问它了。
我尝试了无数种不同的解决方案,但似乎都不起作用。请有人帮帮我。我快疯了。我甚至在官方 Nginx 社区、Wordpress 社区、Reddit 和其他几个地方发帖,但到目前为止没有任何效果。请帮忙!
以下是不包含 SSL 语句的完整 Nginx 配置:
server {
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
server_name www.example.com;
# NodeJS App
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_cf_connecting_ip;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
# Wordpress Blog
location /blog {
access_log /var/log/nginx/blog_access.log;
error_log /var/log/nginx/blog_error.log;
root /var/www/html/example.com;
index index.php;
# Add a trailing slash if missing
if (!-f $request_filename) {
rewrite [^/]$ $uri/ permanent;
}
# try_files $uri $uri/ /index.php?$args;
# try_files $uri $uri/ /blog/index.php?q=$uri&$args;
try_files $uri $uri/ /blog/index.php?$args;
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
# Change this to your fpm socket
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
}
答案1
DocumentRoot(Apache 术语)。了解这一点。
www.example.com--> /x/x/x/主应用程序文档根目录 www.example.com/blog/--> y/y/y/y/博客应用程序文档根目录
除此之外,你还需要一步一步地逻辑地追溯这一切(并重新追溯你的步骤!)。什么是www.example.com作为第一个拦截器进行路由。默认情况下,什么处理此请求?下一步需要做什么?它如何引导流量等。
在 Apache 领域,大多数情况下,如果您知道 .htaccess 文件的位置以及如何配置它,那么您就可以实现此结果。保持技术分离,同时出于 SEO 目的,让所有内容都在单个域下运行。
正如所有事物一样,这一切都取决于您的设置。
最终,您似乎想要“某处”某种形式的逻辑,它说;
如果(URI 以 '/blog/' 开头)则发送到服务器XRunningWordPressAsAReverseProxy
希望这能给你一个指引,帮助你追踪这个问题,找出你需要配置什么以及在哪里配置。