Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx+exchange
Igor Sysoev пишет:
On Thu, Jul 09, 2009 at 12:20:24PM -0500, Igor Muratov wrote:
Оказывается на клиенте была включена взаимноя авторизация SSL. Отключил
это и вроде что-то пошло. По крайней мере в логах теперь вот это:
2009/07/09 12:08:51 [info] 20467#0: *7 client sent invalid method while
SSL handshaking, client: X.X.X.X, server: nginx.example.org, request:
"RPC_IN_DATA /rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1"
2009/07/09 12:08:51 [info] 20467#0: *8 client sent invalid method while
SSL handshaking, client: X.X.X.X, server: nginx.example.org, request:
"RPC_OUT_DATA /rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1"
Скорее всего ексчейндж не переваривает вот это внешнее имя и его нужно
будет просто поправить средствами rewrite на правильное.
Сегодня попробую и отпишу результат.
Нет, проблема в подчёркиваниях в RPC_OUT_DATA.
Прилагаемый патч разрешает подчёркивания в методе.
Я немного дополнил это патч (см в аттаче). По крайней мере удалось
добиться того, чтобы клиент добрался до ексчейнджа и у него запросили
авторизацию. Однако дальше этого дело не идет.
Вот логи:
X.X.X.X - - [10/Jul/2009:17:07:22 -0500] "RPC_IN_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1" 401 1656 "-" "MSRPC"
X.X.X.X - - [10/Jul/2009:17:07:22 -0500] "RPC_OUT_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1" 499 0 "-" "MSRPC"
X.X.X.X - - [10/Jul/2009:17:07:27 -0500] "RPC_IN_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1" 401 1539 "-" "MSRPC"
X.X.X.X - - [10/Jul/2009:17:07:27 -0500] "RPC_OUT_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1" 401 1539 "-" "MSRPC"
X.X.X.X - - [10/Jul/2009:17:07:27 -0500] "RPC_IN_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1" 401 1539 "-" "MSRPC"
X.X.X.X - - [10/Jul/2009:17:07:27 -0500] "RPC_OUT_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1" 499 0 "-" "MSRPC"
А это error:
2009/07/10 17:07:22 [info] 28559#0: *1 client X.X.X.X closed keepalive
connection (104: Connection reset by peer)
2009/07/10 17:07:22 [info] 28559#0: *3 client closed prematurely
connection, so upstream connection is closed too (104: Connection reset
by peer) while SSL handshaking to upstream, client: X.X.X.X, server:
nginx.example.org, request: "RPC_OUT_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1", upstream:
"https://192.168.1.201:443/rpc/rpcproxy.dll?nginx.example.org:6002",
host: "nginx.example.org"
2009/07/10 17:07:27 [info] 28559#0: *5 client X.X.X.X closed keepalive
connection (104: Connection reset by peer)
2009/07/10 17:07:27 [info] 28559#0: *7 client closed prematurely
connection, so upstream connection is closed too (104: Connection reset
by peer) while reading response header from upstream, client: X.X.X.X,
server: nginx.example.org, request: "RPC_OUT_DATA
/rpc/rpcproxy.dll?nginx.example.org:6002 HTTP/1.1", upstream:
"https://192.168.1.201:443/rpc/rpcproxy.dll?nginx.example.org:6002",
host: "nginx.example.org"
Меня смущает вот что. В логи пишется внешнее имя почтового сервера.
Однако внутри локальной сети ексчейндж известен под другим именем. Ну и
сам он себя осознает под другим именем. Вот это имя и должно
использоваться в URL по которому идет обращение. Я не могу понять, то
что я вижу в логах, это запрос клиента к nginx или запрос от nginx к
апстриму?
По всей видимости потребуется вот такая конструкция c rewrite чтобы
поправить URL?
location = / {
rewrite ^ https://nginx.example.org/exchange permanent;
}
location /rpc {
proxy_pass https://192.168.1.201/rpc;
rewrite ^(.*)nginx.example.org(.*)$ $1internal.name$2;
}
--- src/http/ngx_http_parse.c. 2009-07-11 01:51:05 +0400
+++ src/http/ngx_http_parse.c 2009-07-11 01:52:16 +0400
@@ -143,7 +143,7 @@
break;
}
- if (ch < 'A' || ch > 'Z') {
+ if ((ch < 'A' || ch > 'Z') && ch != '_' ) {
return NGX_HTTP_PARSE_INVALID_METHOD;
}
@@ -257,7 +257,7 @@
break;
}
- if (ch < 'A' || ch > 'Z') {
+ if ((ch < 'A' || ch > 'Z') && ch != '_' ) {
return NGX_HTTP_PARSE_INVALID_METHOD;
}
|