Apache 构建虚拟web主机 与 日志分隔
Posted 我一个月改一次名
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache 构建虚拟web主机 与 日志分隔相关的知识,希望对你有一定的参考价值。
目录
https://blog.csdn.net/weixin_51326240/article/details/112280627?spm=1001.2014.3001.5501
前言
LAMP的缺点:默认情况下,一台服务器只能运行一个web站点。
通过同一台服务器,通过不同域名访问不同的虚拟站点。
一、构建虚拟web主机
- 虚拟web主机指的是 在同一台服务器中运行多个web站点,其中每一个站点实际上并不独立占用整个服务器,因此被称为 “虚拟” web主机。
- 通过虚拟web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。
- 使用 httpd 服务可以非常方便地构建虚拟主机服务器,只需要运行一个 httpd 服务就能够同时支撑大量的web站点。
- httpd 服务支持的虚拟主机类型包括三种:基于域名、基于IP地址 和 基于端口
1.1 基于域名
为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的。
基于域名工作中使用最为普遍。
例如,www.lisi.com 和 www.zhangsan.com 站点的 IP地址都是 192.168.31.101。
1.2 基于IP地址
- 为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同。这种方式需要为服务器配备多个网络接口,因此应用并不是非常广泛。
1.3 基于端口
- 相同的IP地址,不同的端口
- 这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。
不管是那种虚拟主机类型,都需要更改 /usr/local/httpd/conf/extra/httpd-vhosts.conf
文件。
二、基于域名的虚拟主机
虚拟主机用的是自己的配置。
2.1 为虚拟主机提供域名解析
方法一:部署DNS域名解析服务器,用于提供域名解析;
方法二:在 /etc/hosts
文件中临时配置 域名与IP地址的映射关系。
echo "192.168.163.11 www.lisi.com" >> /etc/hosts
echo "192.168.163.11 www.zhangsan.com" >> /etc/hosts
这里我使用 写自动部署DNS的shell脚本 来添加DNS解析。
#!/bin/bash
#自动部署www.lisi.com 的部署脚本
read -p "请输入你的IP:" LAN_IP
mount /dev/sr0 /mnt &> /dev/null
rpm -ivh /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm &> /dev/null
cp /etc/named.conf{,.bak}
sed -i -e '13 s/127.0.0.1/any/' -e '19 s/localhost/any/' /etc/named.conf
cp /etc/named.rfc1912.zones{,.bak}
sed -i '24 a zone "lisi.com" IN {\\n\\ttype master;\\n\\tfile "lisi.com.zone";\\n\\tallow-update { none; };\\n};\\n' /etc/named.rfc1912.zones
cp -p /var/named/named.localhost /var/named/lisi.com.zone
sed -i -e '2 s/rname.invalid./admin/' -e '9 s/127.0.0.1/'$LAN_IP'/' -e '$a www IN A '$LAN_IP'' -e '10d' /var/named/lisi.com.zone
systemctl restart named
执行脚本
但这个时候只有 www.lisi.com 的解析,手动再加一个 www.zhangsan.com 的解析。
vim /etc/named.rfc1912.zones
2.2 为虚拟主机准备网页文档
创建站点目录和主页文件。
mkdir -p /var/www/html/lisi
mkdir -p /var/www/html/zhangsan
echo "<h1>www.lisi.com</h1>" > /var/www/html/lisi/index.html
echo "<h1>www.zhangsan.com</h1>" > /var/www/html/zhangsan/index.html
2.3 添加虚拟主机配置
这里要注意:不同的安装方法的文件路径不一样:
1 . 源码编译安装的虚拟主机配置文件路径:
/usr/local/httpd/conf/extra/httpd-vhosts.conf
2 . RPM或YUM安装的虚拟主机配置文件路径:
/etc/httpd/conf.d/vhosts.conf
本篇博客使用的是源码编译安装,因为编译安装可以自己选择版本。
#源码编译安装的虚拟主机配置文件路径
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
#虚拟站点区域模板
<VirtualHost *:80>
#设置管理员邮箱,这行可注释掉
ServerAdmin webmaster@dummy-host.example.com
#设置网站根目录
DocumentRoot "/usr/local/httpd/docs/dummy-host.example.com"
#设置Web站点的完整域名(主机名+域名)
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
#设置错误日志文件的路径,格式为 域名-error.log
ErrorLog "logs/dummy-host.example.com-error_log"
#设置自定义访问日志文件的路径
CustomLog "logs/dummy-host.example.com-access_log" common
#结束标签
</VirtualHost>
例如:
<VirtualHost 192.168.31.101:80>
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/var/www/html/lisi"
ServerName www.lisi.com
# ServerAlias www.dummy-host.example.com
ErrorLog "logs/lisi.com-error_log"
CustomLog "logs/lisi.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.31.101:80>
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/var/www/html/zhangsan"
ServerName www.zhangsan.com
ErrorLog "logs/zhangsan.com-error_log"
CustomLog "logs/zhangsan.com-access_log" common
</VirtualHost>
2.4 设置访问控制
这里和上面修改的是同一个配置文件。
#设置目录访问权限,不配置访问控制就访问不了,主配置文件httpd.conf 就有这块配置,直接拿过来用就行。
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
#设置目录访问权限
<Directory "/var/www/html">
#不启用任何的服务器特性
Options None
#不允许重写Apache默认配置
AllowOverride None
#允许所有主机访问
Require all granted
</Directory>
如果虚拟主机配置文件中没有添加这一块内容,则访问域名时,则会提示 网站拒绝显示此网页。
2.5 加载独立的配置文件
#源码编译安装的httpd服务主配置文件路径
vim /usr/local/httpd/conf/httpd.conf
#482行,取消注释,意味着加载独立的配置文件
Include conf/extra/httpd-vhosts.conf
#如果时用 RPM或YUM安装的httpd服务 主配置文件路径
vim /etc/httpd/conf/httpd.conf
#最后一行已默认开启此项
IncludeOptional conf.d/*.conf
systemctl restart httpd
释放虚拟主机注释
2.6 在客户机中访问虚拟web主机
echo "192.168.31.101 www.lisi.com" >> /etc/hosts
echo "192.168.31.101 www.zhangsan.com" >> /etc/hosts
http://www.lisi.com
http://www.zhangsan.com
用另一台主机访问,前提两台主机要在同一个网段内。
(如果 Windows 系统中没有执行 DNS 地址,则需要在 C:\\Windows\\System32\\drivers\\etc\\hosts 文件内手动添加 IP 与 域名对应关系)
能解析成功
成功
虚拟主机走的是自己的 vhost 配置文件,不是主配置文件。
附:vhost 配置文件参数补充
补充:httpd-vhosts.conf 文件里的指令选项
options指令解释:
- Options指令的主要作用是控制特定目录将启用哪些服务器特性。
- 可以在Apache服务配置文件的虚拟主机配置(VirtualHost)、特定目录配置(Directoty)以及.htaccess文件中使用
常用选项 | 作用 |
---|---|
None | 表示不启用任何的服务器特性 |
FollowSymLinks | 服务器允许在此目录中使用符号连接(软链接)。 |
Indexes | 如果输入的网址对应服务器上的一个文件目录,而此目录中又没有Apache配置文件中的DirectoryIndex指令指定的文件(例如:DirectoryIndex index.html index.php),则列出该目录下的所有文件 |
Multiviews | 如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如,在服务器站点的file文件夹下中存在名为hello.jpg和hello.html的两个文件,此时用户输入http://localhost/file/hello,如果在file文件夹下并没有hello子目录,那么服务器将会尝试在file目录夹下查找形如hello.*的文件,然后根据用户请求的具体情况返回最匹配要求的hello.jpg或者hello.html |
All | 表示除MultiViews之外的所有特性,这也是Options指令的默认设置 |
AllowOverride指令解析:
分布式隐含配置文件: .htaccess
- 提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含特定指令的文件,其中的指令作用于此目录及其所有子目录
- 当AllowOverride设置成None时,相应的配置目录下的.htaccess文件是不被读取的,即无法生效
当AllowOverride设置成All,每一次请求访问相应目录下的文件时,都会读取.htaccess文件的配置,意味着原Apache指令会被.htaccess文件中的指令重写 - 从性能和安全性考虑,一般都尽可能避免使用.htaccess文件, 任何希望放在. htaccess文件中的配置,都可放在主配置文件(httpd. conf) 的段中, 而且高效。因此AllowOverride属性一般都配置成None
地址限制策略
策略 | 解释 |
---|---|
Require all granted | 允许所有主机访问 |
Require all denied | 拒绝所有主机访问 |
Require local | 仅允许本地主机访问 |
Require [not] host < 主机名或域名列表> | 允许或拒绝指定主机或域名访问 |
Require [not] ip <IP地址或网段列表> | 允许或拒绝指定IP地址网络访问 |
三、基于IP地址的虚拟主机
- 每个虚拟 Web主机 各自使用 不同的IP地址,但是都通过同一台 httpd 服务器对外提供Web浏览服务。
- 使用这种方法,需要有大量的网络接口,这再实际应用中往往不太方便,所以基于IP地址的虚拟主机并不像基于域名的虚拟主机那样应用广泛。
本实验用虚拟网卡做实验。
3.1 配置虚拟网卡
#临时配置,重启失效
ifconfig ens33:0 192.168.31.201 netmask 255.255.255.0
3.2 添加虚拟主机配置
参照章节 2.3、2.4 不过IP地址不一样,一个是主机IP,一个是虚拟IP地址。
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
3.3 增加监听地址
vim /usr/local/httpd/conf/httpd.conf
#53行,插入下面内容
Listen 192.168.31.201:80
#重启服务
systemctl restart httpd
清除浏览器缓存之后就能通过IP 进行访问了
四、基于端口的虚拟主机
4.1 编辑虚拟主机配置
修改文件 vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
中的端口号信息
4.2 增加监听地址
vim /usr/local/httpd/conf/httpd.conf
#53行,插入下面内容
Listen 192.168.31.101:666
Listen 192.168.31.201:888
#重启服务
systemctl restart httpd
浏览器清除缓存重新加载
五、Apache 连接保持
连接保持就是支持 网站的长链接。
vim /usr/local/httpd/conf/extra/httpd-default.conf
KeepAlive on
#设置是否打开连接保持功能,后面接 0FF 表示关闭,接 ON 表示打开。
#可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能
MaxKeepAliveRequests 100
#用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接;
#最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素
KeepAliveTimeout 5
#设置来自同一个客户端一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源。
六、构建web虚拟目录与用户授权限制
目录别名测试
如果在 创建一个文件,可以通过路径后面加 /test 访问到
此时通过 修改 vim /etc/httpd.conf
文件,构建web虚拟目录。
也就是 vim /usr/local/httpd/conf/httpd.conf 文件。
可以发现,都原来的目录都是在默认目录 /usr/lcoal/httpd/htdocs/
下的文件,而虚拟目录则看配置中 Alias 中配置的路径。
6.1 创建用户认证数据文件
这里创建的用户是 需要验证的用户,和系统新建用户不一样。
cd /usr/local/httpd/bin
#-c选项表示新建用户数据文件,缺省时则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。
#只有第一次添加htpasswd用户需要用-c,第二次文件已经存在了就不用加-c了
./htpasswd -c /usr/local/httpd/user zhangsan
./htpasswd /usr/local/httpd/user lisi
cat /usr/local/httpd/user #确认用户数据文件
htpasswd 需输入两次密码确认
6.2 添加用户授权配置
vim /usr/local/httpd/user/httpd.conf
-----末行添加------
#设置虚拟目录的根目录,/test为虚拟目录名称
#即:访问 http://192.168.31.101/test 就是访问 http://192.168.31.101/var/www/html/file
Alias /test /var/www/html/file
#设置虚拟目录配置区域
<Directory "/var/www/html/file">
AuthName "请输入用户名和密码" #定义受保护的领域名称,会在认证对话框中显示
AuthType Basic #设置认证的类型,Basic表示基本认证
AuthUserFile /usr/local/httpd/user.pd #设置用于保存用户账号和密码的认证文件的路径及认证文件名
Require valid-user #开启用户认证,只有认证文件中的合法用户才能访问
#authgroupfile /usr/local/httpd/conf/group #设置用于保存组账号和密码的认证文件的路径
#Require user zhangsan #仅允许指定用户访问
#Require group zhangsan #仅允许指定组访问
</Directory>
6.3 验证用户访问权限
浏览器清缓存
成功输入账户名和密码后,访问成功,否则提示无授权。
七、Apache 日志分割
Apache 日志的路径在源码安装目录中,
但是日志是不断累积的,都放在一个文件中内容太多,也不好查问题,可以使用日志分隔,每天产生一个日志文件。
使用Apache自带 rotatelogs 分割工具,将Apache的日志进行按每天的日期自动分割。
默认错误日志文件位置是相对路径
vim /usr/local/httpd/conf/httpd.conf
#274行附近,修改;分割错误日志
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400"
#304行附近,修改;分割自定义访问日志
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined
#开头的|为管道符号。
#-l选项表示使用本地时间为时间基准。
#86400 秒表示1天,即每天生成一个新的日志文件。
#创建分割后的日志文件保存目录,之前没有这个httpd目录
mkdir /var/log/httpd
systemctl restart httpd
ls /var/log/httpd
#虚拟主机也可以进行分割,这里就不实验了,知道格式就好
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/benet.com-error_%F.log 86400"
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/benet.com- access_%F.log 86400" combined
重启httpd服务
修改完后,在浏览器中进行访问, /var/log/httpd/ 中就有生成的分隔日志文件
八、AWStats 日志分析系统
- AWStats是使用 Perl 语言开发的一款开源日志分析系统,它用来完成自动化的日志统计与分析工作
8.1 解压移动 Awstats 软件包
将安装 Awstats 所需软件包传到/opt目录下,并进行解压
cd /opt
tar zxvf awstats-7.6.tar.gz
mv /opt/awstats-7.6 /usr/local/awstats
8.2 为要统计的站点建立配置文件
cd /usr/local/awstats/tools/
./awstats_configure.pl
......
Config file path ('none' to skip web server setup):
#输入httpd服务主配置文件的路径
> /usr/local/httpd/conf/httpd.conf
Your web site,virtual server or profile name:
......
#输入要统计的站点域名
> www.duan.com
其它全部是y或者回车
如果想要重新绑定站点,把生成的这个文件删掉,重新配置以下生成即可。
【记得将 www.duan.com 进行DNS 配置。】
8.3 修改自动生成的awstats访问权限,加载CGI模块(Apache2.4以上版本需要加载CGI模块)
建立完 awstats 后,会在 /etc/httpd.conf 中尾部自动生成两块代码,需要修改其权限为允许访问。
vim /usr/local/httpd/conf/httpd.conf
#275行
ErrorLog "logs/error_log"
#304行
CustomLog "logs/access_log" combined
...
#143行,命令模式下143G
Apache配置与应用