引:最近在做一个微信小程序项目,坑爹的小程序不仅需要https协议,而且还要是80端口才能访问后台,这里总结一下Nginx的安装过程与HTTPS的配置。
Ngnix的安装
由于后面Nginx需要添加模块,所以我们采用源码安装,具体安装方法可以参考 走进Linux_软件安装 中的源码安装一节。
这里需要注意的我们在 产生makefile文件的时候 需要加一些configure arguments,以便安装相关模块。如下:1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
安装完之后可以利用下面的命令查看Ngnix版本及其编译参数:1
2
3
4
5
6
7
8/usr/local/nginx/sbin/nginx -V
// 输出如下结果就是对的
nginx version: nginx/1.11.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
然后我们测试新的nginx程序是否正确:1
2
3
4
5/usr/local/nginx/sbin/nginx -t
// 输出如下结果J就表面安装成功
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
配置HTTPS
SSL证书申请
SSL证书遵守 SSL(Secure Sockets Layer 安全套接层)协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能,也就是说你想要使用https就需要拥有SSL证书。
这里我们使用openssl证书来举例,微信小程序官网也是使用openssl来进行HTTPS服务器配置。
生成私钥
1
2
3
4
5
6
7
8
9
10
11// 进入nginx的安装目录
cd /usr/local/nginx
// 创建一个存放私钥的文件夹(自定义)
mkdir key
// 进入key文件夹
cd key
// 生成私钥
openssl genrsa -out server.key 2048生成csr文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// CSR 是Certificate Signing Request的缩写,即证书签名请求,
// 这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
// 生成csr文件
openssl req -new -key server.key -out certreq.csr
// 输入上面的命令后会要求你输入一些信息:
Country Name: CN //您所在国家的ISO标准代号,中国为CN
State or Province Name:guandong //您单位所在地省/自治区/直辖市
Locality Name:shenzhen //您单位所在地的市/县/区
Organization Name: Tencent Technology (Shenzhen) Company Limited //您单位/机构/企业合法的名称
Organizational Unit Name: R&D //部门名称
Common Name: www.example.com //通用名,网站域名。此项必须与您访问提供SSL服务的服务器时所应用的域名完全匹配。
Email Address: //您的邮件地址,不必输入,直接回车跳过
"extra"attributes // 以下信息不必输入,回车跳过直到命令执行完毕。生成crt证书
1
2// CRT 即 certificate的缩写,即证书。
openssl x509 -req -days 365 -in certreq.csr -signkey server.key -out certreq.crt
Nginx配置SSL加密
想要https就要监听443端口,nginx.conf已经预留出了server,只要我们把注释去掉开启即可。
1 | // 编辑Ngnix配置文件 |
这样虽然可以利用https来访问我们的ip,但是对于浏览器还是不受信任的。
导入证书
如果你是找一个知名的SSL证书颁发机构如VeriSign、Wosign、StartSSL签发的证书,并且浏览器已经内置并信任了这些根证书,如果你是自建证书(向我们刚才那样)或获得二级证书授权,那么就需要将证书添加到浏览器,这样在访问站点时才不会显示不安全连接。不够买证书微信小程序会不支持。 证书生成的方法有很多,这里说两种:
购买阿里云的免费证书
购买GETSSL官网证书
购买好证书并下载后(可以将证书和私钥放到之前的key目录)需要从新配置nginx.conf文件,如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server {
listen 443 ssl;
server_name www.example.com;
ssl on;
# pem是crt的一种,内容是BASE64编码,Apache和*NIX服务器偏向于使用这种编码格式
ssl_certificate /usr/local/nginx/key/*.pem;
ssl_certificate_key /usr/local/nginx/key/*.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /{
proxy_pass http://localhost:8080;
}
}