Jetty 가 요청 URI 에 불법 문 자 를 입력 하면 Jetty 가 연결 을 끊 어 nginx 가 이 노드 가 건강 하지 않다 고 생각 합 니 다.
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 0 at 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 버 전 으로 올 라 갑 니 다. 하지만 jetty 9.3 은 기본적으로 jdk 8 을 컴 파일 하고 jdk 는 6 에서 달리 고 있 습 니 다. 위험 이 적지 않 습 니 다.
2. nginx 개 nginxupstream_check_module
http://nolinux.blog.51cto.com/4824967/1594029
3. 8.1.18 코드 (손 이 설 다 니) 를 고치 고 초보 적 인 생각
response. sendError () --- > request. getRequestURI () -- > HttpURI. getPathAndParam 발생 NotUtf8Exception 을 8599 - 1 로 바 꾸 어 가 져 옵 니 다.public String getPathAndParamISO8859() { if (_path==_query) return null; return StringUtil.toString(_raw,_path,_param-_path,StringUtil.__ISO_8859_1); }
4.proxy_next_upstream 마지막 에 max 추가fails = 0 의 노드, 어차피 앞 이 틀 렸 으 니 이 노드 는 버 티 고 있다.
jetty, nginx 는 익숙 하지 않 습 니 다. 큰 소 가 있 으 면 지도 하고 기록 하 세 요. 사람 을 실수 하 는 것 은 탓 하지 마 세 요!!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.