nginx proxy_pass для PUT без заголовка Content-Length возвращает 411

У меня проблемы с nginx proxy_pass и PUT без заголовка Content-Length, возвращающего ошибку 411.

Что я запускаю, чтобы проверить это:

# curl -XPUT http://localhost:8080/
<html>
<head><title>411 Length Required</title></head>
<body bgcolor="white">
<center><h1>411 Length Required</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
# touch temp
# curl -X PUT http://localhost:8080/ -T temp
{"response": "ok"}

Соответствующая конфигурация:

# Proxy to Backend Server
server {
    listen localhost:8080;

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://backend_server;
    }
}

Я нашел этот пост, который, кажется, та же проблема:

http://forum.nginx.org/read.php?2,72279,72279

Есть ли способ получить nginx для запросов PUT прокси без заголовка Content-Length?

Новая версия nginx НЕ страдает от этой ошибки / ограничения?

1 ответ

Обновитесь до nginx >= 1.4.1 (1.3.9 или же 1.4.0 было бы достаточно, но есть проблемы безопасности thx @elhefe - смотрите комментарии) или установите http://wiki.nginx.org/NginxHttpChunkinModule, как упомянуто здесь. Существуют официальные пакеты для семейства Debian и RedHat.

Debian:

  • Wheezy Backports (в настоящее время 1.4.4-1)

    добавить к /etc/apt/sources.list:

    deb http://ftp.debian.org/debian/ wheezy-backports main
    

    запустите и установите версию nginx по вашему выбору (nginx-full, nginx-light, nginx-naxsi)

    apt-get update
    apt-get -t wheezy-backports install nginx-full
    
  • Пакет nginx.org (стабильная версия на данный момент 1.4.4):

    wget http://nginx.org/keys/nginx_signing.key
    apt-key add nginx_signing.key
    

    добавить к /etc/apt/sources.list:

    deb http://nginx.org/packages/debian/ wheezy nginx
    deb-src http://nginx.org/packages/debian/ wheezy nginx
    

    удалить текущие пакеты nginx:

    apt-get remove nginx-full nginx-common
    

    обновить список пакетов:

    apt-get update
    apt-get install nginx
    

    Для Debian-подобного обновления изменения поведения /etc/nginx/nginx.conf

    user  www-data;
    

    и добавить в конце http раздел

    include /etc/nginx/sites-enabled/*;
    
Другие вопросы по тегам