Я поместил свое использование приложения Cherrypy 3.1.2 позади Nginx, настроенного как обратный прокси. Все работает правильно для, ПОЛУЧАЮТ запросы, но весь HTTP 400 возврата запросов POST - Уродливый заголовок.
Я проследил в исходный код WSGI-сервера CherryPy для наблюдения обрабатывающего запрос кода и узнал, что, если для ДОБИРАЮТСЯ, запрашивает, чтобы первая строка запроса правильно читала как, например:
GET /home HTTP/1.0
поскольку POST запрашивает, чтобы он был похож:
<HTTP headers truncated at front>
POST /home HTTP/1.0
Таким образом вместо правильно сформированного запроса, содержащего, ПОЛУЧАЮТ/POST строку запроса, сопровождаемую HTTP-заголовками, поскольку POST запрашивает, чтобы мое приложение получило от Nginx:
Кроме того, число байтов усечения от p.1, кажется, зависит от сколько данных POST, там находится на форме, например, чем больше символов я ввожу в / домашние поля FORM, тем удалено больше символов в HTTP-заголовки.
По-видимому, Nginx так или иначе повреждает заголовок, когда он передает его вышестоящему серверу (мое приложение).
НО: когда я только для теста сделал перенаправление Nginx к некоторым внешним веб-сайтам (использующий запросы POST также) - все идет прекрасное.
Таким образом, я теперь довольно застреваю.
Моя конфигурация: Windows XP Профессор, Python/2.5.1, CherryPy/3.1.2, Nginx/0.8.32
Браузеры: FireFox 2.0, IE 7.0
Мое приложение (работающий автономный) обычно работает и протестированное в соответствии со многими конфигурациями.
Я использую довольно основную конфигурацию Nginx как:
upstream backend {
server localhost:8088 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
#proxy_read_timeout 300;
proxy_pass http://backend;
#proxy_redirect default;
}
}
Хотя попробовано много других примеров и конфигураций proxy_pass найдены в сети.
Какие-либо идеи, где искать проблему? Конфигурация Nginx, мое приложение CherryPy или в другом месте?
НОВЫЙ: Я нашел, что это работает правильно, но только для запросов POST, имеющих нулевую длину содержимого тела (сделал пустое без любых полей для тестирования этого).
И проверенный, что количество байтов, усеченных с начала, равно Довольной длине + некоторое маленькое количество константы (вероятно, 2).
вы можете попробовать параметры:
ignore_invalid_headers on;
sendfile on;
в блоке http ... также можете попробовать отключить пакеты поддержки активности и убедиться, что вы регистрируете доступ / ошибки для отладки.