nginx try_files redireciona a barra final e 403 Proibido

1

Estou tentando criar um "super cache" combinado - > arquivo - > padrão de módulo com try_files (termo "super cache" retirado do super cache do wordpress, pois é um método similar).

Os arquivos que são aplicáveis para armazenamento em cache estão localizados dentro da pasta "cache".

O arquivo deve ser exibido se existir em um desses locais.

  1. / $ cache $ uri
  2. / $ cache $ uri /
  3. $ uri
  4. $ uri /

1.cache - > 2.file - > 3.pattern

    location / {
        try_files /$cache_dir$uri /$cache_dir$uri/ $uri $uri/ /index.php;
    }

Exemplo com o endereço 'domain.com/css/style588.css'

  1. procure /srv/www/domain.com/public_html/cache /css/style588.css
  2. procure /srv/www/domain.com/public_html/cache /css/style588.css /index.html & .php
  3. procure /srv/www/domain.com/public_html /css/style588.css
  4. procure /srv/www/domain.com/public_html /css/style588.css /index.html & .php
  5. se não encontrado: /srv/www/domain.com/public_html /index.php

Eu tentei fazer isso funcionar com a configuração abaixo. O que estou fazendo errado?

incluiu domain.conf do nginx.conf

server {
    ## index index.html index.php (defined in http block, works)

    server_name domain.com;
    root        /srv/www/domain.com/public_html;

    ## cache directory ##
    set $cache_dir 'cache';

    ## no cache if post ##
    if ($request_method = POST) {
        set $cache_dir 'null dir';
    }

    ## 1.cache -> 2.file -> 3.pattern ##
    location / {
        try_files /$cache_dir$uri /$cache_dir$uri/ $uri $uri/ /index.php;
    }

    ## .php (set cgi.fix_pathinfo=0 in php.ini, especially if php is on another machine) ##
    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Exemplos que eu tentei com a configuração acima

domain.com: (403 proibido)

public_html/index.php não é exibido.

-

domain.com/non_existing_folder: (OK)

public_html/index.php é exibido.

-

domain.com/folder_exists_in_cache /: (OK)

public_html/cache/folder_exists_in_cache/index.html é exibido.

-

domain.com/folder_exists_in_cache: (redirecionamento) (sem barra)

Cabeçalho de redirecionamento 301 permanente. public_html/cache/folder_exists_in_cache/index.html é servido.

mas o URL é exibido como domain.com/cache/folder_exists_in_cache/

-

uri domain.com/cache/existing_empty_folder: (Proibido 403)

public_html/index.php não é exibido.

-

Como faço para evitar 403 proibido (e os redirecionamentos quando não há barra final, mas a pasta existe no cache?)

Já tentei definir permissões em pastas, com o mesmo resultado.

Obrigado pela sua ajuda!

    
por Milou 22.01.2013 / 15:14

1 resposta

1

Isso deve funcionar:

    location ~ \.php$ {
        try_files $uri =404;
        ...
    }
    location = / {
        try_files /nonexistent /index.php?q=$uri&$args;
    }
    location / {
        try_files $cache_dir$uri $cache_dir$uri/index.html $uri $uri/index.html /index.php?q=$uri&$args;
    }
    
por 24.01.2013 / 18:35