将网站从http改为https

Huzejun@618 发布于 2020-07-22 5923 次阅读


一、申请证书

腾讯云首页,鼠标移动至云产品上,选择域名与网站中的SSL证书。

在下一个页面中选择申请免费证书。

在这里选择免费版的SSL证书,有效期1年。

之后按照要求填写相关的信息,证书下发应该需要一些时间,耐心等待后进行第二步的操作。

二、进行服务器的配置

    在SSL证书成功下发之后,我们可以下载证书文件,上传至服务器,最后进行服务器文件的配置。
    这些过程我有参考腾讯云官方的指导和网络上其他博客。因为我个人没有系统地学习过服务器的相关知识,所以有些步骤可能出发的角度十分小白。日后若是补充了这方面的知识,会对此篇博客进行有标注的更改。

    证书颁发后,可以在证书列表中点击下载,再将下载的文件解压缩。可以得到如下图所示的文件夹内容。

    这里要区分以下方法,由于我使用的是宝塔面板一键部署wordpress,再使用wordpress来写博客,并且在设置中是Nginx服务器。其他情况可以参考腾讯云官方的指南
    如果是Nginx服务器的话,可以按照以下步骤来。

    下载WinSCP软件,并且连接到自己的服务器上,相关操作和finalshell通过SSH连接到服务器一致。其他设置不用更改。
    在WinSCP中,将左边本地的文件,直接复制到Nginx文件夹下的conf文件夹中。

    复制文件完毕后,通过finalshell或者其他类似的软件连接到服务器上。先使用cd命令移动至nginx的sbin文件夹下[我的操作 cd /www/server/nginx/sbin]。这样是为了方便之后对nginx进行检验的操作和重启nginx。

    之后使用vim命令,对nginx.conf文件进行更改[我的操作 vim /www/server/nginx/conf/nginx.conf]。
    进入如右图所示的界面(说实话我是第一次了解LINUX命令,也挺有意思的),找到server{}后,按i键后进行更改。

#代码如下
user root; #这里我由www,www 改为了root
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
{
use epoll;
worker_connections 51200;
multi_accept on;
}

http
{
include mime.types;
#include luawaf.conf;

include proxy.conf;

default_type application/octet-stream;

server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;

sendfile on;
tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6].";

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server_tokens off;
access_log off;
#下面这一段代码主要是为了将http访问重新定向至https的页面
server
{
listen 80;
server_name hzjblog.com;
return 301 https://$host$request_uri;
}
server
{
listen 443 ssl;
server_name hzjblog.com;
#下面这两个要写的是两个证书文件的位置,默认在conf文件夹下直接搜索,所以刚才直接复制进来也是为了方便现在直接填写文件名的简单操作。
ssl_certificate 1_hzjblog.com_bundle.crt;
ssl_certificate_key 2_hzjblog.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 这里的location十分关键,root这里是我当时数次更改https不成功的原因之一。同时index的后缀格式尽量给全,或者结合网站主页的实际情况填写。
location / {
root /www/wwwroot/www.hzjblog.com;
index index.php index.html index.htm;
}
index index.html index.htm index.php;
root /www/wwwroot/www.hzjblog.com;

#error_page 404 /404.html;
include enable-php.conf;

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*.(js|css)?$
{
expires 12h;
}

location ~ /.
{
deny all;
}

access_log /www/wwwlogs/access.log;
}
include /www/server/panel/vhost/nginx/*.conf;
}

三、其他调整和问题解决

     理论上来讲,上述的操作进行完毕后,使用./nginx -t命令检查一下文件,再使用./nginx -s reload命令重新启动nginx服务,最后刷新浏览器就会出现美丽的小锁头了。
    不过实际情况中,我遇到了几个问题,在这里记录一下。
    1.网页原本的内容中有http的内容,譬如图片等等;
    2.wordpress设置没有更改;
    3.https访问时出现403 forbidden。

    对于问题1,在浏览器中按F12进入开发者模式,可以通过黄色或红色三角标找到出问题的代码,针对性的更改即可。
    对于问题2,在wordpress-->设置中,将url部分的http都改为https即可。
    对于问题3,可以更改nginx.conf文件中的user 为 root,再注意一下自己location的root是否正确的指到了主页文件所在的文件夹。

上图是检验文件时的正常情况,[warn]部分无伤大雅。

到这里浏览器再刷新后,漂亮的小锁头↓就应该出现了。

此作者没有提供个人介绍。
最后更新于 2022-01-15