使用nginx配置SSL证书实现https访问

这篇文章主要是以阿里云申请的SSL免费证书为例,通过nginx配置的方式,实现https安全访问网站,并通过nginx进行端口的映射,从而实现https访问应用服务的目的。

本文目录:

  • 域名解析到服务器
  • 阿里云上申请免费SSL证书
  • nginx配置
  • SSL证书配置(ubuntun16.04)
  • nginx将访问映射到具体应用端口

一、把域名解析到服务器

登陆阿里云,在阿里云控制台-产品与服务-云解析DNS-找到需要解析的域名点“解析”,进入解析页面后选择【添加解析】按钮会弹出如下页面:


使用nginx配置SSL证书实现https访问_第1张图片

主机记录填写自己的二级域名,记录值就是服务器ip地址,确认,域名解析成功。

二、在阿里云上申请免费的SSL证书

首先,打开aliyun购买SSL证书的地址,https://commonbuy.aliyun.com/spm=5176.2020520163.cas.1.12092b7aZwTIBO&commodityCode=cas#/buy

使用nginx配置SSL证书实现https访问_第2张图片

可能会发现找不到免费版本的SSL证书,不用担心,只需要先选择一个域名,再选择Symantec品牌,这个时候,就会发现有免费版的证书了,购买即可


使用nginx配置SSL证书实现https访问_第3张图片

购买成功后,回到管理界面,点击补全信息,输入刚刚映射的域名


使用nginx配置SSL证书实现https访问_第4张图片

使用nginx配置SSL证书实现https访问_第5张图片

等待一段时间,等证书状态变为“已签发”后,SSL证书就申请成功了,点击下载,找到页签中Nginx/Tengine配置信息,并“下载证书 for Nginx”:

使用nginx配置SSL证书实现https访问_第6张图片

三、服务器配置Nginx

登陆到服务器,进行nginx的安装,在Ubuntu下安装Nginx有apt安装和源码安装的方式,本次使用apt安装,如果想安装最新版本的话,则只能使用源码安装,具体可以自行百度

$ apt-get update  // 更新软件
$ apt-get install nginx  // 安装nginx

安装好的文件位置如下:
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件
/var/log/nginx:存放日志
如果想更加清楚Nginx的配置项放在什么地方,可以打开/etc/nginx/nginx.conf查看,
如果要查看加载的是哪个配置文件,可以使用sudo nginx -t或者ps -ef | grep nginx命令进行查看
通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本
如需重启nginx,用以下命令:

$ service nginx stop // 停止
$ service nginx start // 启动
$ service nginx restart // 重启
$ service nginx reload// 重新加载

四、配置SSL证书

( 1 ) 在Nginx的安装目录/etc/nginx/下创建cert目录,并且将下载的全部文件拷贝到cert目录中。
( 2 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到:

# HTTPS server
# #server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
#
#}
#}

将其修改为:

server {
    listen 443;
    server_name xxx.icarole.com; //域名
    ssl on;
    root html;   //对应静态文件目录,可以映射到你需要的目录
    index index.html index.htm;
    ssl_certificate   cert/214691357820877.pem; //证书的名字
    ssl_certificate_key  cert/214691357820877.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;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}
server {
    listen 80;
    server_name xxx.icarole.com;// 你的域名
    rewrite ^(.*)$ https://$host$1 permanent;// 把http的域名请求转成https
}

(3)配置完成后,检查一下nginx配置文件是否可用,有successful表示可用。

$ sudo nginx -t // 检查nginx配置文件

(4)配置正确后,重新加载配置文件使配置生效:

$ nginx -s reload // 使配置生效
使用nginx配置SSL证书实现https访问_第7张图片

至此,nginx的https访问就完成了,并且通过rewrite方式把所有http请求也转成了更加安全的https请求。

五、Nginx将请求映射到具体应用端口

如果项目中使用的是某些端口,则需要通过nginx将访问请求转发映射到对应的端口,只需将上面的配置做一些修改即可,具体配置如下:

upstream testServer{
         server xxx.icarole.cn:6201;
       }
server {
    listen 443;
    server_name xxx.icarole.com; //域名
    ssl on;
    root html;   //对应静态文件目录,可以映射到你需要的目录
    index index.html index.htm;
    ssl_certificate   cert/214691357820877.pem; //证书的名字
    ssl_certificate_key  cert/214691357820877.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;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
        proxy_pass http://testServer;  //对应上面的
    }
}
server {
    listen 80;
    server_name xxx.icarole.com;// 你的域名
    rewrite ^(.*)$ https://$host$1 permanent;// 把http的域名请求转成https
}

同样,通过sudo nginx -t 验证配置,然后重启nginx service nginx restart,再次访问xxx.icarole.cn,会发现已经将访问请求映射到了具体的端口,而且会跳转到https页面

使用nginx配置SSL证书实现https访问_第8张图片

说明:

  • 因为我们这里申请的是开发版免费证书,所以一个证书仅支持一个域名认证,不支持通配符。
  • 如果是云服务器比如阿里云ECS,需要到阿里云ECS的管理后台的安全组,修改端口过滤规则把80端口和443端口开放才能访问到,如果是公司内部服务器,则需要确认服务器端口有没有开放,以及路由器有没有对端口做限制。

你可能感兴趣的:(使用nginx配置SSL证书实现https访问)