Lxn-Chan!

(~ ̄▽ ̄)→))* ̄▽ ̄*)o

我发现网上有关这个的教程都像有那什么大病一样,不是不全就是话都说不明白 ?_?
本文主要内容包括从纯净系统到配置好ssl的全过程,但不包括购买域名和配置服务器等基础操作。

配置

OS: Ubuntu 18.04 LTS
Apache: Apache/2.4.29

专有名词说明

  1. 未特殊说明情况下,本文中为你的域名。

  2. 未特殊说明情况下,本文中为你的联系方式(电子邮箱)。

  3. 未特殊说明情况下,本文中/Path/to/your/cert指的是你证书所在的路径。

安装Apache2

Ubuntu里面所有命令前添加sudo是好习惯,尤其是把Desktop当Server用的时候。

1
2
3
4
sudo apt-get update
sudo apt-get install vim
sudo apt-get install apache2
sudo apt-get install openssl

Vim是可选的,你可以使用任何你习惯的文本编辑器。
openssl也是可选的,如果不需要https就不需要安装。

验证Apache2正确安装

1
apache2 -version

输出

1
2
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2020-08-12T21:33:25

即为成功。

配置Apache2

提示:以下步骤可能不规范,生产环境切勿使用该设置。
尤其是防火墙不要随便关闭,由于我内网到外网有硬件防火墙和上网行为审计管理,因此即使防火墙全关也可保证一定安全性。

  1. 关闭防火墙
1
2
3
4
5
6
7
8
9
# 关闭防火墙
sudo ufw disable

# 查看状态
sudo ufw status

# 输出(桌面Desktop版)
防火墙在系统启动时自动禁用
状态:不活动

iptables开放全部端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 开放全部端口
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
sudo iptables-save

# 重启后不重置防火墙
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

# 开放指定端口
sudo iptables -I INPUT -p tcp --dport <PortNumber> -j ACCEPT
  1. 新建网站根目录
1
2
3
sudo mkdir -p /var/www/<YourDomainName>/html
sudo chown -R $USER:$USER /var/www/<YourDomainName>/html
sudo chmod -R 755 /var/www/<YourDomainName>
  1. 新建主页
1
sudo vim /var/www/<YourDomainName>/html/index.html

按“I”输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>站点创建成功</title>
<style>
.container {
width: 60%;
margin: 10% auto 0;
background-color: #f0f0f0;
padding: 2% 5%;
border-radius: 10px
}

ul {
padding-left: 20px;
}

ul li {
line-height: 2.3
}

a {
color: #20a53a
}
</style>
</head>
<body>
<div class="container">
<h1>恭喜, 站点创建成功!</h1>
<h3>这是默认index.html,本页面由您写入生成</h3>
<ul>
<li>本页面在/var/www/<YourDomainName>/html/index.html</li>
<li>您可以修改、删除或覆盖本页面</li>
<li>E-mail: admin@arlxn.top</li>
</ul>
</div>
</body>
</html>

这是宝塔面板搭建的网站的默认页面简单修改的页面,嫌麻烦就先拿来用了orz~

当然你也可以输入其他任何你喜欢的HTML,输入完成后按Esc然后输入“:wq!”保存退出。

  1. 创建站点配置文件
1
sudo vim /etc/apache2/sites-available/<YourDomainName>.conf

按“I”输入

1
2
3
4
5
6
7
8
<VirtualHost *:80>
ServerAdmin <YourContactWay>
ServerName <YourDomainName>
ServerAlias <YourDomainName>
DocumentRoot /var/www/<YourDomainName>/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

完成后按Esc然后输入“:wq!”保存退出。

  1. 激活配置文件
1
2
3
4
sudo a2ensite <YourDomainName>.conf
sudo a2dissite 000-default.conf
sudo systemctl restart apache2
sudo apache2ctl configtest

若输出“Syntax OK”则为无错误,可在您的浏览器里面输入域名访问。

SSL

  1. 申请证书


Ps:很多域名提供商都会有免费赠送的TrustAsia或者Let’s Encrypt的证书可以申请
SSL证书不是域名证书

  1. 合并证书

一般证书下载后会提供一个完整的证书包,至少会包含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文件,这两个文件是已经合并好的证书,改个名之后几乎可以开箱即用。

  1. 启用SSL模块
1
sudo a2enmod ssl
  1. 添加443端口监听

打开站点配置文件

1
sudo vim /etc/apache2/sites-available/<YourDomainName>.conf

按“I”添加如下内容(不用删除之前的内容)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<VirtualHost *:443>
ServerAdmin <YourDomainName>
DocumentRoot "/www/wwwroot/<YourDomainName>/"
ServerName SSL.<YourDomainName>
ServerAlias <YourDomainName>
#errorDocument 404 /404.html
ErrorLog ${APACHE_LOG_DIR}/<YourDomainName>-error_log
CustomLog ${APACHE_LOG_DIR}/<YourDomainName>-access_log combined

#SSL
SSLEngine On
SSLCertificateFile /Path/to/your/cert/fullchain.pem
SSLCertificateKeyFile /Path/to/your/cert/privkey.pem
SSLCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLHonorCipherOrder On

</VirtualHost>

完成后按Esc然后输入“:wq!”保存退出。

  1. 激活配置文件
1
2
3
sudo a2ensite <YourDomainName>.conf
sudo systemctl restart apache2
sudo apache2ctl configtest

若输出“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
2
3
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16
  • 重置所有规则: sudo ufw reset

常见问题和解决方案

  1. 报错查看日志
1
journalctl -xe
  1. 好多CDN都不支持SSL方式,使用前先查找CDN文档是否支持SSL方式访问。

  2. 测试时出现错误

1
2
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
Syntax OK

输入

1
2
3
echo "ServerName <YourDomainName>" | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo apache2ctl configtest

输出Syntax OK即可解决。

  1. Apache2网页中文乱码
1
sudo vim /etc/apache2/conf-available/charset.conf

然后删除AddDefaultCharset UTF-8前面的注释标记保存重载Apache2即可

HTTP强制跳转HTTPS

在站点配置文件中80端口配置区域加上以下代码即可

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}$1 [L,R=301]
</IfModule>

参考资料

特别鸣谢

 简单说两句


联系站长 | 隐私政策 | 用户协议

备案号:辽ICP备19013963-5号

萌ICP备 20219421 号

中国互联网违法和不良信息举报中心

架构版本号:6.5.1 | 本站已全面支持IPv6 |

正在载入运行数据(1/2)请稍后...
正在载入运行数据(2/2)请稍后...

Copyright 2021 LingXuanNing, All rights reserved.