正在悠闲地加载

Debian11 Apache2 配置https

3个月前搞定了手工在云主机上搭建wordpress站点。接下来的3个月我一直在处理3个小问题。

  1. 第一个问题,就是实现mysite.com能够直接访问到mysite.com/wordpress下面,这个直接在wordpress官网有教程。https://wordpress.org/support/article/giving-wordpress-its-own-directory/ 
  2. 第二个问题,网站备案,作为守法好公民,国内网站必须备案,这个腾讯云基本上做得已经很贴心了,这里说的小问题是备案成功以后,要把备案号放到wordpress站点上显示的问题。搜了一下,有不少是直接编辑页面php文件的,我不懂php,虽然看起来也不复杂,但是我选择了一个更加变通的方案,在小工具的footersider里直接添加一条备案单链接就好了,这个办法就是省事,其实效果要比直接改footer.php丑一点点。
  3. 第个问题最复杂,就是让网站支持https,在这里就是让Apache2用腾讯云给的免费证书开启https。证书的话,腾讯云上面直接可以申请一年的免费证书,我申请完了以后3个月没挂上去,等于说我这个证书只能用9个月了。拖延症害人。
    1. 腾讯云教程 https://cloud.tencent.com/document/product/400/35243 腾讯云里下载的4个证书文件里面有个.csr是用不到的。只需要用到两个crt证书文件和一个key文件。我要干的事情其实就是把申请好的证书文件上传至服务器,然后去修改apache2的配置文件,这些配置文件里记录了证书文件路径。然后通过命令启动服务,然后就大功告成了。不过这里面坑还是有点的。因为网上大部分都是centos的教程,包括腾讯云也是用的Centos的作为示例的,Debian下Apache的目录和Centos不一样,所以这里面搞了很久。也学到一些新技能吧。
    2. 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

配置好了需要运行下面两条命令

a2ensite default-ssl
a2enmod ssl
但是会提示找不到命令
需要手动添加环境变量?那么问题来了,我怎么知道加什么路径到环境变量里去?
那就用whereis a2ensite查看一下,然后把查看到的路径添加到环境变量里去

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 服务

systemctl restart 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

总结一下几个坑:
  1. 网上debain11配置Apache2 https访问教程比较少,导致不知道配置哪个文件指向证书文件
  2. 环境变量没有加,导致a2ensite/a2enmod/a2enssl/a2dismod ssl/ 这些命令不能用
  3. 没有仔细看证书文件路径指向配置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分钟就搞定了。

posted @ 2022-07-24 19:12  仰望星空的耕田人  阅读(616)  评论(0编辑  收藏  举报