Php

為什麼我無法使用此 Nginx + Ruby On Rails + WordPress 設置訪問 wp-admin?

  • May 3, 2013

這是我的單個 Linux VPS 設置:

  • 由 Nginx 後面的 Thin 應用程序伺服器執行的 Rails 應用程序。
  • 由 lighttpd 的 spawn-fcgi 在同一 Nginx 伺服器後面執行的 WordPress 部落格。

這就是我想要的:

兩個應用程序在同一個域下執行。所有以 /blog 或 /wp- 開頭或以 .php 結尾的 URI 都應該轉到 fastcgi 伺服器。其他一切都應該轉到瘦伺服器。

這是我的問題:

我的 Rails 應用程序執行良好。我的 WordPress 部落格的前面工作正常。但是,我無法訪問 WordPress 管理面板(/wp-admin 或 /wp-login.php)。問題一定出在我的 Nginx conf 上。

這是我的 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 管理面板?

提前致謝。

我找到了解決方法。我更改location ~ /(blog|wp-).*location ~ /blog.*並開始/wp-admin/index.php在我的請求中使用。然後我得到了我想要的。我還沒有弄清楚/wp-admin產生與 相同結果的規則/wp-admin/index.php,但我可以沒有它。其他一切都按預期工作。

關於 Wordpress 的 Nginx wiki 文章應該會有所幫助:http ://wiki.nginx.org/Wordpress

你有正確的根和索引,所以我猜這只是 if 檢查很奇怪,try_files 會幫助你。

引用自:https://serverfault.com/questions/211491