新手来学习77 2024-02-17 10:54 采纳率: 0%
浏览 67
已结题

我在服务器配置SSL之后,启动spring boot项目会报错

我在服务器搭建了一个FTP,配置了SLL,用Nginx转发了80端口,之前spring boot项目发布是可以用的,配置好Nginx之后,项目启动会报这个错误


 Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x060xf70x010x000x060xf30x030x030xbco0x95GA~0x0c0xab0x980xc50xaai0xc60xc1#gw0x8f0xfb0xd10x82}0x840xb70xcc0x0c0xcb{0xd80xb60xe60xab ]. HTTP method names must be tokens
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) ~[tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.69.jar!/:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]

2024-02-17 10:18:24.891  INFO 14290 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x060xf70x010x000x060xf30x030x030xfa0xa80x160xe90x160xac0x040x9a60x1f.0xc3~:0x0d0xd8i0xd50x7f0xf30xc3)=0xb72F0xdf|V~/x ]. HTTP method names must be tokens
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) ~[tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.69.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.69.jar!/:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]

  • 写回答

18条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-17 10:55
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的错误信息,Spring Boot 应用在配置 SSL 之后通过 Nginx 转发时遇到了 HTTP 请求头解析错误。错误提示表明服务器接收到的请求方法中包含了无效字符,而 HTTP 规范要求方法名称必须是 tokens(即符合 RFC 7230 中定义的有效 token 字符序列)。

    问题根源在于,在Nginx配置转发到Spring Boot应用后,客户端尝试以SSL(HTTPS)方式访问时,请求被错误地以明文HTTP形式发送到了Spring Boot应用监听的端口(8080),而不是按照预期以HTTPS协议进行连接。

    解决这个问题需要确保以下几点:

    1. Nginx 配置正确

      • 确保 Nginx 正确配置了 SSL,并将 HTTPS 的请求代理到 Spring Boot 应用的非安全端口(如 8080)。 示例配置片段:
      server {
          listen 443 ssl;
          server_name yourdomain.com;
      
          ssl_certificate /path/to/your/cert.pem;
          ssl_certificate_key /path/to/your/key.pem;
      
          location / {
              proxy_pass http://localhost:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto https;
          }
      }
      
    2. Spring Boot 应用支持 HTTPS

      • 如果希望直接让 Spring Boot 应用监听 HTTPS,那么需要在应用配置中添加相关属性来启用 SSL。
    3. 检查客户端请求

      • 确保客户端正在使用正确的协议(HTTPS)访问您的服务,而不是错误地继续使用 HTTP 协议。
    4. 防火墙和端口设置

      • 检查服务器上的防火墙规则,确保443端口对外开放且8080端口允许从本地回环地址(localhost)访问。
    5. 重载 Nginx 配置并重启 Spring Boot 应用

      • 在修改配置文件后,确保执行 nginx -t 来测试配置文件是否正确,并使用 nginx -s reload 命令重载配置。
      • 同时,如果有必要,重启你的 Spring Boot 应用以确保新的网络配置生效。

    请根据实际情况检查并调整上述各点,以确保整个链路的 SSL 配置与转发无误。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月18日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误
  • ¥15 请帮我看一下问题出在哪里
  • ¥15 如何解决图中的问题,localhost现实无法访问此页面
  • ¥40 想找个软件,但我不知道怎么找到它,我甚至不知道有没有
  • ¥15 怎么把60秒的视频时长改成显示0秒?且视频内容没有任何变化的正常播放?目的是为了解决一些平台对视频时长的要求,最好有自动处理的工具!
  • ¥15 累加器设初值为00H
  • ¥15 webAPI接口返回值判断
  • ¥15 自动化测试 UI Automtion
  • ¥20 关于#深度学习#的问题:2708)输出:邻接矩阵A 或者 节点索引方式:通过随机游走或者其他方式,保持节点连接类似下图(语言-python)
  • ¥15 win11 24h2 专业工作站版 右键打印怎样删除