以下是我的单个 Linux VPS 设置:
- 由 Nginx 后面的 Thin 应用程序服务器运行的 Rails 应用程序。
- 位于同一 Nginx 服务器后面的 lighttpd 的 spawn-fcgi 运行的 WordPress 博客。
这是我想要的:
两个应用都运行在同一个域下。所有以 /blog 或 /wp- 开头或以 .php 结尾的 URI 都应转到 fastcgi 服务器。其他所有内容都应转到 Thin 服务器。
这是我的问题:
我的 Rails 应用程序运行良好。我的 WordPress 博客的前端运行良好。但是,我无法访问 WordPress 管理面板 (/wp-admin 或 /wp-login.php)。问题肯定出在我的 Nginx 配置上。
这是我的 Nginx 配置:
upstream myserver {
server unix:/tmp/myserver.0.sock;
server unix:/tmp/myserver.1.sock;
}
server {
server_name myserver;
root /path/to/rails/app/public;
index index.html;
access_log /path/to/rails/app/log/access.log;
error_log /path/to/rails/app/log/error.log;
<snip>
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect false;
if (-f $document_root/cache$request_uri/index.html) {
rewrite (.*) /cache$1/index.html break;
}
if (-f $document_root/cache$request_uri.html) {
rewrite (.*) /cache$1.html break;
}
if (!-f $request_filename) {
proxy_pass http://myserver;
break;
}
}
location ~ /(blog|wp-).* {
root /path/to/wordpress;
index index.php;
access_log /path/to/wordpress/log/access.log;
error_log /path/to/wordpress/log/error.log;
if (!-e $request_filename) {
rewrite ^ /index.php last;
}
}
#
# pass the PHP scripts to FastCGI server
location ~ \.php$ {
root /path/to/wordpress;
index index.php;
access_log /path/to/wordpress/log/access.log;
error_log /path/to/wordpress/log/error.log;
fastcgi_pass unix:/tmp/fcgi.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/wordpress/$fastcgi_script_name;
}
}
当我打开 WordPress 错误日志的调试日志记录时。当我请求 /wp-admin 时,我从未看到匹配项。这让我相信该请求是由规则处理的location /
,该规则旨在用于 Rails 应用程序。当我请求 /wp-admin 时,浏览器会提示我“另存为”名为“下载”的某个文件。
请注意,wp-content 目录下的资产在符合规则时可以正常使用location ~ /(blog|wp-).*
(为什么 /wp-admin 不符合规则?!)
我的问题:
我需要什么规则才能获得我想要的设置并能够访问 WP 管理面板?
提前致谢。
答案1
我找到了一个解决方法。我将 改为location ~ /(blog|wp-).*
,并在请求中location ~ /blog.*
开始使用。然后我得到了我想要的。我仍然没有弄清楚产生与 相同结果的规则,但我可以没有它。其他一切都按预期运行。/wp-admin/index.php
/wp-admin
/wp-admin/index.php
答案2
有关 Wordpress 的 Nginx wiki 文章应该有帮助:http://wiki.nginx.org/Wordpress
您有正确的根和索引,所以我猜只是 if 检查很奇怪,而 try_files 会帮助您。