NGINX 代理 0000 1204 0000 0000 0000 0300 0000 8000

NGINX 代理 0000 1204 0000 0000 0000 0300 0000 8000

上次更新 nginx 后,我的所有页面都出现:

    0000 1204 0000 0000 0000 0300 0000 8000
    0400 0000 0000 0500 ffff ff00 0004 0800
    0000 0000 7fff 0000 0000 0807 0000 0000
    0000 0000 0000 0000 01

有一个带有 jail 的 FreeBSD/10.2-RELEASE-p17 盒子。

  1. 10.10.10.1:80 :Apache/2.4.20 - 仅作为内部网络 - 通用虚拟主机

  2. XX.XX.XX.XX:80 :nginx/1.10.0 作为 Apache24 的代理和负载均衡器 - 面向公众

从内部网络(apache)对所有文件进行测试:

curl -I --header 'Host: myserver.com' http://10.10.10.1:80/
HTTP/1.1 200 OK
Date: Fri, 20 May 2016 11:23:08 GMT
Server: Apache
Set-Cookie: _icl_current_language=en; expires=Sat, 21-May-2016 11:23:08 GMT; Max-Age=86400; path=/
Set-Cookie: _icl_current_language=en; expires=Sat, 21-May-2016 11:23:08 GMT;     Max-Age=86400; path=/
Content-Type: text/html; charset=UTF-8

从内部或外部网络(nginx)进行的测试所有文件均失败:

curl -I --header 'Host: myserver.com' http://XX.XX.XX.XX:80/
▒▒

所有配置都发生这种情况;该服务器不涉及 SSL。

server {
        listen 80 ;
        server_name myserver.com
        expires off;
    location / {
        proxy_no_cache   1;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://10.10.10.1:80/;
        }
    }

最初我以为它可能与 http/2 连接,但我没有在此主机配置上使用它。Nginx 有多个主机,其中一些与其他 nginx http/2 主机有 http/2 连接 - 这工作正常。nginx 上为其他主机代理安装了无效的 SSL - 但它可以工作。

这是 NGINX -v

nginx version: nginx/1.10.0
built with OpenSSL 1.0.2h  3 May 2016
TLS SNI support enabled
configure arguments: 
--prefix=/usr/local/etc/nginx 
--with-cc-opt='-I /usr/local/include' 
--with-ld-opt='-L /usr/local/lib' 
--conf-path=/usr/local/etc/nginx/nginx.conf 
--sbin-path=/usr/local/sbin/nginx 
--pid-path=/var/run/nginx.pid 
--error-log-path=/var/log/nginx-error.log 
--user=www 
--group=www 
--modules-path=/usr/local/libexec/nginx 
--with-ipv6 
--with-google_perftools_module 
--http-client-body-temp-path=/var/tmp/nginx/client_body_temp 
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp 
--http-proxy-temp-path=/var/tmp/nginx/proxy_temp 
--http-scgi-temp-path=/var/tmp/nginx/scgi_temp 
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp 
--http-log-path=/var/log/nginx-access.log 
--add-module=/wrkdirs/usr/ports/www/nginx/work/nginx_accept_language_module-2f69842 
--with-http_addition_module 
--add-module=/wrkdirs/usr/ports/www/nginx/work/nginx-auth-ldap-8517bb0 
--add-module=/wrkdirs/usr/ports/www/nginx/work/ngx_http_auth_pam_module-1.2 
--add-module=/wrkdirs/usr/ports/www/nginx/work/ngx_cache_purge-2.3 
--add-dynamic-module=/wrkdirs/usr/ports/www/nginx/work/headers-more-nginx-module-f5559ec 
--with-http_dav_module 
--add-module=/wrkdirs/usr/ports/www/nginx/work/nginx-http-footer-filter-1.2.2 
--with-http_geoip_module=dynamic 
--with-http_gzip_static_module 
--with-http_gunzip_module 
--with-http_image_filter_module=dynamic 
--add-module=/wrkdirs/usr/ports/www/nginx/work/nginx-notice-3c95966 
--with-http_perl_module=dynamic 
--with-http_realip_module 
--with-http_slice_module 
--with-http_stub_status_module 
--with-http_sub_module 
--with-http_xslt_module=dynamic 
--add-module=/wrkdirs/usr/ports/www/nginx/work/ngx_devel_kit-0.2.19 
--add-module=/wrkdirs/usr/ports/www/nginx/work/memc-nginx-module-0.16 
--with-pcre 
--add-module=/wrkdirs/usr/ports/www/nginx/work/xss-nginx-module-0.04 
--with-http_v2_module 
--with-stream=dynamic 
--with-stream_ssl_module 
--with-threads 
--with-http_ssl_module 
--add-module=/wrkdirs/usr/ports/www/nginx/work/iconv-nginx-module-0.10

这只发生在落后的 Apache 服务器上。相同的配置在过去 6 年中一直有效;这是在 nginx 升级后发生的。

知道会发生什么吗?有漏洞吗?

答案1

十六进制转储包含 HTTP/2 SETTINGS 和 WINDOW_UPDATE 数据。使用 进行查看nghttp -n -vvv '<host>' --hexdump。最后几位0000 0807 0000 0000 0000 0000 0000 0000 01表示有错误,请参阅rfc7540。不确定,但看起来像是一个 GOAWAY 帧,末尾带有错误代码。

您的 curl 使用 http/1.1 与 nginx http/2 端口通信 - 如果没有适当的升级语言来接收 http2,可能未针对 nghttp2 进行编译。Nginx 尚未在启用 http/2 的端口上使用 http/1.1(请参阅#816) 在 nginx bugtrac 中)。因此,您的 curl 版本和 nginx 版本无法相互通信。如果您意外地在启用 http2 的情况下监听了端口 80,或者在包含的 server {} 块之一中将 http2 代理到端口 80,则可以进行搜索。

相关内容