Configure nginx para servir um 503 se existir um arquivo

2

Estou tentando configurar o nginx para retornar um 503 se um determinado arquivo existir (provavelmente algo como "upgrade"). Estou tentando usar a diretiva try_files , mas quando ela encontra o arquivo /upgrading.html , ela é exibida em vez de seguir a diretiva. Por que isso?

location / {
    try_files /upgrading.html @keepgoing;
}

location = /upgrading.html {
    return 503;
}

location @keepgoing {
    #do stuff here to do whatever I would normally do...
}

No log quando eu ligo a depuração, vejo o seguinte:

3388    2010/07/01 19:44:21 [debug] 76327#0: *8 test location: "/"
3389    2010/07/01 19:44:21 [debug] 76327#0: *8 using configuration "/"
3390    2010/07/01 19:44:21 [debug] 76327#0: *8 http cl:-1 max:52428800
3391    2010/07/01 19:44:21 [debug] 76327#0: *8 generic phase: 2
3392    2010/07/01 19:44:21 [debug] 76327#0: *8 post rewrite phase: 3
3393    2010/07/01 19:44:21 [debug] 76327#0: *8 generic phase: 4
3394    2010/07/01 19:44:21 [debug] 76327#0: *8 generic phase: 5
3395    2010/07/01 19:44:21 [debug] 76327#0: *8 access phase: 6
3396    2010/07/01 19:44:21 [debug] 76327#0: *8 access phase: 7
3397    2010/07/01 19:44:21 [debug] 76327#0: *8 post access phase: 8
3398    2010/07/01 19:44:21 [debug] 76327#0: *8 try files phase: 9
3399    2010/07/01 19:44:21 [debug] 76327#0: *8 try to use file: "/upgrading.html" "/usr/local/nginx/html/upgrading.html"
3400    2010/07/01 19:44:21 [debug] 76327#0: *8 try file uri: "/upgrading.html"
3401    2010/07/01 19:44:21 [debug] 76327#0: *8 content phase: 10
3402    2010/07/01 19:44:21 [debug] 76327#0: *8 content phase: 11
3403    2010/07/01 19:44:21 [debug] 76327#0: *8 content phase: 12
3404    2010/07/01 19:44:21 [debug] 76327#0: *8 http filename: "/usr/local/nginx/html/upgrading.html"

Parece que não é possível encontrar a diretiva, mas ela está lá, então não tenho certeza do que estou fazendo de errado.

Além disso, de maneira mais geral, essa é uma abordagem aceitável para resolver esse problema? Outras maneiras de fazer isso?

    
por Bialecki 02.07.2010 / 01:56

1 resposta

2

A partir desta página: link

## System Maintenance (Service Unavailable) 
if (-f $document_root/system_maintenance.html ) {
    error_page 503 /system_maintenance.html;
    return 503;
}

A parte importante é o '-f', acredito - testa para ver se o arquivo existe.

    
por 02.07.2010 / 04:42