2013-08-12 3 views
0

Я использую nginx для прокси-приложения my nodejs. В моем приложении я всегда спрашиваю «client_id» из заголовка. Когда я делаю местный тест. Все работает правильно. Но когда я нажимаю на сервер и прокси-сервер Nginx. Затем client_id проиграл. Я вижу, что когда nginx делает прокси-сервер, он удаляет мой пользовательский заголовок «client_id».nodejs получить заголовок запроса от Nginx

То, что я хочу спросить:

  1. есть способ, чтобы убедиться, что Nginx может передать мой client_id в nodejs?
  2. Есть ли способ сделать nginx пройти какие-либо пользовательские заголовки?

ответ

0

по умолчанию, HttpProxyModule nginx имеет proxy_pass_request_headers и, таким образом, передает заголовки запросов клиентов на целевой сервер.

Мое первое предложение - попытаться переименовать свой заголовок в «X-Client-Id», чтобы использовать пространство имен расширений, которое HTTP зарезервировано для нестандартных заголовков, таких как ваши, и посмотреть, будет ли nginx пересылать это. Если нет, ознакомьтесь с директивой proxy_set_header.

Замечание: использование пользовательского заголовка вообще, и, в частности, один, называемый «client_id», является почти верным признаком того, что вы изобретаете колесо или не понимаете отраслевые стандарты использования файлов cookie и сеансов. Если вы действительно не уверены в этом, вам может понадобиться отступить и переосмыслить свою основную проблему.

1

Спасибо @Peter Lyons, я только что нашел причину. Да, nginx передает все заголовки на целевой сервер по умолчанию. Но исключением является, по умолчанию, nginx блокировать все заголовки, имена которых содержат символ подчеркивания «_».

Я не знаю, почему nginx это делает. Но в этом вопросе эта подчеркнутая вещь является причиной того, что я не могу получить свой заголовок «client_id».

Есть 2 способа решить эту проблему:

1, изменить название заголовка, чтобы избежать подчеркивания, в этом вопросе, изменение «client_id» на «ClientId» или «клиент-идентификатор»

2 , в nginx.conf, внутри http part, set underscores_in_headers on ;, например:

http { 
    .... 

    underscores_in_headers on; 

    .... 
}