• [记录点滴]OpenResty 支持http v2的问题


    [记录点滴]OpenResty 支持http v2的问题

    0x00 摘要

    记录一次OpenResty支持http v2的问题排查。

    0x01 问题

    错误现象:无法上传图片,后台log是http v2 not supported yet

    以为是后台没有开启http v2,于是开始排查。

    0x02 排查

    nginx

    nginx显示支持 v2

    /usr/local/openresty/nginx/sbin/nginx -V
    nginx version: openresty/1.11.2.3
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
    built with OpenSSL 1.0.2k  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt='-O2 -I/usr/local/openresty/zlib/include -I/usr/local/openresty/pcre/include -I/usr/local/openresty/openssl/include' --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.60 --add-module=../xss-nginx-module-0.05 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.31 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.06 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.8 --add-module=../ngx_lua_upstream-0.06 --add-module=../headers-more-nginx-module-0.32 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.18 --add-module=../redis2-nginx-module-0.14 --add-module=../redis-nginx-module-0.3.7 --with-ld-opt='-Wl,-rpath,/usr/local/openresty/luajit/lib -L/usr/local/openresty/zlib/lib -L/usr/local/openresty/pcre/lib -L/usr/local/openresty/openssl/lib -Wl,-rpath,/usr/local/openresty/zlib/lib:/usr/local/openresty/pcre/lib:/usr/local/openresty/openssl/lib' --with-pcre-jit --with-ipv6 --with-stream --with-stream_ssl_module --with-http_v2_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_auth_request_module --with-http_secure_link_module --with-http_random_index_module --with-http_gzip_static_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-threads --with-file-aio --with-dtrace-probes --with-http_ssl_module
    

    curl

    用curl来验证,也显示支持v2

    curl --http2 -I https://xxx/
    HTTP/2 500
    server: nginx
    content-type: application/octet-stream
    content-length: 11
    

    需要看看curl是否支持http2,显示也支持

    curl -V
    curl 7.55.1 (x86_64-pc-linux-gnu) libcurl/7.55.1 OpenSSL/1.0.1 zlib/1.2.3.4 nghttp2/1.26.0-DEV librtmp/2.3
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy
    

    nginx源码

    nginx源码中,没有搜索到这个字符串http v2 not supported yet

    Openresty编译https

    怀疑是Openresty没有编译进去http2,于是重新编译

    ./configure --prefix=/usr/local/openresty_http_v2 
                --with-pcre-jit 
                --with-ipv6 
                --with-http_iconv_module 
                --with-luajit 
          --with-http_v2_module 
                --with-openssl=/home/hao.liu/openssl-1.0.2l
                -j2 
    
    
                --with-http_postgres_module  --------------> 这个不行
    

    但是这个版本也不行,同样的错误。

    0x03 resty.upload代码排查

    上传图片使用resty.upload

    local UPLOAD = require "resty.upload"
    local form,err = UPLOAD:new(chunk_size)
    local typ, res, err = form:read()
    

    所以我们去resty.upload代码看,发现使用了ngx.req.socket

    local req_socket = ngx.req.socket
    local sock, err = req_socket()
    if not sock then
    	return nil, err
    end
    

    0x04 OpenResty源码

    下载openresty源码,在ngx_http_lua_req_socket函数中,确实有这个字符串

    static int ngx_http_lua_req_socket(lua_State *L) {
    #if (NGX_HTTP_V2)
        if (r->stream) {
            return luaL_error(L, "http v2 not supported yet");
        }
    #endif
    }
    

    这明明是:在http v2情况下,socket不支持stream好不好!

    0x05 解决

    nginx.conf中,取消了http2的配置。这样客户端就知道后台只支持httpv1.1,就按照1.1来传输,就可以了。

  • 相关阅读:
    5000 端口 转发
    程序的运行环境=内存+运行库+系统调用
    日志异步落库
    malloc分配的空间是连续的吗?
    PE/ELF文件里面存的是什么呢?
    [Python]编码声明:是coding:utf-8还是coding=utf-8呢
    基于可执行代码的缓冲区溢出检测模型
    SU Demos-06Selecting Traces
    SU Demos-05Sorting Traces-03susorty
    SU Demos-05Sorting Traces-02Demos
  • 原文地址:https://www.cnblogs.com/rossiXYZ/p/13196596.html
Copyright © 2020-2023  润新知