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.
- / $ cache $ uri
- / $ cache $ uri /
- $ uri
- $ 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'
- procure /srv/www/domain.com/public_html/cache
/css/style588.css
- procure /srv/www/domain.com/public_html/cache
/css/style588.css
/index.html & .php
- procure /srv/www/domain.com/public_html
/css/style588.css
- procure /srv/www/domain.com/public_html
/css/style588.css
/index.html & .php
- 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!