Centos7下nginx配置https
在互联网信息安全日益重要的今天,https
协议几乎成了标配,部分浏览器如果遇到非https
的服务器会拒绝访问,有的平台也要求app的服务器要用https协议(如苹果、微信小程序)。
下面是个人配置https
的笔记,先完整记录下来,不然到时遇到问题又各种百度。
一、步骤1 配置nginx
假如你已经申请到了https证书,而且有nginx下的版本,通常是两个文件,一个是 .key 后缀的文件,为证书的私钥,另一个是 .crt 后缀的文件,为证书的公钥。
nginx.conf
配置如下:
server {
listen 443 ssl;
server_name www.server.com default_server; #1
ssl_certificate ssl/bundle.crt; #2
ssl_certificate_key ssl/cert.key; #3
ssl_session_cache shared:SSL:1m;
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;
ssl_prefer_server_ciphers on;
}
- 把#1所在行的 www.sever.com 改成你的域名(注意:这个域名是你申请证书时用的域名)。
- 把#2所在行的 ssl/bundle.crt* 改成你实际文件的路径,如果是相对路径,那么是相对于
nginx
的conf
目录的路径。 - 把#3所在行的 ssl/cert.key* 改成你实际文件的路径,如果是相对路径,那么是相对于
nginx
的conf
目录的路径。
如果要让用户用http
协议访问时自动跳转https
,则还需加上如下配置:
server {
listen 80;
server_name www.server.com;
rewrite ^(.*)$ https://www.server.com;
}
就是一个url重写而已。
注意要把 www.server.com 改成你实际的主机名。
配置完后,用如下命令
nginx -t
测试下配置文件有没有错误。
如果没有错误,用如下命令
nginx -s reload
重启nginx
,然后用浏览器测试下用https
协议能否正常访问服务器。
如果不能访问,请确认下证书路径有没有问题,如果没有,请看下面的 步骤2。
二、步骤2 开启服务器的防火墙
需要该步骤是因为服务器的防火墙没有开通443端口。
centos7
下用的防火墙是firewalld
,配置防火墙用命令firewall-cmd
。
- 开通443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
- 确认是否开通
firewall-cmd --list-ports
如果可以看到443/tcp
字样就说明开通了
- 重新加载下防火墙配置
firewall-cmd --reload
执行完该步骤,大多数服务器应该可以正常用https
协议访问。
如果不能,如果你用的是阿里云服务器,请看步骤3。如果是其它服务器,请自行百度。
步骤3 在安全组规则开通443端口
需要该步骤的原因是因为云服务器的安全组规则上没有开通相关的端口。
操作步骤请看图片:
做完步骤3,应该可以用https
了。如果还不能,提交工单问技术人员吧。或者再检查下步骤1与步骤2有没有做到位。