ПРОЕКТЫ 


  АРХИВ 


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: 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;
             }
 


 




Copyright © Lexa Software, 1996-2009.