jetty 在請求URI裡傳入非法字元,jetty會中斷連線,導致nginx認為該節點不健康

來源:互聯網
上載者:User

標籤:


 

jetty 在請求URI裡傳入非法字元(如直接一個16進位位元組A1,非%A1,用抓包TCP工具發送),jetty拋出如下錯誤

8.1.0.RC1、

8.1.18.v20150929、

9.3好的

如果前面代理用nginx的proxy_next_upstream,會認為該節點失效,如果請求刷的厲害,有可能所有節點都被刷成不健康狀態;導致nginx返回給使用者502;

org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! byte Fd in state 0at org.eclipse.jetty.util.Utf8Appendable.appendByte(Utf8Appendable.java:178)at org.eclipse.jetty.util.Utf8Appendable.append(Utf8Appendable.java:117)at org.eclipse.jetty.http.HttpURI.toUtf8String(HttpURI.java:503)at org.eclipse.jetty.http.HttpURI.getPathAndParam(HttpURI.java:687)at org.eclipse.jetty.server.Request.getRequestURI(Request.java:1024)at org.eclipse.jetty.server.Response.sendError(Response.java:364)at org.eclipse.jetty.server.Response.sendError(Response.java:419)at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:603)at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:231)at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)at java.lang.Thread.run(Thread.java:695)

8.1.18在處理請求的時候,utf-8轉碼失敗會使用ios-8859-1,找不到返回404

2015-11-16 15:37:43.763:WARN:oejs.AbstractHttpConnection:Failed UTF-8 decode for request path, trying ISO-8859-1

但是奇怪的是,在處理返回 Response.sendError,代碼裡調用 Request.getRequestURI,用utf-8轉碼,引起異常,導致直接關閉串連;

初步解決思路:

1.升9版本,但是jetty9.3預設是編譯jdk8,jdk還在6跑著,風險不小

2.nginx改nginx_upstream_check_module

http://nolinux.blog.51cto.com/4824967/1594029

3.改下8.1.18的代碼(手生哎)

4.proxy_next_upstream 最後加個max_fails=0的節點,反正前面都錯了,這個節點撐著(沒人故意刷你死不了);

 

jetty,nginx都不算熟悉,有大牛請指導、自己記錄,誤人勿怪!!!!


jetty 在請求URI裡傳入非法字元,jetty會中斷連線,導致nginx認為該節點不健康

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.