прокидка запроса вообще без изменения.
Igor Sysoev
is at rambler-co.ru
Thu Nov 23 23:25:53 MSK 2006
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
-------------- next part --------------
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:
More information about the nginx-ru
mailing list