2013-04-23 7 views
6

У меня есть простой файл конфигурации, который используется для серверной страницы 503 ошибок во время обслуживания. Соответствующая часть заключается в следующем:Возврат 503 для запроса POST в Nginx

server { 
    listen  80 default; 
    root  /usr/share/nginx/html; 
    server_name example.com; 

    location/{ 
     if (-f $document_root/503.json) { 
      return 503; 
     } 
    } 

    # error 503 redirect to 503.json 
    error_page 503 @maintenance; 
    location @maintenance { 
     rewrite ^(.*)$ /503.json break; 
    } 
} 

Проблема состоит в том Nginx выясняет, что любой запрос решает в статическом файле и любой POST, PUT и DELETE запросы получить 405 (метод не допускается) ответ.

Итак, вопрос: как я могу сообщить Nginx, чтобы он обслуживал мою страницу для любого метода HTTP?

+1

Вы нашли решение? –

ответ

3

Я столкнулся с этим сегодня. Кажется, проблема связана с nginx (как и большинство серверов), не позволяя вам POST статическому файлу.

Решение состоит в том, чтобы зафиксировать 405 ошибок в блоке местоположения @ 503, обслуживая страницу обслуживания. Кроме того, вам придется включить @ recursiveerrorpages @, так как вы первый, намеренно, выбрасывая ошибку в 503, а затем пользователь бросает 405, разместив на вашем статического файла:

recursive_error_pages on; 

if (-f $document_root/system/maintenance.html) { 
    return 503; 
} 

error_page 404 /404.html; 
error_page 500 502 504 /500.html; 
error_page 503 @503; 
location @503 { 

    error_page 405 = /system/maintenance.html; 

    # Serve static assets if found. 
    if (-f $request_filename) { 
    break; 
    } 

    rewrite ^(.*)$ /system/maintenance.html break; 
} 

Источник: https://www.onehub.com/blog/2009/03/06/rails-maintenance-pages-done-right/

+0

код состояния, который был возвращен почтовому запросу в этом случае, по-прежнему будет 405 в этом случае, правильно? –

+0

@MohamedHafez nope, он должен вернуть 503. Он полностью объясняется в связанной исходной статье, но из памяти он перенаправляется на страницу обслуживания, а затем явно бросает 503 – Jay

0

Может попробовать вынудив 405 запросов быть фактической URI:

error_page 405 = $uri; 
+0

Не уверен, что вы имеете в виду. Фактический результат URI в 405. Я хочу 503. – cababunga

+0

Посмотрите это, если оно работает error_page 405 = 503 /50x.html; –

 Смежные вопросы

  • Нет связанных вопросов^_^