win7 64位下配置http2+nginx+nodeJS
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近要调研http2能给页面带来多少访问速度的提升,所以自己先搭一个环境测试一下;
一、CA数字证书:
要升级http2首先是要把http升级到https,https升级就需要CA证书,但由于现代的浏览器都已默认安装了一些网络证书,所以我们访问淘宝,京东之类的网站就不需要让用户自己安装了,其它没有安装的证书就得用户自己得去安装了;
现在网络上的很多https证书,有免费的也有付费的,但作为我是用于自己调试与测试用,当然找免费的了,但免费的证书需要申请与审核,时间也是得等,加上功能上也有限制,好吧,我是迫不及待的用证书,来调试,最后找到
了OpenSSL,自己来创建证书,省去申请的时间,那现在就说说OpenSSL如何创建一个ca证书,服务器证书与客户端证书;
安装准备:
下载OpenSSL我用的版本是openssl-1.1.0
下载安装ActivePerl最新版本即可;
下载安装nasm最新版本即可;
下载安装Visual Studio 2015 自己上度娘找吧,很多;
先把OpenSSL解压到E盘,目录名称为openssl-1.1.0;
点击开始按钮,选择Visual Studio Tools 下的64位编译机,定位到
E://openssl-1.1.0
输入命令:
//初始化文件目录
$ perl Configure VC-WIN64A --prefix=E:/openssl-1.1.0/win64_OpenSSL --ope nssldir=E:/openssl-1.1.0/win64_SSL
$ nmake
$ nmake test
$ nmake install
注意,以上的安装方法一定要参考该版本的安装方法,这个安装方法的文件一般叫INSTALL,网上有很多方法,都是老版本来的;
生成密钥、证书
第一步,为服务器端和客户端准备公钥、私钥
# 生成服务器端私钥
genrsa -out server.key 1024
# 生成服务器端公钥
rsa -in server.key -pubout -out server.pem
# 生成客户端私钥
genrsa -out client.key 1024
# 生成客户端公钥
rsa -in client.key -pubout -out client.pem
第二步,生成CA 证书
# 生成CA私钥
genrsa-outca.key 1024
# X.509CertificateSigningRequest (CSR) Management.
req-config "E:\openssl-1.1.0\win64_SSL\f" -new-keyca.key-outca. csr
# X.509CertificateDataManagement.
x509-req-inca.csr-signkeyca.key-outca.crt
CountryName (2 lettercode) [AU]:CH
StateorProvinceName (fullname) [Some-State]:Guangdong Province
LocalityName (eg, city) []:Guangzhou
OrganizationName (eg, company) [Internet Widgits Pty Ltd]:
OrganizationalUnitName (eg, section) []:IT
# 这里是写你的服务器域名
CommonName (e.g. serverFQDNorYOURname) []:*
EmailAddress[]:********@****.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:1234
An optional company name []:JINJIN
第三步,生成服务器端证书和客户端证书(注:每次生成完csr与crt 要把命令工具关闭重新打开,否则报错)
# 服务器端需要向CA机构申请签名证书,在申请签名证书之前依然是创建自己的CSR文件
req-config "E:\openssl-1.1.0\win64_SSL\f" -new-keyserver.key-o utserver.csr
# 向自己的CA机构申请证书,签名过程需要CA的证书和私钥参与,最终颁发一个带有CA 签名的证书
x509-req-CAca.crt-CAkeyca.key-CAcreateserial-inserver.csr-outserver.crt
# 其它参考上面的,唯一区别这就句
OrganizationName (eg, company) [Internet Widgits Pty Ltd]:
# 向自己的CA机构申请证书,签名过程需要CA的证书和私钥参与,最终颁发一个带有CA 签名的证书
x509-req-CAca.crt-CAkeyca.key-CAcreateserial-inserver.csr-outserver.crt
# client端到CA签名
x509-req-CAca.crt-CAkeyca.key-CAcreateserial-inclient.csr-outclient.crt
# 其它参考上面的,唯一区别这就句
OrganizationName (eg, company) [Internet Widgits Pty Ltd]: 生成后的文件如下:
二、nginx配置:
首先先下载一个nginx的稳定版本 1.10.1;
由于windows下的nginx是默认没有开通http_v2_module模块,即http2.0模块,如果要开启这个模块就得自己重新编译一个新nginx.exe文件,下面就来介绍如何生成一个支持http2.0的nginx;
安装准备:
下载安装Visual Studio 2015;
下载安装MSYS最新版本即可;
下载安装ActivePerl最新版本即可;
下载安装Mercurial最新版本即可;
先看看官网说明,编译时要用的安装
包/en/docs/howto build on_win32.html:
需要用到pcre-8.39.tar.gz,zlib-1.2.8.tar.gz,openssl-1.0.2h.tar.gz这三个包,自行上网找吧;
然后再看看nginx1.10.1开启了哪些功能:
把上面开启的内容全部复制下来,注意builddir,pcre,zlib,openssl 这四个路径,要与你的生成路径匹配;
生成nginx.exe
第一步:
首先安装Mercurial并在环境变量中添加C:\Program Files\Mercurial\目录,因为我们需要在命令行中使用hg命令来获取nginx的源码。
hg clone /nginx
下载nginx的依赖模块就放到nginx源码的同级目录中:
nginx
--lib
---openssl-1.0.2h.tar.gz
---pcre-8.39.tar.gz
---zlib-1.2.8.tar.gz
在nginx目录中新建build文件夹做为我们编译目录,并在build中新增lib存放依赖包解压目录,打开MSYS安装目录下的msys.bat命令行工具,cd到nginx/build/lib目录下执行:
tar -xzf ../../lib/openssl-1.0.2h.tar.gz
tar -xzf ../../lib/pcre-8.39.tar.gz
tar -xzf ../../lib/zlib-1.2.8.tar.gz
nginx/build/lib目录:
nginx
---build
------lib
---------openssl-1.0.1s
---------pcre-8.37
---------zlib-1.2.8
第二步:
生成配置nginx生成Makefile文件,如果打包的系统是x64的话需要在生成Makefile之前把openssl模块的配置修改为x64的,到
nginx/build/lib/openssl-1.0.2h目录下,找到INSTALL.W64文件,用编辑器打开,找到类似如下文字:
To build for W in64/x64:
> perl Configure VC-WIN64A
> ms\do_win64a
> nmake -f ms\ntdll.mak
>cd out32dll
> ..\ms\test
在cmd命令行中cd到目录下分别执行前两句,执行成功即可:
> perl Configure VC-WIN64A
> ms\do_win64a
启动msys.bat并cd到nginx源码目录下执行:
auto/configure --with-cc=cl --builddir=build --with-debug --prefix= --co nf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/a ccess.log--error-log-path=logs/error.log --sbin-path=nginx.exe --http-cl ient-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/pr oxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-pat h=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-D FD_SETSIZE=1024 --with-pcre=build/lib/pcre-8.39 --with-zlib=build/lib/zl ib-1.2.8 --with-select_module --with-http_realip_module --with-http_addi tion_module --with-http_sub_module --with-http_dav_module --with-http_st ub_status_module --with-http_flv_module --with-http_mp4_module --with-ht tp_gunzip_module --with-http_gzip_static_module --with-http_auth_request _module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-mail --with-stream --with-openssl=build/l ib/openssl-1.0.2h --with-openssl-opt=no-asm --with-http_ssl_module --wit h-mail_ssl_module --with-stream_ssl_module --with-ipv6 --with-http_v2_mo dule
接下来用visual studio 的命令行工具来执行,因为编译生成32位的nginx,所要要用32位的编译机,执行以下代码:
nmake -f build/Makefile
开始执行等待大概几分钟,如果没有意外就成功了,我在编译时最后提示找不到引用sed我看了一下是mingw中的引用文件,但是不用管他我们在build下的nginx.exe已经编译成功了。
编译成功后,把nginx.exe复制到之前的nginx_1.10.1的目录下,替换掉,再次查看一下开启的模块:
第三步:
配置一下nginx.conf文件:
client_max_body_size 20M;
server_names_hash_max_size 512;
server_names_hash_bucket_size 128;
gzip on;
server {
listen 80;
listen 443 ssl http2 default_server;
server_name ;
ssl on; #这里开启后,在linux上不能访问http
ssl_certificate /nginx/ssl/server.crt;
ssl_certificate_key /nginx/ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SH A384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA: DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA38 4:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:D ES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
location / {
#root html;
#index index.html index.htm;
resolver_timeout 30s;
proxy_pass http://localhost:3000/; }
}
最后还要给电脑安装ca证书:
安装成功后,用浏览器打开你的服务器地址,就不会有红色的小锁了:。