Re: Изменить код ошибки на deny all

Ruslan Ermilov ru на nginx.com
Вт Июл 10 10:19:18 UTC 2012


On Tue, Jul 10, 2012 at 03:20:08PM +0600, Nick Knutov wrote:
> На уровене http есть блок allow ip/mask, после чего deny all;
> Это временное решение под ддосом, но при этом хочется, чтобы по факту 
> deny all отдавался не error 403, а 503, чтобы страницы не выпали из 
> яндекса. Как это можно сделать?
> 
> Очевидное
> error_page   403 =503  /error403.html; # на уровне http
> почему-то не помогает:

Видимо для /error403.html действует то же самое deny all, в результате
статус ответа не может быть изменён на 503.  Нужно для /error403.html
либо разрешить доступ, либо воспользоваться вариантом error_page c `='
(см. ниже).

> wget  -S -O - http://***.***/
> --15:12:27--  http://***.***/
>             => `-'
> Resolving ***.***... 88.198.19.82
> Connecting to ***.***|88.198.19.82|:80... connected.
> HTTP request sent, awaiting response...
>    HTTP/1.1 403 Forbidden
>    Server: nginx/1.2.0
>    Date: Tue, 10 Jul 2012 09:12:27 GMT
>    Content-Type: text/html
>    Content-Length: 168
>    Connection: keep-alive
>    Keep-Alive: timeout=20
> 15:12:27 ERROR 403: Forbidden.
> 
> Заодним, кстати, хорошо было бы и Keep-Alive отключить для 503 и вообще 
> сразу закрывать соединение, но смотрю в документацию и не вижу как.

keepalive отключается теми же директивами, что и включается:
http://nginx.org/r/keepalive_disable/ru
http://nginx.org/r/keepalive_requests/ru
http://nginx.org/r/keepalive_timeout/ru

http {
    server {
	keepalive_timeout 75 75;

	allow 127.0.0.1;
	deny all;
	error_page 403 = @403;

	location @403 {
	    keepalive_timeout 0;
	    return 503;
	}
    }
}



Подробная информация о списке рассылки nginx-ru