MENU

升级HTTPS+伪静态+批量修改图片地址+网站运行统计+网站动态公告+解决跨域问题

文章来源:原创

一直以来用的是http,被大佬们嘲笑,今天有空升级一下,走了很多弯路,下面简单说一下步骤:

1.升级HTTPS

(1)先到我的阿里轻量服务器上申请一个免费的SSL证书,期限一年,一年后再更新。

(2)点击下载,根据服务器需要下载对应的证书。

我的是windows版apathe2.4,下载后有三个文件:public.crt是证书文件,key文件是私钥,chain.crt是链文件(其实我也不知道是什么,好像是根证书)

(3)将三个证书文件上传到apache的conf目录下(当然上传位置可以自定义),我是传到了conf/cer下面

(4)修改httpd.conf文件

①首先启用这两个模块(即把前面的注释“#”号去掉)

要特别注意红框内的模块,也要一并启用,我就是一开始没启用导致apache一直启动不了,走了不少弯路,查了好多资料,后来通过httpd.exe -t 命令找到的错误。

②启用Include conf/extra/httpd-ssl.conf

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.

③修改这部分,把Require all Deny 改成granted,否则有403错误。

<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

OK,到这里httpd.conf部分就改完了。

④修改conf/extra/httpd-ssl.conf,将ServerName改成你的域名

<VirtualHost _default_:443>
#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs/blog"
ServerName www.flypig.xyz:443
ServerAdmin flypig.xyz@outlook.com

将从阿里下载并上传到conf/cer目录下的的证书,按路径修改

SSLCertificateFile "${SRVROOT}/conf/cer/www.flypig.xyz_public.crt"
#SSLCertificateFile "${SRVROOT}/conf/server-dsa.crt"
#SSLCertificateFile "${SRVROOT}/conf/server-ecc.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "${SRVROOT}/conf/cer/www.flypig.xyz.key"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-dsa.key"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-ecc.key"

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convenience.
SSLCertificateChainFile "${SRVROOT}/conf/cer/www.flypig.xyz_chain.crt"

这里:

#   while OpenSSL disabled these by default in 0.9.8zf/1.0.0r/1.0.1m/1.0.2a.
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES

和这里:

#   protocol or later should remain in use.
SSLProtocol all -SSLv3 -SSLv2
SSLProxyProtocol all -SSLv3 -SSLv2

考虑兼容性,随你改或不改,反正我也不懂,我看资料上改了,我也改了,哈哈。

⑤惊心动魄的时候到了,重启Apache服务,如果正常重启,恭喜你,成功了。如果没有,再根据logs/error.log查看问题吧。

⑥下面修改七牛的配置。

在这里开启HTTPS配置,我用的是七牛申请的免费证书,申请很简单,略过。

稍事片刻,启用成功。

2.批量替换博客文章图片地址

不知道为什么,我的博客文章里原来用的都是http地址的图片链接,升级成https后,图片还正常显示,不知道有哪位大佬清楚到底是什么原因,日后再研究吧。

补充一下,把博客文章中图片地址批量替换:

操作之前先做好数据库的备份(重要)

我用的是SQLite数据库,数据库只有一个文件,用和谐版的navicat连接到数据库上,打开typecho_contents表,文章都存在text字段下面,然后用查找替换工具

一键完成,我这次一共是替换了354个,如果逐个打开弄,想想就头疼!

补充一下

记得把数据库中所有涉及到的本站的http地址都替换掉,比如一开始我就忘记替换typecho_fields字段里的图片地址了,导致手机浏览首页总是在请求http资源,显示小叹号,不安全的信息。

替换完成后

3.关于伪静态,顺便隐藏index.php

(1)修改httpd.conf文件
启用rewrite模块

LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule sed_module modules/mod_sed.so

(2)在Apache根目录建一个.htaccess的文件(注意必须带. 这是Linux文件系统中隐藏文件的标志),我是windows的服务器,建这个文件麻烦一点儿,因为windows不支持无文件名的文件,最简单的方法是利用命令行的copy con 命令,打开cmd命令行,然后,使用屏幕编辑命令copy con .htaccess后回车,随便输点儿什么东西,最后按下ctrl+z结束编辑,就成功生成了.htaccess。然后用VsCode打开文件,把下面的代码拷贝进去。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

(3)在typecho主题设置--永久链接中,启用地址重写功能。

4.底部网站运行统计代码

代码来源于:羡鱼日记博客,感谢

(1)运行时间统计

<!-- 网站运行计时统计 start-->
<center>
<span id="runtime_span"></span>
<script type="text/javascript">function show_runtime(){window.setTimeout("show_runtime()",1000);X=new 
Date("2/14/2021 00:00:00");
Y=new Date();T=(Y.getTime()-X.getTime());M=24*60*60*1000;
a=T/M;A=Math.floor(a);b=(a-A)*24;B=Math.floor(b);c=(b-B)*60;C=Math.floor((b-B)*60);D=Math.floor((c-C)*60);
runtime_span.innerHTML="本站已安全运行: "+A+"天"+B+"小时"+C+"分"+D+"秒"}show_runtime();</script>
</center>
<!-- 网站运行计时统计 over-->

(2)网站访客统计(数据为自2021年6月20日以来)

<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
     <span id="busuanzi_container_site_pv">本站总访问量<span id="busuanzi_value_site_pv"></span>次</span>
     <span id="busuanzi_container_site_uv">本站访客数<span id="busuanzi_value_site_uv"></span>人次</span>

5.首页的网站动态公告代码

感谢隔壁小胡的博客的分享

<div id="chakhsu"></div> <script> var chakhsu = function (r) { function t() { return 
b[Math.floor(Math.random() * b.length)] } function e() { return String.fromCharCode(94 * 
Math.random() + 33) } function n(r) { for (var n = document.createDocumentFragment(), i = 0; r > 
i; i++) { var l = document.createElement("span"); l.textContent = e(), l.style.color = t(), 
n.appendChild(l) } return n } function i() { var t = o[c.skillI]; c.step ? c.step-- : (c.step = g,
 c.prefixP < l.length ? (c.prefixP >= 0 && (c.text += l[c.prefixP]), c.prefixP++) : "forward" === 
c.direction ? c.skillP < t.length ? (c.text += t[c.skillP], c.skillP++) : c.delay ? c.delay-- : 
(c.direction = "backward", c.delay = a) : c.skillP > 0 ? (c.text = c.text.slice(0, -1), c.skillP-
-) : (c.skillI = (c.skillI + 1) % o.length, c.direction = "forward")), r.textContent = c.text, 
r.appendChild(n(c.prefixP < l.length ? Math.min(s, s + c.prefixP) : Math.min(s, t.length - 
c.skillP))), setTimeout(i, d) } /*以下内容自定义修改*/ var l = "逻辑只是工具, ", o = ["心地才是主宰!", 
].map(function (r) { return r + "" }), a = 2, g = 1, s = 5, d = 75, b = ["rgb(110,64,170)", 
"rgb(150,61,179)", "rgb(191,60,175)", "rgb(228,65,157)", "rgb(254,75,131)", "rgb(255,94,99)", 
"rgb(255,120,71)", "rgb(251,150,51)", "rgb(226,183,47)", "rgb(198,214,60)", "rgb(175,240,91)", 
"rgb(127,246,88)", "rgb(82,246,103)", "rgb(48,239,130)", "rgb(29,223,163)", "rgb(26,199,194)", 
"rgb(35,171,216)", "rgb(54,140,225)", "rgb(76,110,219)", "rgb(96,84,200)"], c = {text: "", 
prefixP: -s, skillI: 0, skillP: 0, direction: "forward", delay: a, step: g}; i() }; 
chakhsu(document.getElementById('chakhsu')); </script> <div>

6、跨域问题

在七牛域名管理的HTTP响应头里设置,如下图。

大功告成!

以上就是粗略的,我的升级HTTPS+伪静态+批量替换图片地址+网站运行统计+网站动态公告+解决跨域问题的升级之路,大佬贱笑了

Last Modified: August 7, 2021