一、安装
# 更新源
sudo apt update
# 安装
sudo install apache2 -y
# 查看安装的文件
dpkg -L apache2
二、配置文件及命令
1.配置文件
/etc/apache2 | 配置文件根目录 |
---|---|
/etc/apache2/apache2.conf | 主配置文件 |
/etc/apache2/sites-available | 虚拟主机配置文件夹(可用的) |
/etc/apache2/sites-enabled | 虚拟主机配置文件夹(正在使用的) |
/etc/apache2/ports.conf | 端口配置文件 |
/etc/apache2/envvars | apache环境变量 |
/etc/apache2/mods-available | 模块文件夹(可用的) |
/etc/apache2/mods-enabled | 模块文件(正在使用的) |
2.命令
systemctl start apache2 | 启动服务 |
---|---|
systemctl stop apache2 | 停止服务 |
systemctl restart apache2 | 重启服务 |
systemctl status apache2 | 查看服务状态 |
systemctl enable apache2 | 设置开机自启 |
apache2 -t | 检查配置文件语法合规性 |
a2enmod ssl | 加载模块 |
3.常用配置项
- 虚拟主机
#自定义虚拟主机的IP和端口
<VirtualHost *:80>
#虚拟主机名,访问网站的域名
ServerName www.uos.com
#证书文件
SSLCertificateFile /etc/apache2/ssl/uos.pem
SSLCertificateKeyFile /etc/apache2/ssl/uos.key
#网站别名
ServerAlias ftp.uos.com mail.uos.com
#管理员邮箱
ServerAdmin uos@pxb.com
#网站根目录
DocumentRoot /var/www/html
#URL别名
Alias /test /var/www/html1
</VirtualHost>
- 目录权限
<Directory />
#允许使用软链接
Options FollowSymLinks
#忽略.htaccess 文件
AllowOverride None
#访问控制策略的应用顺序
Order allow,deny
#禁止任何人访问此区域
Allow from all
</Directory>
三、实验
1.基于端口的虚拟主机
vim /etc/apache2/sites-enabled/a.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# 如果指定其他端口,需要配置Listen
Listen 8080
<VirtualHost *:8080>
DocumentRoot /var/www/testweb
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
2.基于域名的虚拟主机
vim /etc/apache2/sites-enabled/a.conf
<VirtualHost *:80>
ServerName www.baidu.com
DocumentRoot /var/www/baidu
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName www.qq.com
DocumentRoot /var/www/qq
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
客户端访问需要能够解析域名
3.基于IP的虚拟主机
<VirtualHost 192.168.149.200:80>
DocumentRoot /var/www/baidu
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost 192.168.149.201:80>
DocumentRoot /var/www/qq
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost
4.cgi(调用shell、perl脚本)
shell、perl脚本配置
<VirtualHost *:80>
DocumentRoot /var/www/html
ScriptAlias /jiaoben/ /var/www/cgi-bin/ #配置cgi脚本别名
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
启用cgi模块
a2enmod cgi
脚本编写
# 创建目录
mkdir -p /var/www/cgi-bin
# 编写测试脚本
vim /var/www/cgi-bin/a.sh
#!/bin/bash
echo -en "Content-Type: text/html; charset=UTF-8\n\n";
date +%c
# 赋权
chmod a+x /var/www/cgi-bin/a.sh
测试
# 重启服务
systemctl restart apache2
# 测试
curl 127.0.0.1/jiaoben/a.sh
5.wsgi(调用python脚本)
安装wsgi模块
# 安装
apt search wsgi |grep apache
apt install libapache2-mod-wsgi -y
# 启用wsgi模块
a2enmod wsgi
配置
<VirtualHost *:80>
DocumentRoot /var/www/html
WSGIScriptAlias /python/ /var/www/wsgi/ #配置wsgi脚本别名
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
编写测试脚本
# 创建目录
mkdir -p /var/www/wsgi
# 编写测试脚本
vim /var/www/wsgi/test.py
import time
def application (environ, start_response):
response_body = 'UNIX EPOCH time is now: %s\n' % time.time()
status = '200 OK'
response_headers = [('Content-Type', 'text/plain'),('Content-Length', '1'),('Content-Length', str(len(response_body)))]
start_response(status, response_headers)
return [response_body]
重启测试
# 重启服务
systemctl restart apache2
# 测试
curl 127.0.0.1/python/a.py
6.SSL配置
生成自签名证书
# 创建证书目录
mkdir -p /etc/apache2/ssl
# 生成key文件
openssl genrsa > uos.key
# 生成自签名证书
openssl req -new -x509 -key uos.key > uos.pem
# 将证书拷贝到证书目录
cp -arp uos* /etc/apache2/ssl
编辑配置文件
# 拷贝模板配置到sites-enable/下
cp -arp /etc/apache2/sites-available /etc/apache2/sites-enable/ssl.conf
# 编辑配置文件
vim /etc/apache2/sites-enable/ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot /var/www/html
SSLCertificateFile /etc/apache2/ssl/uos.pem
SSLCertificateKeyFile /etc/apache2/ssl/uos.key
</VirtualHost>
</IfModule>
重启测试
# 重启
systemctl restart apache2
# 浏览器测试
https://192.168.149.139
7.url别名
Web网站别名配置是被经常使用的一个特性。这个功能实际上是为站点URI定义一个路径映射关系。
举例:如希望将访问http://192.168.149.139/test 映射到/uos ,可在主配置文件或虚拟主机配置文件中添加
# 创建测试网页
mkdir -p /uos
echo "11111111111111" > /ous/index.html
echo "22222222222222" > /uos/index2.html
# 添加别名
vim /etc/apache2/apache2.conf
alias /test /uos
<Directory /uos/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
重启测试
# 重启
systemctl restart apache2
# 浏览器测试
https://192.168.149.139/test
https://192.168.149.139/test/index2.html
8.访问权限设置
- 黑名单模式,不要写Allow from all,否则黑名单会失效
<Directory /uos/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
Order deny,allow
Deny from 192.168.149.1
</Directory>
- 白名单模式,不要写Deny from all,否则白名单会失效
<Directory /uos/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
Order allow,deny
Allow from 192.168.149.1
</Directory>
9.LAMP搭建
- 安装
# 记不住包名可以记住以下特点
1.基础包apache2,php-fpm,mariadb-server
2.扩展包apache对接php,通过apt search php |grep apache 获取包名
3.扩展包php对接mysql,通过apt search mysql | grep php 获取包名
apt install php-fpm mariadb-server apache2 libapache2-mod-php7.3 php7.3-mysql
- 编写测试文件
vim /var/www/html/index.php
<?php
phpinfo();
?>
- 测试
http://192.168.149.139/index.php
10.用户认证
- 在虚拟主机中加入配置
必须在虚拟主机中添加目录配置。否则不生效。
vim /etc/apache2/sites-enable/1.conf
<Virtualhost *:80>
DocumentRoot /uos
<Directory /uos>
AuthType Baisc
AuthName "Auth"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</Virtualhost>
- 添加认证的用户
# 首次添加使用-c创新文件
htpasswd -c /etc/apache2/.htpasswd tanqing
# 再次添加其他用户不要使用-c,否则会覆盖文件内容
htpasswd /etc/apache2/.htpasswd zhangsan
- 重启测试
# 重启
systemctl restart apache2
# 浏览器测试
https://192.168.149.139