我发现网上有关这个的教程都像有那什么大病一样,不是不全就是话都说不明白 ?_?
本文主要内容包括从纯净系统到配置好ssl的全过程,但不包括购买域名和配置服务器等基础操作。
配置
OS: Ubuntu 18.04 LTS
Apache: Apache/2.4.29
专有名词说明
未特殊说明情况下,本文中
为你的域名。 未特殊说明情况下,本文中
为你的联系方式(电子邮箱)。 未特殊说明情况下,本文中/Path/to/your/cert指的是你证书所在的路径。
安装Apache2
Ubuntu里面所有命令前添加sudo是好习惯,尤其是把Desktop当Server用的时候。
1 | sudo apt-get update |
Vim是可选的,你可以使用任何你习惯的文本编辑器。
openssl也是可选的,如果不需要https就不需要安装。
验证Apache2正确安装
1 | apache2 -version |
输出
1 | Server version: Apache/2.4.29 (Ubuntu) |
即为成功。
配置Apache2
提示:以下步骤可能不规范,生产环境切勿使用该设置。
尤其是防火墙不要随便关闭,由于我内网到外网有硬件防火墙和上网行为审计管理,因此即使防火墙全关也可保证一定安全性。
- 关闭防火墙
1 | 关闭防火墙 |
iptables开放全部端口
1 | 开放全部端口 |
- 新建网站根目录
1 | sudo mkdir -p /var/www/<YourDomainName>/html |
- 新建主页
1 | sudo vim /var/www/<YourDomainName>/html/index.html |
按“I”输入
1 |
|
这是宝塔面板搭建的网站的默认页面简单修改的页面,嫌麻烦就先拿来用了orz~
当然你也可以输入其他任何你喜欢的HTML,输入完成后按Esc然后输入“:wq!”保存退出。
- 创建站点配置文件
1 | sudo vim /etc/apache2/sites-available/<YourDomainName>.conf |
按“I”输入
1 | <VirtualHost *:80> |
完成后按Esc然后输入“:wq!”保存退出。
- 激活配置文件
1 | sudo a2ensite <YourDomainName>.conf |
若输出“Syntax OK”则为无错误,可在您的浏览器里面输入域名访问。
SSL
- 申请证书
略
Ps:很多域名提供商都会有免费赠送的TrustAsia或者Let’s Encrypt的证书可以申请
SSL证书不是域名证书
- 合并证书
一般证书下载后会提供一个完整的证书包,至少会包含Apache/Nginx/IIS/Tomcat四种不同服务所需的证书,这里只需要Apache证书,打开Apache证书文件夹,里面会有三个文件:1_root_bundle.crt(根证书)、2_DomainName.crt(域名证书)、3_DomainName.key(服务器私钥)。
新建一个文件夹,把3_DomainName.key文件复制出来,重命名为privkey.pem,保存备用。
用Notepad++(也可以是你习惯的任何文本编辑软件)打开1_root_bundle.crt和2_DomainName.crt,然后新建一个文本文档,按照2_DomainName.crt+1_root_bundle.crt的顺序保存成一个新文件,重命名为fullchain.pem保存到刚才新建的文件夹备用。
也可以不进行证书合并,但是手机访问时部分浏览器会提示证书链不完整或无法访问
若证书合并顺序顺序不正确会导致apache无法正常启动
腾讯云申请的TrustAsia证书包根目录里面有一个KEY文件和PEM文件,这两个文件是已经合并好的证书,改个名之后几乎可以开箱即用。
- 启用SSL模块
1 | sudo a2enmod ssl |
- 添加443端口监听
打开站点配置文件
1 | sudo vim /etc/apache2/sites-available/<YourDomainName>.conf |
按“I”添加如下内容(不用删除之前的内容)
1 | <VirtualHost *:443> |
完成后按Esc然后输入“:wq!”保存退出。
- 激活配置文件
1 | sudo a2ensite <YourDomainName>.conf |
若输出“Syntax OK”则为无错误,可在您的浏览器里面输入https域名访问。
Apache2常用命令
启动Apache2: sudo systemctl start apache2
终止Apache2: sudo systemctl stop apache2
终止Apache2后再启动Apache2: sudo systemctl restart apache2
不终止Apache2仅重载和应用配置更改: sudo systemctl reload apache2
每次开机时自动启动Apache2: sudo systemctl enable apache2
每次开机时不自动启动Apache2: sudo systemctl disable apache2
启用重写:sudo a2enmod rewrite
ufw防火墙常用命令
有些资料说不是所有的Ubuntu都会有ufw,如果没有的话需要先安装
sudo apt-get install ufw
启用: sudo ufw enable
关闭全部外部连接(入站): sudo ufw default deny
禁用: sudo ufw disable
查看状态: sudo ufw status
允许外部访问80端口: sudo ufw allow 80
禁止外部访问80端口: sudo ufw delete allow 80
允许此IP访问所有的本机端口: sudo ufw allow from 192.168.1.1
禁止外部访问smtp服务: sudo ufw deny smtp
以服务名代表端口,可以使用sudo less /etc/services列出所有服务信息, 其中包括该服务使用了哪个端口和哪种协议
可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机
1 | sudo ufw allow from 10.0.0.0/8 |
- 重置所有规则: sudo ufw reset
常见问题和解决方案
- 报错查看日志
1 | journalctl -xe |
好多CDN都不支持SSL方式,使用前先查找CDN文档是否支持SSL方式访问。
测试时出现错误
1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message |
输入
1 | echo "ServerName <YourDomainName>" | sudo tee /etc/apache2/conf-available/servername.conf |
输出Syntax OK即可解决。
- Apache2网页中文乱码
1 | sudo vim /etc/apache2/conf-available/charset.conf |
然后删除AddDefaultCharset UTF-8前面的注释标记保存重载Apache2即可
HTTP强制跳转HTTPS
在站点配置文件中80端口配置区域加上以下代码即可
1 | <IfModule mod_rewrite.c> |
参考资料
特别鸣谢
无