为什么nginx服务http2,还是它?

一直试图让我的nginx服务器上的http2,我对一些事情感到困惑。 我环顾了这里和networking周围,但是我没有find我正在寻找的东西,或者是在它还没有被“释放”时使用过时的信息来回答。

我有工作nginx服务器,使用虚拟主机。 它有http_v2模块

me@server:/etc/nginx$ sudo nginx -V | grep http2 nginx version: nginx/1.10.3 built with OpenSSL 1.1.0f 25 May 2017 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-2tpxfc/nginx-1.10.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-2tpxfc/nginx-1.10.3/debian/modules/nginx-auth-pam --add-dynamic-module=/build/nginx-2tpxfc/nginx-1.10.3/debian/modules/nginx-dav-ext-module --add-dynamic-module=/build/nginx-2tpxfc/nginx-1.10.3/debian/modules/nginx-echo --add-dynamic-module=/build/nginx-2tpxfc/nginx-1.10.3/debian/modules/nginx-upstream-fair --add-dynamic-module=/build/nginx-2tpxfc/nginx-1.10.3/debian/modules/ngx_http_substitutions_filter_module 

(不知道如何突出代码块中的“–with-http_v2_module”)

我的一个虚拟主机有一个工作SSL(使用letsencrypt)。

 server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } server { server_name www.example.com; access_log /log/example.com/access.log; error_log /log/example.com/error.log; root /www/www.example.com/public; client_max_body_size 100M; index index.php; location / { # my location config there ... } listen 80; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot ssl_session_cache shared:le_nginx_SSL:1m; # managed by Certbot ssl_session_timeout 1440m; # managed by Certbot ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # managed by Certbot ssl_prefer_server_ciphers on; # managed by Certbot ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA"; # managed by Certbot ssl_dhparam /etc/ssl/certs/dhparam.pem; } 

我想为它启用http2。

每个我见过的文档说我只需要在“ssl”之后加上“http2”: listen 443 ssl; ,如果我这样做,Nginx高兴地重新启动没有错误。

我想尝试,如果它工作,并无法再在Chromenetworking控制台中find协议。 所以我find了https://tools.keycdn.com/http2-test ,这说明它的工作。

所以我的问题:

1 – 如果通过http2完成连接,我怎样才能看到chrome(如果可能的话,如果不可以)?

2 – 我仍然只需要添加“http2”指令来启用它在我的虚拟主机之后? 所以我不需要把它添加到我的非ssl /监听端口80行,因为这种情况下将自动处理浏览器和服务器之间的请求,对不对?

我没有任何错误或任何东西,我只是想知道如何检查它使用http2时,它可以和事情工作,因为他们应该…

谢谢。

你有一些不太正确的事情。 服务器块不能同时在端口80和443上侦听。 你没有任何东西告诉服务器使用http / 2。 您也在第一个块中将端口80redirect到端口80。

这是我的开始:

 server { listen 80; server_name mine.com www.mine.com; root /var/empty; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name mine.com www.mine.com; root /home/mine; index index.html; charset utf-8; 

请注意,第一个块redirect到https,第二个块只侦听端口443为http2。

注意:你的意见在许多方面都给了certbot好评,但是certbot没有pipe理任何东西。 这只是一个脚本,让你从LetsEncrypt证书,这一切。 除此之外,它不“pipe理”任何东西。

编辑:你怎么知道它的工作? 你应该在左边的地址栏中有一个绿色的锁。 我一直在使用Firefox,主要是因为我的Chrome安装出现问题,而且我注意到在Chrome开发工具中找不到有关协议的完整信息。 在Firefox中,它处于networking连接之下,清楚地列为“http2”。

1 – 如果通过http2完成连接,我怎样才能看到chrome(如果可能的话,如果不可以)?

在Chrome中,您可以在开发人员工具中的“networking”选项卡中执行此操作。 但是,默认情况下,没有显示协议:您需要右键单击其中一个列名并select“协议”。

2 – 我仍然只需要添加“http2”指令来启用它在我的虚拟主机之后? 所以我不需要把它添加到我的非ssl /监听端口80行,因为这种情况下将自动处理浏览器和服务器之间的请求,对不对?

你是对的,你只需要在ssl行之后添加“http2”指令,因为一个不安全的请求被redirect到一个使用HTTP / 2的安全请求。