localização Nginx reescrita por trás de um proxy não está funcionando

2

Estou criando um servidor da Web nginx simples. Existem alguns arquivos php e algumas páginas estáticas, e eu os separei em pastas diferentes, os arquivos php em / data / webjp e os arquivos html em / data / webjp_static. Aqui está o arquivo de configuração:

server
{
    listen 80;

    location / {
        proxy_pass              http://127.0.0.1:7900/;
        proxy_store             on;
        proxy_set_header        Host $host;
        proxy_redirect          off;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server
{
    listen       7900;

    server_name  127.0.0.1;

    root  /data/webjp/weber;
    index index.html index.php;

    location ~ .*\.(php|php5)?$
    {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include  fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /data/webjp/weber/index.php;
    }

    location ~ /erarticles/ {
        root /data/webjp_static;
    }

    if (-f $request_filename) {
        break;
    }

    location ~* \.html$ {
        expires -1;
    }
}

Parece que o bloco "location ~ / erarticles /" não está funcionando. Quando tentei acessar o link , obtive 404.

Mas se eu colocar o bloco "location ~ / erarticles /" no bloco do servidor proxy, ele funcionará. Por quê?

Depois de ler a resposta de Richard Smith, encontrei uma pista. Na verdade, meu projeto está trabalhando com o framework Yii, e omiti algumas linhas do arquivo de configuração quando postei aqui.

if (!-f $request_filename) {
    rewrite ^/(.+)$ /index.php?url=$1 last;
    break;
}
    
por wershest 08.09.2016 / 08:38

1 resposta

2

O problema não tem nada a ver com o proxy reverso. O bloco de servidores para o 7900 tem vários problemas.

A raiz do documento padrão é definida no diretório PHP, para que o bloco location ~* \.html$ nunca funcione.

Eu não sei o que o if (-f $request_filename) { break; } deve fazer.

E o bloco location ~ .*\.(php|php5)?$ corresponde a URIs como . . Você afirma que tem alguns arquivos .php , mas só retorna index.php .

Já pensou em usar try_files ? Por exemplo (e este é apenas um ponto de partida):

server {
    listen       7900;

    root /data/webjp_static;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php5?$ {
        root  /data/webjp/weber;
        try_files $uri =404;

        fastcgi_pass  127.0.0.1:9000;
        include  fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME $request_filename;
    }

    location ~* \.html$ {
        expires -1;
    }
}

Observe que a diretiva index não encontrará nenhum arquivo index.php à medida que você os mantém em um diretório separado dos arquivos .html .

Leia este documento primeiro.

    
por 08.09.2016 / 10:13

Tags