2013-03-04 5 views
15

nginx теперь поддерживает прокси-серверы, но мне не удалось найти информацию о том, как это сделать без отдельного местоположения, который применяется к URI, на которых используются веб-интерфейсы.nginx back proxy websockets

Я видел некоторых людей, рекомендуя некоторые вариации этого подхода:

location/{ 
    proxy_http_version 1.1; 

    proxy_set_header Upgrade  $http_upgrade; 
    proxy_set_header Connection "upgrade"; 

    proxy_pass http://host:port; 
} 

это будет правильный путь к прокси стандартного HTTP, а также WebSockets? Я не хочу, чтобы заголовок Upgrade или Connection был установлен на «upgrade», если это не то, что отправил браузер, но эти строки proxy_set_header необходимы для работы web-камер. Почему nginx просто пересылает исходные заголовки Upgrade/Connection?

Я экспериментировал с этим и обнаружил, что nginx не проксирует заголовок Upgrade и изменяет заголовок Connection на «close» из «upgrade», если работает без двух строк proxy_set_header. С ними Connection является «обновлением» для запросов, отличных от websocket, что также плохо.

Спасибо :)

ответ

12

Почему не Nginx только вперед оригинальные заголовки Upgrade/соединение?

Из official documentation: , так как «Обновление» является заголовком хмеля по-хоп, он не передается от клиента к серверу проксируемого

См RFC 2616.


Я не хочу, заголовок обновления или подключения, установленным на «обновить», если это не то, что браузер послал,

Существует также пример:

map $http_upgrade $connection_upgrade { 
    default upgrade; 
    ''  close; 
} 

server { 
    ... 

    location /chat/ { 
     proxy_pass http://backend; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection $connection_upgrade; 
    } 
} 

Соединение является «обновлением» для запроса не-websocket s, что тоже плохо.

Знаете ли вы, что означает заголовок Connection? Просто цитата из RFC: для каждого токена подключения в этом поле, удалите все поля заголовка из сообщения с тем же именем, что и токен соединения.

Как это может быть плохо?