為什麼我無法使用此 Nginx + Ruby On Rails + WordPress 設置訪問 wp-admin?
這是我的單個 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 會幫助你。