轻松配置ssl,网站从http转到https

前言

目前,咱们经常使用的网站,都已升级到https访问,并且不少的专家也建议实施全站https,下面记录了我在升级https过程当中遇到的几个坑,但愿能对后来者有所帮助。php

先展现效果图 html

https访问效果图

思路

要实现https访问网站,须要理清思路。nginx

1. 申请网站ssl安全证书: 2. 验证域名全部权api

验证方式通常分为:DNS验证文件验证,大多数人可能使用的DNS验证,由于我没有备案域名,因此只能采用文件验证。浏览器

3. 下载证书和部署安全

将证书上传到服务器,并在Nginx服务器中添加https访问的配置项,基本就能够访问了,下面来讲说具体的过程。bash

1. 申请证书

大多数人都是经过阿里云或者是腾讯云来申请ssl安全证书的,我本身的服务器也是腾讯云,由于本身没有备案,因此使用FreeSSL服务器

申请证书网站

输入本身想要配置ssl的域名,并输入邮箱点击建立便可。网站

填坑:ui

因为本身没有备案域名,使用别人分配的二级域名,所以须要选择文件验证,而上面的默认是使用DNS验证,因此出现了错误。

使用文件验证

2. 使用文件验证域名全部权

点击建立以后,会在下面展现文件验证须要的文件、文件夹和文件内容,并在服务器上域名对应的目录下,建立如图所示的文件夹和文件,并将内容写入到文件中,可是会发现访问域名下的这个文件的时候出现下面的错误。

须要上传的文件和内容

填坑:访问域名时出现403

访问域名出现403错误

由于服务器访问时出现了403,因此须要查看log错误日志,这个文件是在/var/log/nginx/error.log,查看错误日志,显示如图:

错误日志

缘由是:当前登陆的是root用户,建立文件和文件夹的时候,默认用户和用户组是root,而在Nginx的服务器配置中,默认的访问用户是:nginx,因此才会出现403错误,所以须要将建立的文件和文件夹的用户和用户组修改成nginx,使用的命令以下:

chown -R nginx:nginx api
复制代码

如今访问网站,正常显示内容了,以下图:

网站能够正常访问

3. SSL申请证书端验证域名

如今能够访问域名了,所以须要在freessl网站验证,能够先点检测,而后再验证。 验证成功以后,能够点击下载证书,而后将证书上传到服务器,或者是在服务器中建立对应的文件,而后将内容粘贴过去也行。证书以下:

展现证书内容

4. 上传证书、配置https访问

如今已经将证书上传到服务器,接着是配置ssl。 在配置ssl以前,咱们能够建立一个文件夹,专门存储ssl的证书,这样全部的证书都是存放在一块儿,便于管理。 配置Nginx,打开当前域名对应的Nginx配置,修改下面的几个配置项:

1. 修改监听端口号,由原来的80改成443
listen 443;   #将原来的80改为443
2. 添加ssl的证书地址和密钥地址
ssl      on; #设置开启https访问
ssl_certificate  /home/Fly/keys/api.crt; #配置证书位置
ssl_certificate_key /home/Fly/keys/api-private.key; #配置密钥位置
复制代码

注意:在配置ssl时,每一个配置项结束以后,须要加上分号,不然重启Nginx会报错

完整的Nginx配置以下:

server {
    listen       80;
    server_name  ***.com;

    #charset koi8-r;
    #access_log /var/log/nginx/host.access.log main;

    set $root   /home/wwwroot/api;
    ssl                 on;
    ssl_certificate     /home/Fly/keys/api.crt;
    ssl_certificate_key /home/Fly/keys/api-private.key;

    location / {
        root   $root;
        index  index.html index.htm index.php;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #location ~ \.php$ {
    # proxy_pass http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    # deny all;
    #}
}
复制代码

配置完毕以后,重启Nginx服务器,命令:

service nginx restart
复制代码

如今可使用https进行访问,显示如图:

https访问网站成功

5. 将全部的http请求都重定向到https请求

目前咱们在浏览器中直接输入域名的话,默认是http请求,它就会请求到下面的页面。

浏览器默认http请求

因此须要在配置文件中增长一个server,使用rewrite,将全部的http请求重定向到https,配置以下:

server {
    listen 80;
    server_name xxx.com;
    rewrite ^(.*)  https://$host$1 permanent; #请求重定向到https
}
复制代码

重启Nginx服务器,如今访问时,全部的请求都会转到https。

总结:

经过这次的操做,明白了Nginx的基本配置和具体的配置项的含义,下次出现问题就不会摸不着头脑了,固然还有不足之处:目前证书只能使用1年,一年以后须要从新申请证书,比较麻烦,后面研究一下,如何在证书快到期以后,自动从新申请并配置,不须要手动操做。

相关文章
相关标签/搜索