为什么我无法使用此 Nginx + Ruby On Rails + WordPress 设置访问 wp-admin?

为什么我无法使用此 Nginx + Ruby On Rails + WordPress 设置访问 wp-admin?

以下是我的单个 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 会帮助您。

相关内容