Nginx环境下搭建HTTPS

本服务器使用的环境是nginx,系统是Ubuntu,使用的阿里云的服务器,所以在阿里云中下载证书。 当然你还可以去CA认证服务机构官网或七牛云存储中下载证书

什么,你的服务器是LAMP环境怎样配置HTTPS,请转战到博主的另一篇博文吧,地址是Apache环境下搭建HTTPS环境

一:在阿里云官网下载CA证书

  • 1、在阿里云官网里的云盾中CA服务证书选项里进行下载证书


    Nginx环境下搭建HTTPS_第1张图片
    刘滔 CA证书下载入口
  • 2、选择并购买证书,本人选的是DV SSL,1年内保护一个域名

Nginx环境下搭建HTTPS_第2张图片
刘滔 DV SSL

如图,选择“立即购买”

Nginx环境下搭建HTTPS_第3张图片
立即购买
  • 3.支付成功后,去云盾控制台-->选择证书服务-->补全证书信息-->绑定一个域名(如www.mydomian.com)-->填写个人信息-->系统生成CSR,点击创建按钮-->提交审核

    1. 选择“补全”


      Nginx环境下搭建HTTPS_第4张图片
      补全
    1. 填写你的域名


      Nginx环境下搭建HTTPS_第5张图片
      域名
  • 3)系统生成CSR,点击创建按钮,提交审核


    Nginx环境下搭建HTTPS_第6张图片
  • 4.提交审核后,可以在我的证书出看到证书的详情。这时候点击“进度”就得到一条主机记录和主机记录值。需在该域名下解析一条记录。


    Nginx环境下搭建HTTPS_第7张图片
    4.png
Nginx环境下搭建HTTPS_第8张图片
  • 5.到指定域名(如www.domain.com)下解析DNS,记录类型选择“CNAME“,根据上一步得到的两个值分别填写后进行解析。

  • 6.下载证书到本地后,上传到自己的服务器上。因为我的服务器是Apache,所以我对应下载的是针对apache服务器的证书。当然你也可以选择nginx、tomcat或其他的证书。在证书下载页,有关于安装证书及如何配置ssl的说明。


    Nginx环境下搭建HTTPS_第9张图片
第二步:配置服务器
  • 1.上传下载的证书for Nginx到服务器,新建一个新命令窗口用scp上传,并解压
  root@laravel:~# scp /.../ssl.zip  root@120.**.***.***:/etcinx/ssl/yourdomain.com.ssl/
  • 2.打开Nginx安装目录下的站点目录sites-avaliable
  root@laravel:~# cd /etcinx/sites-available
  • 3.打开你要配置的站点,监听443端口,将其修改为:
server {
    listen 443;
    server_name www.yourdomain.com;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   /etcinx/ssl/yourdomain.com.ssl/21******.pem;
    ssl_certificate_key  /etcinx/ssl/yourdomain.com.ssl/21******.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;
    }
}

保存并修改,这里开启了ssl;并且在这里配置域名,将server_name配置为www.yourdomain.comssl_certificate配置证书.pem文件的绝对路径,ssl_certificate_key配置证书“.key”的绝对路径。重启nginx服务,就可以带上https的域名访问了。

  root@laravel:~# nginx -s reload
第三步:nginx反向代理

因为博主将博客项目放置在服务器的某个端口下(这里假设是0055端口),所以就需要将0055端口反向代理到443端口,通过https域名访问我的博客。那么如何实现反向代理呢,将上一步监听443端口代码修改如下:

server {
    listen 443;
    server_name www.yourdomain.com;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   /etcinx/ssl/yourdomain.com.ssl/21******.pem;
    ssl_certificate_key  /etcinx/ssl/yourdomain.com.ssl/21******.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 / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass http://127.0.0.1:0055;
    }
}
第三步:nginx重定向

当你想要随意输入域名都能跳转到https下,那么就需要对域名进行重定向配置,这里,我们将80端口和443端口进行重定向,代码如下:

server {
    listen 80;
    server_name www.yourdomain.com yourdomain.com;

    rewrite ^(.*) https://www.yourdomain.com$1 permanent;
}
server {
    listen  443;
    server_name www.yourdomain.com yourdomain.com;

    rewrite ^(.*) https://www.yourdomain.com$1 permanent;
}

那么,为什么需要特别地对80和443端口重定向呢?HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。
当我们在浏览器输入www.yourdomain.com或yourdomain.com时,nginx会将此域名重定向到https下,通过https访问到443端口。又因为443端口反向代理了0055端口。因此最后属于此域名的任何形式都能访问到0055端口下对应的项目。所以博主通过本篇博文的操作,就可以在浏览器地址栏里输入特定域名的任何形式访问到我的博客项目了,并且还是加密过得网站。

原文出处

你可能感兴趣的:(Nginx环境下搭建HTTPS)