Ok - eu tenho usado essa regra por um tempo
location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) {
alias /usr/local/image/$1;
error_page 404 /handler.php;
}
onde, se o arquivo de imagem existir, ele será exibido - se o arquivo não existir, uma página de erro 404 customizada chamada /handler.php funcionará para entregar as mercadorias. se a imagem estivesse inalterada, retornaria um 304 - novas imagens retornavam um 200. Quase perfeito.
O problema é que retornar um 404 com a imagem não é a coisa apropriada a fazer - eu deveria aceitar o pedido, determinar se o arquivo existe e se não executar o manipulador e retornar a imagem - e não mostrar um 404.
Eu tentei substituir error_page por try_files, mas não estou obtendo o resultado desejado:
location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) {
alias /usr/local/image/$1;
try_files $uri $uri/ /handler.php;
}
Nada parece coincidir em try_files, então todas as solicitações passam para handler.php. Eu entendo que o alias é um padrão de correspondência especial, mas se eu tentar entrar em
try_files "" /handler.php;
O que funciona, mas o "" retorna o tipo de conteúdo incorreto (Content-Type: · application / octet-stream) enquanto handler.php retorna o correto (Content-Type: · image / jpeg)
claro, eu poderia adicionar "default_type image / jpeg;" para forçar o padrão, mas corro o risco de retornar um tipo de conteúdo jpeg quando a imagem real pode ser gif ou png.
Estou executando o debian 6 - nginx-1.0.6-1 ~ dotdeb.2
Alguma idéia de como fazer isso funcionar?