nginx配置https并实现http跳转https

/ 技术相关 / 0 条评论 / 580浏览

Centos7下nginx配置https 在互联网信息安全日益重要的今天,https协议几乎成了标配,部分浏览器如果遇到非https的服务器会拒绝访问,有的平台也要求app的服务器要用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端口

需要该步骤的原因是因为云服务器的安全组规则上没有开通相关的端口。