Я пытаюсь переместить сайт Wordpress на Nginx с Apache. Когда я перехожу на основной сайт, он отображается как ожидалось. Когда я нажимаю на сообщение, он пытается загрузить index.php
вместо обработки / рендеринга.
Я настраиваю nginx согласно https://www.linode.com/docs/websites/lemp/lemp-server-on-ubuntu-16-04
Мой nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
и мой li394-200.members.linode.com
файл в sites-available
server {
listen 80;
listen [::]:80;
server_name li394-200.members.linode.com;
root /var/www/html/li394-200.members.linode.com/public_html;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php$args =404;
}
location ~ .*\.php$ {
include snippets/fastcgi-php.conf;
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/html/li394-200.members.linode.com/public_html$fastcgi_script_name;
}
}
Если я перейду к http://li394-200.members.linode.com/phptest.php он отображается как ожидалось. Также http://li394-200.members.linode.com/index.php правильно. Но если я пойду в http://li394-200.members.linode.com/archives/2016/11/02/international-keyboard-shortcut-day-2016/ он говорит: «Вы решили открыть ... application / octet-stream». Когда я говорю ОК и загружаю его, это index.php из моего каталога wordpress.
Моя структура постоянных ссылок /archives/%year%/%monthnum%/%day%/%postname%/
. Если я изменю постоянную ссылку на Обычную, я могу перейти к http://li394-200.members.linode.com/?p=11240 правильно.
Я последовал совету в http://nginxlibrary.com/wordpress-permalinks/ и добавил
try_files $uri $uri/ /index.php?args;
в блок локации. Когда я перезапускаю nginx, я получаю
[emerg] try_files directive is duplicate in /etc/nginx/snippets/fastcgi-php.conf:5
Я даже не вижу, куда я включаю этот файл. Но этот файл выглядит как
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
так $fastcgi_script_name
должен содержать то же самое, но я не знаю, как это понять. Я ничего не вижу в своем public_html
каталог, который выглядит как сценарий fast-cgi (хотя я могу не узнать его, когда увижу его).
Независимо от того, использую ли я свою постоянную ссылку или стандартную, нет .php
в URI, поэтому я не понимаю, как эта директива местоположения даже захватывает его.
Две мысли по этому поводу:
default_type application/octet-stream;
. Пожалуйста, установите это на default_type text/plain;
или просто удалите его, так как я думаю, что вы не хотите обслуживать "файлы многоцелевого приложения", правильно? Больше информации здесь: http://www.mime-type.net/application/octet-stream/РЕДАКТИРОВАТЬ:
Только что осознал еще одну проблему с вашей конфигурацией: вы должны изменить "/index.php$args" или "/index.php?args" на "/index.php?$args".
Причина в следующем: nginx соответствует вашему регулярному выражению, а затем устанавливает переменную "$ args" на все, что идет после косой черты. Знак вопроса, в свою очередь, отделяет имя файла от аргументов.
Таким образом, «/index.php$args» окажется в «/index.phpwhateverargument», тогда как «/index.php?args» останется просто «/index.php?args». Вместо этого вам нужно "/index.php?whateverargument".