ПРОЕКТЫ 


  АРХИВ 


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]

Передача HTTPS POST-запросов н а бекэнд


  • To: nginx-ru@xxxxxxxxx
  • Subject: Передача HTTPS POST-запросов н а бекэнд
  • From: "iryndin" <nginx-forum@xxxxxxxx>
  • Date: Fri, 23 Jul 2010 11:28:10 -0400
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To:Date; bh=F46IMOcDq8K/pJKG+eAgnf2bGg35lbtTAVLU0MxCB/k=; b=o6ioaNFrI2EmEYyEtgJNhL6Xo+O9q9sdonL9YpDiQ+U6za91KCCSyvxo7lM5s/VR3n3VehkJoQ5C9Wm/95QDDGTobg0jaOGSSIOYxIBBPmuigXmBlWD+ItvmdqeSaW+/;

Здравствуйте! 

Проблема с передачей POST-запроса,
принятого по HTTPS, на проксируемый Tomcat.

Схема работы сервера: 
впереди стоит nginx, прослушивающий 80 и 443
порты. 
Позади стоит Tomcat, слушающий 8081 порт.
Томкат настроен только на HTTP. 

Nginx раздает статику, а запросы на
динамику передает на Tomcat.

Есть урлы HTTPS-постбеков, на который
приходят данные от стороннего сервера.

nginx принимает HTTPS, расшифровывает его, и
передает данные уже по HTTP на Томкат.
Томкат передает ответ на nginx по HTTP, тот
их передает клиенту по HTTPS.

Проблема в том, что после обработки
nginx-ом на томкате я получаю какую-то
абракадабру в запросе. 

В чем может быть дело?

Ниже привожу конфиг nginx, часть кода
обработчика томката и логи томката:

nginx.conf:

********************************
server {
    listen       443;
    server_name  localhost;

    ssl                  on;
    ssl_certificate       /usr/local/nginx/company/company.ca.crt;
    ssl_certificate_key  /usr/local/nginx/company/company.ca.key;
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers 
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:!LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
        root   html;
        #Apache/Tomcat we have at 8081 port
        proxy_pass http://127.0.0.1:8081/;
        proxy_redirect     off;
        proxy_set_header  Connection  close;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_pass_header Content-Type;
        proxy_pass_header Content-Disposition;
        proxy_pass_header Content-Length;
        proxy_read_timeout 300;
        proxy_temp_path /var/tmp/nginx;
        client_body_temp_path /var/tmp/nginx/proxy_temp;
        expires 5s;
        access_log /var/log/nginx/https.log main;
    }
        
**********************************

Controller.java:

public ModelAndView postback(HttpServletRequest request,
HttpServletResponse response) throws Exception {
    log.info("[Controller.postback]");
    
    // 
    // Show request body for DEBUG purposes
    //
    BufferedReader reader = new BufferedReader(new
InputStreamReader(request.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }
    
    log.info("Request body ++++++++++++++++++++++++");
    log.info(sb.toString());
    log.info("/Request body ++++++++++++++++++++++++");
    
    String action         = request.getParameter("action");
    String customerNumber = request.getParameter("customerNumber");
    String orderNumber    = request.getParameter("orderNumber");
    String orderSumAmount = request.getParameter("orderSumAmount");

    log.info("action="+action);
    log.info("customerNumber="+customerNumber);
    log.info("orderNumber="+orderNumber);
    log.info("orderSumAmount="+orderSumAmount);
    
    .........
}

**********************************

Tomcat log entries:
**********************************
Request body ++++++++++++++++++++++++
invoiceId=12345678&orderSumBankPaycash=1001&paymentType=1&orderNumber=7777&shopId=12103&orderIsPaid=0&shopSumBankPaycash=1001&orderSumAmount=150.00&shopSumAmount=150.00&scid=2827&action=Check&shopSumCurrencyPaycash=643&paymentPayerCode=11111111111111&requestDateTime=2010-07-23T16%3A30%3A06Z&orderSumCurrencyPaycash=643&customerNumber=iryndin&orderCreatedDatetime=2010-07-23T16%3A30%3A06Z&md5=215be52842c0c4d7a93e3a7196ca7209
/Request body ++++++++++++++++++++++++
action=null
customerNumber=null
orderNumber=null
orderSumAmount=null
**********************************

Как видим, в логе выше, если параметры
получаются через request.getParameter(), то они
получаются равными нулю. При этом в
теле POST-запроса все эти параметры
присутствуют. 

А вот ниже более любопытные логи:

Еще одна запись в логе (прием постбеков
от сторонней системы):
***********************************************
Request body ++++++++++++++++++++++++
-----------------------------64243434740Content-Disposition: form-data;
name="requestDatetime";Content-Type:
text/plain;2010-07-23T18:14:49+04:00-----------------------------64243434740Content-Disposition:
form-data; name="md5";Content-Type:
text/plain;91E1495CDBE9D007C061D94AEC7CCBBB-----------------------------64243434740Content-Disposition:
form-data; name="shopId";Content-Type:
text/plain;12103-----------------------------64243434740Content-Disposition:
form-data; name="invoiceId";Content-Type:
text/plain;1099520089681-----------------------------64243434740Content-Disposition:
form-data; name="customerNumber";Content-Type:
text/plain;qaqa-----------------------------64243434740Content-Disposition:
form-data; name="orderCreatedDatetime";Content-Type:
text/plain;2010-07-23T18:14:36+04:00-----------------------------64243434740Content-Disposition:
form-data; name="orderSumAmount";Content-Type:
text/plain;156.21-----------------------------64243434740Content-Disposition:
form-data; name="orderSumCurrencyPaycash";Content-Type:
text/plain;10643-----------------------------64243434740Content-Disposition:
form-data; name="orderSumBankPaycash";Content-Type:
text/plain;1003-----------------------------64243434740Content-Disposition:
form-data; name="shopSumAmount";Content-Type:
text/plain;148.40-----------------------------64243434740Content-Disposition:
form-data; name="shopSumCurrencyPaycash";Content-Type:
text/plain;10643-----------------------------64243434740Content-Disposition:
form-data; name="shopSumBankPaycash";
/Request body ++++++++++++++++++++++++
***********************************************

Тут добавились, видимо,
раскодированные данные формы....
При этом, также как и в предыдущем логе,
параметры, получаемые при помощи
request.getParameter также равны null. 

Как организовать работающую передачу
HTTPS POST-запросов на Tomcat ?

Спасибо!!!

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,112089,112089#msg-112089


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.