我想建立一个 WordPress 博客,但不采用典型配置:
这主站点位于 www.example.com截至目前,它只有一个带有图像的静态 index.html 文件,我们可能会使用 index.php 来显示一些信息并访问网站的高级部分
这博客,使用 WordPress,在 www.example.com/blog
我在 Nginx 下进行了此项设置,但尽管我能够看到我的静态主页 www.example.com 和我的博客 www.example.com/blog,但我无法访问 WordPress 的管理面板,因此我无法登录或撰写新帖子。
这是 /etc/nginx/sites-enabled/www.example.com 配置文件:
server {
server_name www.example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
server {
listen 80;
server_name example.com;
access_log /var/www/www.example.com/log/access.log;
error_log /var/www/www.example.com/log/error.log info;
index index.php;
location / {
set $php_root /var/www/www.example.com;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location /blog {
set $php_root /var/www/www.example.com;
try_files $uri $uri/ /blog/index.php?q=$uri&$args;
}
## Images and static content is treated differently
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|\
rtf|js)$ {
access_log off;
expires 30d;
root /var/www/www.example.com;
}
location ~* \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort on;
fastcgi_read_timeout 180;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
}
upstream backend {
server 127.0.0.1:9000;
}
我必须做什么才能访问管理面板?我猜这与 php 位置有关,但现在确定要触摸什么 :(
答案1
对于任何 PHP 来说,这根本行不通。你在一个位置设置一个变量,然后在另一个位置使用它,这在 Nginx 中行不通。范围仅向下继承,而不是向上或横向继承,因此 http -> 服务器 -> 位置,而不是位置 -> 位置。
除此之外,实际上没有必要使用自定义变量来表示 PHP 根目录,您只需使用常规根指令(在服务器上下文中)指定您的根目录,然后使用内置变量 $document_root 作为您的 SCRIPT_FILENAME fastcgi 参数。
答案2
要修复此配置,请root
在块中设置一个指令server
:
root /var/www/www.example.com;
$document_root
然后在你的中使用fastcgi_param
:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
set $php_root
可以删除这些调用。正如@MartinFjordvald 指出的那样,它们无论如何都不会做任何事情。