Estou tentando fornecer arquivos de cache estático usando o nginx. Existem arquivos index.html no diretório rails_root/public/cache
. Eu tentei a seguinte configuração primeiro, o que não funciona:
root <%= current_path %>/public;
try_files /cache$uri/index.html /cache$uri.html @rails;
Isto dá erro:
[error] 4056#0: *13503414 directory index of "(...)current/public/" is forbidden, request: "GET / HTTP/1.1"
Eu então tentei
root <%= current_path %>/public/cache;
try_files $uri/index.html $uri.html @rails;
E, para minha surpresa, isso funciona. Por que é que eu posso fazer o último não o primeiro (desde que apontam para o mesmo local)
Permissões do sistema de arquivos
As permissões das pastas são:
775 public
755 cache
644 index.html
O Rails fica no diretório ~
do usuário, portanto as pastas e os arquivos pertencem ao usuário good
. O usuário de nginx é root
para mestre e http
para cada processador de trabalho:
89:http 7865 0.1 0.0 8876 2624 ? S Jul10 0:51 nginx: worker process
112:root 24927 0.0 0.0 8532 1828 ? Ss Jun28 0:03 nginx: master process /usr/sbin/nginx -c /etc/nginx/conf/nginx.conf
Meu favicon está em público / é exibido corretamente pelo seguinte:
# asset server
server {
listen 80;
server_name assets.<%= server_name %>;
expires max;
add_header Cache-Control public;
charset utf-8;
root <%= current_path %>/public;
}
LOG
Para minha configuração de trabalho: o log de acesso mostra:
request:"GET / HTTP/1.1" 200 uri:"/index.html"
request:"GET /assets/gas/468x15_4.gif HTTP/1.1" 200 uri:"/assets/gas/468x15_4.gif"
Se eu adicionar index nonexistent
, o mesmo erro do índice de diretório proibido apareceria com o seguinte log de acesso:
request:"GET / HTTP/1.1" 403 uri:"/"
log de erros:
directory index of "RAILS_ROOT/current/public/cache/gas/" is forbidden, client: _IP_, server: example.com, request: "GET / HTTP/1.1", host: "gas.example.com"
UPDATE
Por favor, veja o arquivo de configuração completo . Note que está completo e o exemplo dado acima é um pouco simplificado.
Estou usando o Nginx 1.22