zoukankan      html  css  js  c++  java
  • Nginx 日志打印十六进制 x16x03x01x02x00x01x00x01xFCx03x03PxBB

    问题描述

    nginx 日志"$request"字段以后,打印全是十六进制输出

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

    解决办法

    启用SSl支持

    # 不同版本(nginx -v查看)的Nginx启用ssl的配置不一样!!
    # 版本1.15.0及以下
    listen 443;
    ssl on;
     
    # 版本1.15.0以上
    listen 443 ssl;

    分析

    对比一下http、https访问连接服务器过程:

    http:  TCP三次握手——发送请求数据——后台处理——返回结果

    https: TCP三次握手——客户端发起https认证请求(第一步由client发送hello报文并带上相关信息)...

    结论

    在Nginx没有开启SSL支持的情况下,Nginx将https连接建立过程中的客户端hello报文当作http报文处理,暴力的截取了报文中指定位置的十六进制字符串当作了$request的http请求方法、URL和版本号,所以access日志中会出现十六进制字符串。

    备注:

    那为什么access日志中4个请求的$request开头部分是一致的,后面部分又不一致了呢?分析hello报文格式就知道了!

  • 相关阅读:
    openresty
    ATS 相关
    pandas
    flask
    ansible
    zipline
    bcolz
    数据分析 --- concat
    Go --- 基础使用
    Go --- 基础介绍
  • 原文地址:https://www.cnblogs.com/Star-Haitian/p/14981070.html
Copyright © 2011-2022 走看看