Ubuntu20-apache2配置ssl证书

发布于 2021-10-20  198 次阅读


Ubuntu20-apache2配置ssl证书


最近再搭建自己的博客,想要配置https。因此在阿里云申请了免费的证书,将给的apache2证书下载下来。

证书的文件如下:

证书如下:
domain_xxxx.key       ## 私钥文件
domain_xxxx_public.crt    ## 证书文件
domain_xxxx_chain.crt  证书链文件

将证书上传放在服务器的目录下:

/etc/apache2/cert
cert是我自己创建的目录,也可以自己创建

在目录/etc/apache2/sites-available下会有两个文件

000-default.conf
default-ssl.conf

配置default-ssl.conf就好了

先备份一份,防止出错是可以恢复

cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.old

在将这个文件软连接到sites-enables目录下,绝对路径和相对路径都可以

ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

修改default-ssl.conf文件,做了软连接,修改sites-available或者sites-enabled都可以

#源文件的注释被我删了
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/html
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on
                #这里三个要修改的地方分别对应证书当中的三个文件
                SSLCertificateFile      /etc/apache2/cert/domain_xxxxx_public.crt
                SSLCertificateKeyFile /etc/apache2/cert/domain_xxxx.key

                SSLCertificateChainFile /etc/apache2/cert/domain_xxxx_chain.crt #这个文件之前是被注释的,删除#后修改

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
        </VirtualHost>
</IfModule>

在加载apache2ssl模块

a2enmod ssl #加载ssl模块,成功后在mods-enabled目录下有几个文件被添加进来了
#输出如下
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.

重启apache2服务

service apache2 restart

重启之后,使用https就可以访问了。

但是现在如果访问80端口的话,还是以http方式访问。因此现在还需要配置一下强制跳转到https

修改/etc/apache2/sites-available/000-default.conf文件,添加下面三行

RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

启动apache2的重定向模块

a2enmod rewrite

重启apache2服务

service apache2 restart

就可以自动跳转了

参考链接:https://cdmana.com/2021/08/20210826112331095i.html

然后记录一下配置过程中所遇到的问题

docker容器修改映射的端口

由于使用docker搭建的环境,所以一开始只映射了80端口,没有映射443端口。

先将容器停止运行:xxxx为容器id

docker stop xxxxx

修改配置文件如下:xxxx为容器id

修改目录/var/lib/docker/containers/xxxxxxconfig.v2.json、hostconfig.json文件

hostconfig.json

#在PortBindings字段中添加映射的端口
"PortBindings":{"443/tcp":[{"HostIp":"","HostPort":"443"}],"80/tcp":[{"HostIp":"","HostPort":"80"}]}

config.v2.json

#在ExposedPorts字段中添加暴露的端口
"ExposedPorts":{"443/tcp":{},"80/tcp":{}}

然后启动容器即可:

docker start xxxxx

docker容器配置错误导致无法启动

还有就是在配置ssl的过程中,由于配置错误。就会导致容器无法启动,然后使用exec也进不去容器了。说一下我的解决办法。

docker inspect xxx

找到下面的信息

"MergedDir": "/var/lib/docker/overlay2/51767094b8a5136377b27a8730aa57a661d614ef7b4c182be2617da0cd3699e3/merged",
"UpperDir": "/var/lib/docker/overlay2/51767094b8a5136377b27a8730aa57a661d614ef7b4c182be2617da0cd3699e3/diff",
"WorkDir": "/var/lib/docker/overlay2/51767094b8a5136377b27a8730aa57a661d614ef7b4c182be2617da0cd3699e3/work"

切换到merged目录,这下面是容器的一些文件,当然diff目录也可以看一下

这几个文件是什么可参考链接:https://www.cnblogs.com/lhanghang/p/13556629.html

cd /var/lib/docker/overlay2/51767094b8a5136377b27a8730aa57a661d614ef7b4c182be2617da0cd3699e3/merged
#bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

然后修改配置错误的文件,在重启容器就好了。

查看日志信息,查找报错的信息

docker logs -n 10 xxxxx

沙上有印,光中有影!