Nginx Transfere PHP em vez de renderizar

4

Estou tentando mover um site do Wordpress para o Nginx do Apache. Quando eu vou para o site principal, ele renderiza como esperado. Quando clico em uma postagem, ele tenta baixar index.php em vez de processá-lo / renderizá-lo.

Eu configurei o nginx de acordo com o link

Meu 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/*;
}

e meu arquivo li394-200.members.linode.com em 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;
    }
}

Se eu navegar para o link , ele renderiza como esperado. Além disso, o link está correto. Mas se eu for para link diz 'Você escolheu abrir ... application / octet-stream.' Quando eu digo OK e baixo, é index.php do meu diretório wordpress.

Minha estrutura de permalink é /archives/%year%/%monthnum%/%day%/%postname%/ . Se eu alterar o permalink para Plain, posso navegar para o link corretamente.

Eu segui o conselho no link e adicionei

try_files $uri $uri/ /index.php?args;

para o bloco de localização. Quando eu reiniciar o nginx, recebo

[emerg] try_files directive is duplicate in /etc/nginx/snippets/fastcgi-php.conf:5

Eu nem vejo onde estou incluindo esse arquivo. Mas esse arquivo parece

# 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;

então $fastcgi_script_name deve conter a mesma coisa, mas eu não sei como ver o que é isso. Eu não vejo nada no meu diretório public_html que se parece com um script fast-cgi (embora eu possa não saber quando o vejo).

Se eu usar meu permalink personalizado ou o padrão, não há .php no URI, então não entendo como essa diretiva de localização está capturando isso.

    
por dkusleika 28.11.2016 / 04:05

1 resposta

2

Dois pensamentos sobre isso:

  • Você indica default_type application/octet-stream; . Por favor, defina isso para default_type text/plain; ou simplesmente removê-lo, como eu acho que você não quer servir "arquivos de aplicativos multiuso", correto? Mais informações aqui: link
  • Por favor, verifique se o seu socket php-fpm está configurado corretamente. Pode ser / var / run / ... ou nomeado de forma diferente se você tiver um soquete em execução (verifique suas configurações do php-fpm); caso contrário, a maioria das instalações usa a porta de loopback 9000.

EDITAR:

Apenas percebi outro problema com a sua configuração: Você deve alterar "/index.php$args" ou "/index.php?args" para "/index.php?$args".

O motivo é o seguinte: nginx corresponde à sua expressão regular e, em seguida, define a variável "$ args" para o que vier depois da barra. O ponto de interrogação, por sua vez, separa o nome do arquivo dos argumentos.

Então "/index.php$args" terminaria em "/index.phpwhateverargument" enquanto que "/index.php?args" simplesmente permaneceria "/index.php?args". O que você quer, em vez disso, é "/index.php?whateverargument".

    
por 02.12.2016 / 01:39