欢迎关注笔者的微信公众号
今天下午在调试一个项目的微信端,之前因为没有服务器,采用的是内网穿透,但是有一些问题。这两天服务器到位,并且也分配了一个子域名,可以把项目部署到服务器了。
但是在调试微信公众号的时候一直报错,据说后台api必须得是https协议。。??
搞不懂??先配好再说。
什么是HTTPS
HTTPS全称是超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。
关于HTTP与HTTPS的详细信息可查看参考资料1,这里不做过多赘述。
安装nginx
- 在编译nginx前请安装好依赖
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
- 在配置nginx时请加上
--with-http_ssl_module
参数以开启SSL模块,默认不开启
./configure --with-http_stub_status_module --with-http_ssl_module
如果之前安装nginx的时候没有开启SSL模块,后面配置https会报错
nginx: [emerg] the "ssl" parameter requiresngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37
默认安装位置
/usr/local/nginx
,可以通过--prefix=xxx
修改
- 编译
make
注意:如果之前已经装过nginx,但没有SSL模块,可以将这一步已经编译好的nginx替换原nginx,不用执行下一步
cp objs/nginx /usr/local/nginx/sbin
- 安装
make install
安装SSL证书
一般SSL证书都是收费的,阿里云提供有免费版的,据说腾讯云也有,随意了,这里用的是阿里云证书。
地址:https://www.aliyun.com/product/cas?source=5176.11533457&userCode=ywqc0ubl&type=copy
申请证书
如果域名经过阿里云DNS解析就选
手工DNS验证
,否则就选文件验证
这是文件验证方式,也很简单。将验证文件上传到服务器,能以这样一个路径访问到就好。
配置证书
下载对应的服务器类型的证书
下载下来是一个压缩包,上传到服务器后解压,有两个文件.pem
和.key
- 创建证书目录
cd /usr/local/nginx/conf #进入Nginx默认安装目录。如果您修改过默认安装目录,请根据实际配置进行调整。
mkdir cert #创建证书目录,命名为cert。
# 将证书文件放到cert目录中
- 编辑Nginx配置文件(nginx.conf),修改与证书相关的配置内容
vim /usr/local/nginx/conf/nginx.conf
在http
块中添加server
块
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录。
index index.html index.htm;
}
}
- 可选:设置HTTP请求自动跳转HTTPS。
server {
listen 80;
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
index index.html index.htm;
}
}
- 重启
nginx
cd /usr/local/nginx/sbin #进入Nginx服务的可执行目录。
./nginx -s reload #重新载入配置文件。
开放防火墙
如果是云服务器请记得开放安全组策略,笔者配置完后浏览器一直访问不通,后面才想起安全组策略没放开。。
参考资料
- https://zhuanlan.zhihu.com/p/135947893
- https://zhuanlan.zhihu.com/p/85040625
- https://www.aliyun.com/product/cas?source=5176.11533457&userCode=ywqc0ubl&type=copy
- https://segmentfault.com/a/1190000022673232