Apache网站服务基础
Apache HTTP server 是广泛应用的Web应用之一
Apache简介
Apache HTTP server 是开源软件项目的杰出代表,基于标准的HTTP网络协议提供网页浏览器,Apache服务器可以运行在Linux,UNIX,Windows等多种操作系统平台中。
Apache的主要特点
开放源代码 跨平台应用 支持各种Web编程语言:Apache服务器可支持的网页编程语言包括Perl,PHP,PythonJava
等,甚至微软的ASP技术也可以在Apache服务器中使用。
模块化设计:其他软件开发商可以编写标准的模块程序,从而添加Apache本身并不具有的其他功能。
运行非常稳定:Apache服务器可用于构建具有大负载访问量的Web站点。
良好的安全性:Apache服务器具有相对较好的安全性,Apache的维护团队会及时对已发现的漏洞提供修补程序,为Apache的所有使用者提供
尽可能安全的服务器程序。
安装httpd服务器
安装apache的库和头文件
[root@localhost ~]# yum -y install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre
源码编译及安装
源码编译安装httpd服务的过程主要包含解包,配置,编译及安装
[root@localhost media]# tar zxf httpd-2.4.25.tar.gz -C /usr/src/
[root@localhost media]# cd /usr/src/httpd-2.4.25/
配置
根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径,启用字符集支持等。若要获取可用的各种配置选项及其含义,可以执行"./configure --help"命令,其中"./"表示当前目录
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so--enable-rewrite --enable-charset-lite --enable-cgi
//选项含义
–prefix 指定httpd服务程序的安装目录 –enable-so 启用动态加载模块支持,使httpd具备进一步扩展功能的能力
–enable-rewrite 启用网页地址重写,用于网站优化及目录迁移维护 –
enable-charset-lite 启动字符集支持,以便支持使用各种字符集编码的网页
–enable-cgi 启用CGI脚本程序支持,便于扩展网站的应用访问能力
编译及安装
[root@localhost httpd-2.4.25]# make && make install
确认安装结果
由于指定的安装目录为/usr/local/httpd,因此httpd服务的各种程序,模块,帮助文件等都将复制到此目录下
[root@localhost httpd-2.4.25]# ls /usr/local/httpd/
bin cgi-bin error icons logs manual
build conf htdocs include man modules
主要子目录的用途:
/usr/local/httpd/bin 存放httpd服务各种执行程序文件,主程序httpd、服务控制工具apachectl等
/usr/local/httpd/cgi-bin 存放各种CGI程序文件
/usr/local/httpd/logs 存放httpd服务的日志文件
/usr/local/httpd/conf 存放httpd服务的各种配置文件,包括主配置文件httpd.conf
/usr/local/httpd/htdocs 存放网页文档,包括首页文件index.html等
/usr/loca/httpd/modules 存放httpd服务的各种模块文件
优化执行路径
通过源码编译安装的httpd服务,程序路径并不在默认的搜索路径中,为了使服务在使用时更方便,可以为相关程序添加符号链接
[root@localhost named]# ln -s /usr/local/httpd/bin/* /usr/local/bin
[root@localhost named]# ls -l /usr/local/bin/httpd /usr/local/bin/apachectl
lrwxrwxrwx. 1 root root 30 6月 4 10:48 /usr/local/bin/apachectl -> /usr/local/httpd/bin/apachectl
lrwxrwxrwx. 1 root root 26 6月 4 10:48 /usr/local/bin/httpd -> /usr/local/httpd/bin/httpd
[root@localhost named]# httpd -v
Server version: Apache/2.4.25 (Unix)
Server built: Jun 4 2020 08:25:55
部署网页文档
[root@localhost ~]# cat /usr/local/httpd/htdocs/index.html
<html><body><h1>It works!</h1></body></html>
启动apachect
[root@localhost ~]# /usr/local/httpd/bin/apachectl start
# 客户机访问web站点
查看web站点访问情况
httpd服务器使用了两种类型的日志:访问日志和错误日志。这两种日志的文件名分别为access_log和error_log均位于/usr/local/httpd/logs目录下
[root@localhost ~]# tail /usr/local/httpd/logs/access_log
192.168.1.1 - - [04/Jun/2020:10:27:32 +0800] "GET / HTTP/1.1" 200 45
192.168.1.1 - - [04/Jun/2020:10:27:32 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.1.1 - - [04/Jun/2020:10:55:48 +0800] "GET / HTTP/1.1" 304 -
错误日志文件
可以排查服务器运行故障提供参考依据。错误日志文件中的每行对应一条错误记录
[root@localhost ~]# tail /usr/local/httpd/logs/error_log
[Thu Jun 04 09:04:54.289159 2020] [mpm_worker:notice] [pid 22091:tid 139675075962752] AH00292: Apache/2.4.25 (Unix) configured -- resuming normal operations
[Thu Jun 04 09:04:54.289590 2020] [core:notice] [pid 22091:tid 139675075962752] AH00094: Command line: '/usr/local/httpd/bin/httpd'
客户机地址限制
通过Require配置项,可以根据主机的主机名或ip地址来决定是否允许客户端访问
require all granted:表示允许所有主机访问 require all denied:表示拒绝所有主机访问
require local: 表示仅允许本地主机访问 require [not] host
<主机名或域名列表>:表示允许或拒绝指定主机或域名访问 require [not] ip
<ip地址或网段列表>:表示允许或拒绝指定ip地址或网段访问
通常情况下,网站服务器是对所有客户机开放的,网页文档目录并未做任何限制,因此使用的是"require all granted" 策略,表示允许从任何客户机访问
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs">
Require all granted
</Directory>
定义限制策略时,多个不带not的require配置语句之间是或的关系,即任意一条require配置语句满足条件均可以访问。若既出现了不带not的require配置语句,又出现了带not的require配置语句,则语句之间是与的关系,即同时满足所有require配置语句才可以访问
需要使用"仅允许"的限制策略时,应使用require配置语句明确设置允许策略,只允许一部分主机访问
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf ........... // 省略部分内容Require ip 192.168.1.1 //只允许1.1主机访问
</Directory>
[root@localhost ~]# /usr/local/bin/apachectl restart //重启服务
反之,需要使用’仅拒绝’的限制策略时,灵活使用require与require not 配置设置拒绝策略,只禁止一部分主机访问。
<Directory "/usr/local/httpd/htdocs">....... //省略部分内容<requireall>Require all grantedrequire not ip 192.168.1.1 仅拒绝1.1访问</requireall>
</Directory>
用户授权限制
创建用户认证数据文件
httpd的基本认证通过校验用户名,密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
使用htpasswd工具时,必须指定用户数据文件的位置,添加 -c 选项表示新建立此文件。
[root@localhost /]# cd /usr/local/httpd/
[root@localhost httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd hran
New password: //根据提示设置密码
Re-type new password:
Adding password for user hran
[root@localhost httpd]# cat /usr/local/httpd/conf/.awspwd //确认用户数据文件
hran:$apr1$XDZb5474$YN.ka2OGakVv4Ka/U.CvH0
省略 -c 选项,则表示指定的用户数据文件已经存在,用于添加的用户或修改现有用户的密码。
[root@localhost httpd]# bin/htpasswd /usr/local/httpd/conf/.awspwd hran
New password:
Re-type new password:
Updating password for user hran
[root@localhost httpd]# cat /usr/local/httpd/conf/.awspwd //确认用户数据文件
hran:$apr1$nBUXqSeq$pyThOlVeuW5rv8XPRPSGo/
添加用户授权配置
[root@localhost ~]#vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs">
...... //省略部分内容authname "documentroot"authtype basicauthuserfile /usr/local/httpd/conf/.awspwdrequire valid-user<requireall>Require all denied</requireall>
</Directory>
[root@localhost ~]# /usr/local/httpd/bin/apachectl restart //重启服务配置内容生效
验证用户访问授权
当再次访问网站的默认首页时,浏览器会首先弹出认证对话框,只有输入正确的用户名和密码后才能查看网页,否则拒绝访问。
构建虚拟web主机
虚拟web主机指的是在同一台服务器中运行多个web站点,其中的每个站点实际上并不独立占用整个服务器,因此被称为 ‘虚拟’ web主机。
httpd支持的虚拟主机类型有三种:
基于域名: 每个虚拟主机使用不同的域名,但是对应的ip地址是相同的
基于ip地址 :每个虚拟主机使用不同的域名,且对应的ip地址也不相同。
基于端口:不适用域名,IP地址。而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。
基于域名的虚拟主机
为虚拟主机提供域名解析
[root@localhost ~]# vim /etc/named.conf
...... //省略部分内容
zone "benet.com" IN {type master;file "benet.com.zone";
};
zone "hran.com" IN {type master;file "hran.com.zone";
};
[root@localhost ~]# cat /var/named/benet.com.zone
$ttl 86400
@ in soa benet.com. admin.benet.com. (201808293h15m1w1d
)in ns ns1.benet.com.
ns1 in a 192.168.1.11
www in a 192.168.1.11[root@localhost ~]# cat /var/named/hran.com.zone
$ttl 86400
@ in soa hran.com. admin.hran.com. (201808293h15m1w1d
)in ns ns1.hran.com.
ns1 in a 192.168.1.11
www in a 192.168.1.11
为虚拟主机准备网页文档
[root@localhost ~]# mkdir -p /var/www/html/benetcom
[root@localhost ~]# mkdir -p /var/www/html/hrancom
[root@localhost ~]# echo "<h1>www.benet.com</h1>" > /var/www/html/benetcom/index.html
[root@localhost ~]# echo "<h1>www.hran.com</h1>" > /var/www/html/hrancom/index.html
添加虚拟主机配置
[root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf ..... //省略部分内容 //创建独立的配置文件
<VirtualHost *:80> //设置benet虚拟站点区域ServerAdmin webmaster@hran.comDocumentRoot "/var/www/html/benetcom" //正常访问的网站目录ServerName www.benet.comErrorLog "logs/www.benet.com.error_log"CustomLog "logs/www.benet.com.access_log" common<directory "/var/www/html"> //设置目录访问权限require all granted</directory>
</VirtualHost>
<VirtualHost *:80> //设置hran虚拟站点区域ServerAdmin webmaster@hran.comDocumentRoot "/var/www/html/hrancom"ServerName www.hran.comErrorLog "logs/www.hran.com.error_log"CustomLog "logs/www.hran.com.access_log" common<directory "/var/www/html">require all granted</directory>
</VirtualHost>
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
.......
Include conf/extra/httpd-vhosts.conf //去#号 加载独立的配置文件
[root@localhost ~]# /usr/local/httpd/bin/apachectl restart //重启服务使新配置生效
在客户机中访问虚拟web主机
基于ip地址的虚拟主机
[root@localhost hrancom]# ifconfig ens33:0 192.168.1.100 //添加一个临时ip
[root@localhost hrancom]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.1.11:80>ServerAdmin webmaster@benet.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com.error_log"CustomLog "logs/www.benet.com.access_log" common<directory "/var/www/html">require all granted</directory>
</VirtualHost><VirtualHost 192.168.1.100:80>ServerAdmin webmaster@hbenet.comDocumentRoot "/var/www/html/hrancom"ServerName www.hran.comErrorLog "logs/www.hran.com.error_log"CustomLog "logs/www.hran.com.access_log" common<directory "/var/www/html">require all granted</directory>
</VirtualHost>
[root@localhost hrancom]# /usr/local/httpd/bin/apachectl restart
验证:
基于端口的虚拟主机
[root@localhost hrancom]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.1.11:80>
......省略部分内容
</VirtualHost>
<VirtualHost 192.168.1.100:8353>
......省略部分内容
</VirtualHost>
Listen 80 //监听80
Listen 8353 //监听8353
[root@localhost hrancom]# /usr/local/httpd/bin/apachectl restart
验证