文章目录
1. 安装部署
sudo apt-get install apache2 # 安装软件
apache2 -v # 查看版本
2. 常规配置
2.1 配置文件概述
/etc/apache2
├── apache2.conf // 主配置文件
├── ports.conf // 监听端口
├── mods-enabled // 第三方模块
├── *.load
├── *.conf
├── sites-enabled // 虚拟主机
├── *.conf
└── conf-enabled // 其他配置
├── *.conf
apache2.conf
主配置文件,包含服务器全局配置,同时引用其它配置文件;ports.conf
配置监听端口;mods-available/
配置第三方模块;sites-available/
配置虚拟主机。
mods-available/
和 sites-available/
是配置文件真实存储位置,但配置未必生效。只有在 mods-enabled/
和 sites-enabled/
中创建软链接的配置文件,才是有效的。这样,借助软链接的创建/删除,控制模块或虚拟主机的启用/停止,可以避免对配置文件的直接改动。相关命令包括:a2enmod、a2dismod、a2ensite、a2dissite、a2enconf、a2disconf。
2.2 监听端口
服务器启动时,自动绑定特定地址和端口,并等待请求传入。默认情况下,服务器监听所有地址和端口。ports.conf
指定待监听的端口或者端口与地址的组合,没有在 ports.conf
中添加的端口将不被监听。sites-enabled/*.conf
将特定端口与虚拟主机绑定,实现对不同地址和端口的响应。
Listen
配置待监听的端口或者端口与地址的组合。如果仅指定了端口,服务器监听所有地址(即网卡)上的特定端口。如果同时给出了地址和端口,服务器监听特定的地址和端口。使用多个 Listen
指定待监听的多个地址和端口,服务器监听来自所有列出的地址和端口的请求。
当增加一个虚拟主机时,一定要在 ports.conf
中添加对相关端口的监听。
2.3 虚拟主机
虚拟主机是在同一台机器上搭建属于不同域名或者基于不同地址的多个网站服务的技术,每个虚拟主机对应一个网络站点。
000-default.conf
是默认 http 服务配置文件,default-ssl.conf
是 https 服务配置文件,新增虚拟主机的配置文件名必须与域名一致。
<VirtualHost *:80>
ServerName www.moonspirit.cn
ServerAdmin yefanbupt@gmail.com
DocumentRoot /var/www/apache
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
sudo a2ensite www.example.com # 启用虚拟主机
sudo a2dissite www.example.com # 停用虚拟主机
sudo systemctl reload apache2 # 重新加载配置文件
3. 支持 https 访问
3.1 安装证书
分别将 *.crt 和 *.key 复制到 /etc/ssl/certs
和 /etc/ssl/private
目录下,完成证书安装。
3.2 配置虚拟主机
编辑 /etc/apache2/sites-available/default-ssl.conf
,添加证书存储路径。
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin yefanbupt@gmail.com
DocumentRoot /var/www/apache
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/2_www.moonspirit.cn_apache.crt # 证书文件
SSLCertificateKeyFile /etc/ssl/private/3_www.moonspirit.cn_apache.key # 私钥文件
SSLCertificateChainFile /etc/ssl/certs/1_root_bundle_apache.crt # 证书链文件
</VirtualHost>
</IfModule>
3.3 启动服务
sudo a2enmod ssl # 启用 SSL 模块
sudo a2ensite default-ssl # 启用 SSL 虚拟主机
sudo systemctl reload apache2 # 重新加载配置文件
4. 重定向到 https
4.1 配置虚拟主机
编辑 000-default.conf
,配置重定向规则。
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R=301]
4.2 启用服务
sudo a2enmod rewrite # 启用重定向模块
sudo systemctl reload apache2 # 重新加载配置文件