Nginx и 400 в PHP

Сделал я запрос:

curl -i 'http://site/page'

И попытался я в PHP отправить header 400 с контентом и получил: 

HTTP/1.1 400 Bad Request
Server: nginx/1.4.6 (Ubuntu)
Date: Fri, 28 Aug 2015 12:04:13 GMT
Content-Type: text/html
Content-Length: 583
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.4.6 (Ubuntu)</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->

Т.е. 400-ый хедер nginx переслал мне правильно, но каково было мое удивление не увидеть моего контента.

А значит, скорее всего проблема в Вашем Nginx-конфиге, а именно - в нем присутствует обработка 400-го статуса, например:

server {
   ...
   error_page 400  /index.php;
   ...
}

Если все равно не получилось, то включение настройки proxy_intercept_errors может помочь

p.s. если, Вы попытаетесь найти откуда nginx подставляет:

a padding to disable MSIE and Chrome friendly error page

то найти файл не получится и отключить это нельзя, т.к. все эти строки прописаны в исходниках nginx-a:

0035 static u_char ngx_http_msie_padding[] =
0036 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
0037 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
0038 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
0039 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
0040 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
0041 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
0042 ;

Всем удачки!


28.08.2015 11:27

Комментарии

Добрый день у меня похожая ошибка, но работает reverse proxy nginx совместно с modsecurity, необходимую настройку я его сделал. Но все равно идет блокировка, при этом в отладочном логе не написано на что идет false positive, вставляю часть кода ответов nginx
HTTP/1.1
Content-Type: text/html
Content-Length: 166
Connection: close

--1386ba20-E--
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

--1386ba20-H--
Apache-Handler: IIS
Stopwatch: 1531836614000975 5049896 (- - -)
Stopwatch2: 1531836614000975 5049896; combined=1386309, p1=428, p2=1385550, p3=58, p4=205, p5=67, sr=157, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for nginx (STABLE)/2.9.1 (http://www.modsecurity.org/); OWASP_CRS/3.0.2.
Server: ModSecurity Standalone
Engine-Mode: "ENABLED"
Андрей | 17.07.2018 14:21