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

6,815 阅读4分钟

前言

目前,我们常用的网站,都已升级到https访问,而且很多的专家也建议实施全站https,下面记录了我在升级https过程中遇到的几个坑,希望能对后来者有所帮助。

先展示效果图

https访问效果图

思路

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

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

验证方式一般分为:DNS验证文件验证,大多数人可能使用的DNS验证,因为我没有备案域名,所以只能采用文件验证。

3. 下载证书和部署

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

1. 申请证书

大多数人都是通过阿里云或者是腾讯云来申请ssl安全证书的,我自己的服务器也是腾讯云,因为自己没有备案,所以使用FreeSSL

申请证书网站

输入自己想要配置ssl的域名,并输入邮箱点击创建即可。

填坑:

由于自己没有备案域名,使用别人分配的二级域名,因此需要选择文件验证,而上面的默认是使用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年,一年之后需要重新申请证书,比较麻烦,后面研究一下,如何在证书快到期之后,自动重新申请并配置,不需要手动操作。