Я хочу создать блог 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, но теперь уверен, что трогать :(
Чтобы исправить эту конфигурацию, установите 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, они все равно ничего не делают.
Это не должно работать ни на одном PHP. Вы устанавливаете переменную в одном месте, а затем используете ее в другом, что не работает в Nginx. Область наследуется только вниз, а не вверх или поперек, поэтому http -> server -> location, никогда не location -> location.
Кроме того, на самом деле нет необходимости использовать пользовательскую переменную для корня PHP, вы должны просто указать свой корень с помощью обычной корневой директивы (в контексте сервера), а затем использовать встроенную переменную $ document_root для вашего параметра SCRIPT_FILENAME fastcgi.