Debian11 Apache2 配置https
3个月前搞定了手工在云主机上搭建wordpress站点。接下来的3个月我一直在处理3个小问题。
- 第一个问题,就是实现mysite.com能够直接访问到mysite.com/wordpress下面,这个直接在wordpress官网有教程。https://wordpress.org/support/article/giving-wordpress-its-own-directory/
- 第二个问题,网站备案,作为守法好公民,国内网站必须备案,这个腾讯云基本上做得已经很贴心了,这里说的小问题是备案成功以后,要把备案号放到wordpress站点上显示的问题。搜了一下,有不少是直接编辑页面php文件的,我不懂php,虽然看起来也不复杂,但是我选择了一个更加变通的方案,在小工具的footersider里直接添加一条备案单链接就好了,这个办法就是省事,其实效果要比直接改footer.php丑一点点。
- 第个问题最复杂,就是让网站支持https,在这里就是让Apache2用腾讯云给的免费证书开启https。证书的话,腾讯云上面直接可以申请一年的免费证书,我申请完了以后3个月没挂上去,等于说我这个证书只能用9个月了。拖延症害人。
- 腾讯云教程 https://cloud.tencent.com/document/product/400/35243 腾讯云里下载的4个证书文件里面有个.csr是用不到的。只需要用到两个crt证书文件和一个key文件。我要干的事情其实就是把申请好的证书文件上传至服务器,然后去修改apache2的配置文件,这些配置文件里记录了证书文件路径。然后通过命令启动服务,然后就大功告成了。不过这里面坑还是有点的。因为网上大部分都是centos的教程,包括腾讯云也是用的Centos的作为示例的,Debian下Apache的目录和Centos不一样,所以这里面搞了很久。也学到一些新技能吧。
- https://www.server-world.info/en/note?os=Debian_11&p=httpd&f=3
下面就说一下详细的坑。
#配置下面这个文件
vi /etc/apache2/sites-available/default-ssl.conf
#主要就下面两行代码
#证书文件的路径
SSLCertificateFile /etc/httpd/ssl/cloud.tencent.com.crt
#私钥文件的路径
SSLCertificateKeyFile /etc/httpd/ssl/cloud.tencent.com.key
#证书链文件的路径
SSLCertificateChainFile /etc/httpd/ssl/root_bundle.crt
配置好了需要运行下面两条命令
1. 使用export命令添加PATH环境变量(临时)#
export PATH=$PATH:/opt/software/node-v8.9.3-linux-x64/bin/node
export使用方法为
export PATH=$PATH:路径1:路径2:路径n
;
$PATH为系统变量,表示之前所有设置的路径,如果不加则之前所有的路径都失效。所以必须加上。
2. 永久添加环境变量(影响当前用户)#
编辑 vim ~/.bashrc
在里面加入:
export PATH=$PATH:/opt/software/node-v8.9.3-linux-x64/bin/node
3. 永久添加环境变量(影响所有用户)#
如果是修改用户主目录下的.bash_profile,则添加的环境变量只对该用户有效,修改/etc/profile对所有用户都生效。。
4. 刷新#
修改好配置文件后执行source /etc/profile
或者 source /root/.bashrc
使配置文件生效
加好了环境变量生效以后,需要重启Apache2 服务
#查看apache2错误日志的倒数几行
tail /var/log/apache2/error.log
如果没出错的话,https访问站点就成功了。此时是http和https共存的。
如果需要强制跳转的http的话需要另外配置
vi /etc/apache2/sites-available/000-default.conf #在virtualhost里面添加 下面3行 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R] #保存以后 a2enmod rewrite #最后重启Apache2服务 systemctl restart apache2
总结一下几个坑:
- 网上debain11配置Apache2 https访问教程比较少,导致不知道配置哪个文件指向证书文件
- 环境变量没有加,导致a2ensite/a2enmod/a2enssl/
a2dismod ssl
/ 这些命令不能用 - 没有仔细看证书文件路径指向配置root_bundle.crt这个
差点又想要放弃,最后还是做到了,现在已经不像刚毕业那时候有无穷的折腾劲了。这些内容如果是经验丰富的人做的话,20分钟最多了。而我今天起码花了2个小时吧,算上总结,不过总结了还是有收获的。也有一些成就感。
11个月过去了,我的免费证书过期了,站点页面每次打开都提示https有问题了。今天花了1个小时重新搞了一个免费证书。
免费证书主流就是let's encrypt 提供的,不过仅仅有这个还不行,还得有个ACME客户端来控制证书,这个ACME客户端首选就是Certbot。
看两篇文章就可以了。
ACME 客户端 - Let's Encrypt - 免费的SSL/TLS证书 (letsencrypt.org)
Certbot Instructions | Certbot (eff.org)
操作基本上就是装一个snap,装cerbot,然后几个命令运行一下,就自动部署好了证书,这个体验比之前手动配置证书好太多了。真的最多20分钟就搞定了。