用Nginx尝试使用HTTP2.
极客女子的第12个圣诞日历文章是关于这个话题的。我从去年(2014年夏季)开始默默地收集信息,包括了 RFC 定义,现在也想把它应用到我的服务中去!于是我决定具体验证一下,并写下这篇文章作为契机。我将尝试在 nginx 上使用 http2。关于 http/2,许多人都已经写过了,所以我想试试几个并考虑稳定性、易用性和维护间隔作为选择的标准。之后我还计划写一些关于 h2o 和 nghttp2 的验证内容。环境:MacOS 10.11 版,vagrant 1.7.4 版,使用 vagrant 准备一个 CentOS 7.1 版的环境。
#vagrant box add centos7.1 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box
#vagrant init centos7.1
编辑vagrantfile:
config.vm.define :wb01 do |wb01|
wb01.vm.box = “centos7.1”
wb01.vm.hostname = “wb01”
wb01.vm.network :private_network, ip: “192.168.22.40”
end
#运行vagrant up
从1.9.5版本开始,nginx开始支持http2协议。
本次使用以下位置提取最新版本的1.9.7源代码。
由于默认不包含,所以使用–with-http_v2_module选项来附加。
#使用wget命令下载http://nginx.org/download/nginx-1.9.7.tar.gz文件
#使用tar命令解压缩nginx-1.9.7.tar.gz文件
#切换到nginx-1.9.7目录
#运行配置命令./configure –with-http_ssl_module –with-http_v2_module –with-debug –without-http_rewrite_module
#编译源码
#安装nginx
我要注册服务。
# 进入 /usr/lib/systemd/system/ 目录。
# 创建一个名为 nginx.service 的文件。
# 使用 vi 编辑 nginx.service 文件。
内容是官方支持Fedora的。请根据您的环境进行调整。官方链接:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
使用HTTP/2支持创建自签名证书。
#使用openssl genrsa 2048命令生成server.key文件。
#使用openssl req -new -key server.key命令生成server.csr文件。
#使用openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt命令生成server.crt文件。
将以下内容添加到/usr/local/nginx/conf/nginx.conf文件中进行http2支持。
server {
listen 443 ssl http2;
server_name localhost;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
在中文中进行原生语言的转述,只需要一个选项:
将链接复制并注册服务。
ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
systemctl enable nginx
检查公文并启动。
#/usr/local/nginx/sbin/nginx -t
#systemctl start nginx
确认nginx是否在运行中。
#ps ax |grep nginx
969 ? Ss 0:00 nginx: 主进程 /usr/local/nginx/sbin/nginx
973 ? S 0:00 nginx: 工作进程
3573 pts/0 S+ 0:00 grep –color=auto nginx
指示灯变蓝后,确认http/2已启用!由于可以通过简单设置启用,我希望继续使用它。