ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: прокидка запроса вообще без изменения.



On Thu, 23 Nov 2006, Ivan B. Serezhkin wrote:

Igor Sysoev wrote:

http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_set_header http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_pass_header
Сделал  proxy_set_header  Host        $http_host;
Работает с http/1.1 - здорово, спасибо.

однако :
GET http://gaia.serezhkin.com/ HTTP/1.0

Такие запросы распространённые браузеры шлют только при запросе к прокси.
Обычно их не бывает.

получает проброс опять же
GET / HTTP/1.0

Но на этот раз без заголовка Host

попробовал Сделал  proxy_set_header  Host        $host;

Получил заголовок Host: `hostname`

Хотелось бы что бы
" $host, эта переменная равна строке "Host" в заголовке запроса или имени сервера, на который пришёл запрос, если этой строки нет;"
Вот это самое имя сервера, которое даже нигде не указано, бралось из запроса.

Имя сервера - это то, что указано в server_name.

У меня идея заставить нгинкс пробрасывать всё в вообще не изменённом виде на бэкэнд, а некоторые избранные URL+URI обрабатывать самим нгинксом, или кидать на другой бэкэнд. Пытаюсь совместить модперл для себя и mod_php для остальных.

А вообще спасибо.
У меня на носу слэшдот эфект - я его боюсь, а так хотя бы вменяемыми браузерами всё видно и без напряга.

Завтра попробую воплотить идею с вырезанием имени сервера из URL, имеет смысл слать патчи?

Патч прилагается.


Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_request.c
===================================================================
--- src/http/ngx_http_request.c (revision 183)
+++ src/http/ngx_http_request.c (revision 184)
@@ -1385,9 +1385,16 @@
     ngx_http_core_loc_conf_t  *clcf;
     ngx_http_core_srv_conf_t  *cscf;
 
-    host = r->headers_in.host->value.data;
-    len = r->headers_in.host_name_len;
+    host = r->host_start;
 
+    if (host == NULL) {
+        host = r->headers_in.host->value.data;
+        len = r->headers_in.host_name_len;
+
+    } else {
+        len = r->host_end - host;
+    }
+
     if (vn->hash.buckets) {
         cscf = ngx_hash_find(&vn->hash, hash, host, len);
         if (cscf) {
Index: src/http/ngx_http_variables.c
===================================================================
--- src/http/ngx_http_variables.c       (revision 183)
+++ src/http/ngx_http_variables.c       (revision 184)
@@ -667,13 +667,20 @@
 ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,
     uintptr_t data)
 {
-    if (r->headers_in.host) {
-        v->len = r->headers_in.host_name_len;
-        v->data = r->headers_in.host->value.data;
+    if (r->host_start == NULL) {
 
+        if (r->headers_in.host) {
+            v->len = r->headers_in.host_name_len;
+            v->data = r->headers_in.host->value.data;
+
+        } else {
+            v->len = r->server_name.len;
+            v->data = r->server_name.data;
+        }
+
     } else {
-        v->len = r->server_name.len;
-        v->data = r->server_name.data;
+        v->len = r->host_end - r->host_start;
+        v->data = r->host_start;
     }
 
     v->valid = 1;
Index: src/http/ngx_http_parse.c
===================================================================
--- src/http/ngx_http_parse.c   (revision 183)
+++ src/http/ngx_http_parse.c   (revision 184)
@@ -260,7 +260,7 @@
         case sw_schema_slash_slash:
             switch (ch) {
             case '/':
-                r->host_start = p;
+                r->host_start = p + 1;
                 state = sw_host;
                 break;
             default:


 




Copyright © Lexa Software, 1996-2009.