Nginx serve apenas arquivos estáticos excluindo php

0

Esta configuração atual está tão perto de funcionar. O único problema é que ele está servindo meus arquivos php como arquivos estáticos (ao invés de entregá-los para o apache2, rodando na porta 81)

Eu sei que há algo errado com esta linha aqui location ~ .+(?<!\.php) . Eu tenho a sintaxe lookahead negativa errada?

server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com;
    index index.php;

    server_name example.com;

    location ~ .+(?<!\.php) {
        try_files $uri $uri @php;
    }

    location @php {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:81;
        proxy_redirect http://127.0.0.1:81/ /;
        proxy_read_timeout 60s;
    }

    location ~ /\.ht {
        deny all;
    }
}
    
por Isaac 28.02.2017 / 12:05

3 respostas

0

Eu normalmente ...

location / {
            index index.php index.html index.htm;
            try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass_header Set-Cookie;
    fastcgi_pass_header Cookie;
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

    fastcgi_pass your_proxy;
    fastcgi_index index.php;
    include fastcgi.conf;
    add_header X-Proxy-Cache-PHP $upstream_cache_status;
}
    
por 28.02.2017 / 12:29
0

Como você sabe que quer servir todos os arquivos PHP via Apache, considere alterar esta linha:

location ~ .+(?<!\.php) {
    try_files $uri $uri @php;
}

para:

location ~ .+(?<!\.php) {
    try_files @php $uri $uri;
}

Ou, muito mais simples, altere a raiz do seu servidor, para garantir que ele não encontre seus arquivos PHP localmente:

root /dev/null;
Basicamente, seu problema é que o nginx pode de fato encontrar os arquivos que está procurando, então try_files está retornando o PHP bruto. A menos que você deseje especificamente / precise veicular ativos estáticos, basta passar tudo para seu back-end, em vez de procurar uma cópia local do arquivo.

    
por 28.02.2017 / 12:37
0

Aqui está o que eu fiz:

apache2.conf

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_pass http://127.0.0.1:81;
proxy_redirect http://127.0.0.1:81/ /;
proxy_read_timeout 60s;

main.conf

server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com;

    server_name example.com;

    location ~ \.php {
        include apache2.conf;
    }

    location / {
        try_files $uri @php;
    }

    location @php {
        include apache2.conf;
    }

    location ~ /\.ht {
        deny all;
    }
}

Aberto para melhorias, mas acho que essa é a configuração mais concisa que consegui escrever.

    
por 01.03.2017 / 10:51