最流行的web服务器端程序

  • 北美印第安人的一个部落,/ 来自美军武装直升机
  • Apache软件基金会的一个开源web服务器
  • 曾经是 世界上使用排名第一的web服务器软件
  • 模块化强大的扩展能力
    • SSO模块 单点登录
    • 并发限制模块
    • 日志监控模块
    • WAF模块 web应用防火墙
    • 负载均衡模块
    • 音乐 / 图像处理模块

Apache安装使用

1
sudo apt install apache2      # 安装Apache软件包

这是默认的主页面

默认侦听在80端口

通过众多的directives(指令)进行配置,将directives分散于多个配置文件中

在Ubuntu server中把 apache 大的配置文件切分成多个小的配置文件,这样使用起来会条理清晰

配置文件都在/etc/apache目录下,大致有以下文件:

1
2
3
4
5
6
7
8
9
10
11
apache2.conf     # 主配置文件,全局配置,是一个配置文件入口,通过 include包含其他配置文件
https.conf # 新版本已经弃用
conf-available # 可启用的配置目录
conf-enabled # 启用的配置目录(需要重启服务)
envvars # 环境变量
mods-available # 可用的模块目录
mods-enabled # 启用的模块目录(需重启服务)
ports.conf # web服务侦听端口
sites-available # 可用的站点目录(虚拟主机)
sites-enabled # 启用的站点目录(需重启服务)
magic # 根据文件前几个字符确定MIME类型

站点文件配置

1
sudo vim /etc/apache2/sites-available/000-default.conf

里面的配置并不多,以virtualhost开头,以virtualhost结尾

创建新的虚拟主机

1
2
3
4
5
6
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mysite.conf

ServerAlias *.lab.com # 域名通配符
sudo a2ensite mynewsite # 启用虚拟主机
sudo systemctl restart apache2.service # 重启服务
sudo a2dissite mynewsite # 停用虚拟主机

实例:

  • 创建两个站点, ali 和baidu 通过域名的区分,同样都侦听在80端口

  • 然后在/var/www/index新建ali和baidu目录, 各自新建一个index.html文件然后回到apache2目录下, 在site-enabled目录下软连接ali和baidu的配置,可以用sudo a2ensite ali命令

  • 然后根据提示重启服务

侦听端口

1
/etc/apache2/ports.conf

DirectoryIndex 索引页 更改mods-available/dir.conf

Option Indexes

按照上面的排列顺序,默认返回的是排在前面的页面

如果一个都没找到,会在浏览器页面上返回一个当前web服务器上的文件目录

但是文件目录显示出来是一件非常危险的事情 可以在apache主配置文件中隐藏

编辑/etc/apache2/apache2.conf去掉下面画圈的地方:

改掉之后 重启服务, 再去访问, 会报权限拒绝的错误

ErrorDocument 报错提示 在/etc/apache2/conf-available/localized-error-pages.conf

如不想显示报错的提示, 可以修改localized-error-pages.conf内容,自定义报错信息

基于目录的Options

1
2
3
4
indexes            # 列出文件目录信息, 索引
ExecCGI # 允许CGI脚本执行(默认只在/usr/bin/cgi/bin这个目录启用CGI脚本)
Includes # 允许服务端包含(一个html包含另一个html)
IncludesNOEXEC # 允许包含, 但禁止CGI脚本exec include
1
2
3
4
5
6
sudo vi /etc/apache2/envvars
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-dat
# 服务器端应答客户端访问的账号(www-data)

PidFile # /var/run/apache2/apache2.pid

模块化

  • 服务器核心只实现了基本功能
  • 其他功能通过模块实现
  • Ubuntu编译动态加载模块实现运行时模块调用
1
2
3
4
apt search libapache2-mod          # 搜索模块
sudo apt install libapache2-mod-auth-mysql # 安装模块
sudo a2enmod auth_mysql # 启用模块
sudo a2dismod auth_mysql # 禁用模块

加密

传输过程的CIA C就是机密性, I 就是完整性 , A就是可用性.

  • C通过ssl实现了信息的加密, I就是通过hash计算,确保每个数据的hash摘要值 完整性, A可用性 身份验证

  • 不提供应用层安全

在sites-available/default-ssl.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo a2ensite default-ssl          # 默认未启动
sudo a2enmod ssl # 默认未启动

# 查看default_ssl_conf配置文件
_default_:443 # 未指定虚拟主机的443端口访问
SSLEngine on # 开启SSL / TLS
SSLCertificateFile # 证书文件

<FileMatch> / <Directory>
SSLOptions + StdEnvVars # 标准环境变量


BrowserMatch

证书:

1
2
3
4
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr      # CA机构签名证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mysite.key -out /etc/ssl/certs/mysite.crt
# 自签名证书

创建HTTPS虚拟主机

1
2
3
4
5
6
sudo cp default-ssl.conf mysite-ssl.conf

# 在配置文件中修改
ServerName www.lab.com:443
SSLCerificateFile /etc/ssl/certs/mysite.crt
SSLCertificateKeyFile /etc/ssl/private/mysite.key

商业证书颁发机构

  • 权威机构颁发 默认信任 增强特性 收费高昂 有效期长

Let’s encrypt

  • 致力于加速全网实现HTTPS的免费证书颁发机构
  • 证书有效期90天(可刷新)
1
2
sudo add-apt-repository ppa:certbot/certbot   # 添加库
sudo apt install python-certbot-apache # 安装客户端(自动获得安装证书)

申请证书流程

  • 前提

    • 域名正常解析 设置好虚拟主机
  • 申请并获得证书

    sudo certbot --apache -d example.com -d www.example.com

  • 证书位置

    /etc/letsencrypt/live

  • 查看证书状态

    https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest