Apache
当时的实训内容,Apache复刻,操作主机为CentOS7
1. Apache环境依赖
- 安装 apr
- 安装 apr-util
- 安装apr-iconv
环境:
#gcc编译环境
yum -y install pcre-devel libxml2 expat-devel gcc-*
1.1 apr
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的。
# 下载apr包
wget https://dlcdn.apache.org//apr/apr-1.7.0.tar.gz -- nocheck-certificate
# 解压
tar -zxvf apr-1.7.0.tar.gz
cd apr-1.7.0/
# 检查,只要没有 error 即可
./configure --prefix=/usr/local/apr
# 编译
make && make install
1.2 apr-util
Apache APR的数据结构和实用程序
# 下载apr-util包
wget https://dlcdn.apache.org//apr/apr-util-1.6.1.tar.gz -- no-check-certificate
# 解压
tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1/
# 检查,只要没有 error 即可
./configure --prefix=/usr/local/apr-util -- with-apr=/usr/local/apr/
# 编译
make && make install
1.3 ARP-iconv
APR iconv提供了一个构建在APR之上的可移植iconv()实现。
例如,Windows平台需要APR iconv来启用APR util库的apr_u xlate功能。
# 下载
wget https://dlcdn.apache.org//apr/apr-iconv-1.2.2.tar.gz -- no-check-certificate
# 解压
tar -zxvf apr-iconv-1.2.2.tar.gz
cd apr-iconv-1.2.2/
# 检查,只要没有 error 即可
./configure --prefix=/usr/local/apr-iconv -- with-apr=/usr/local/apr
# make && make install
make && make install
# 确认文件完整
ls /usr/local/
apr apr-util etc include lib64 python3 share apr-iconv bin games lib libexec sbin src
2. 安装Apache
wget https://dlcdn.apache.org//httpd/httpd-2.4.51.tar.gz -- no-check-certificate
tar -zxvf httpd-2.4.51.tar.gz
cd httpd-2.4.51/
# 判断编译文件是否完整,执行结束后,没有出现error则完整
./configure --prefix=/usr/local/apache --enablempms-shared=all --with-mpm=event --with-apr=/usr/local/apr --with-aprutil=/usr/local/apr-util --enable-so --enable-remoteip --enable-proxy --enableproxy-fcgi --enable-proxy-uwsgi --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-cache --enable-file-cache -- enable-mem-cache --enable-disk-cache --enable-static-support --enable-static-ab --disable-userdir --enable-nonportable-atomics --disable-ipv6 --with-sendfile
ps:这里我报了个错、error: mod_deflate has been requested but can not be built due to prerequisite failures
解决:
yum install zlib-devel
查看文件路径分布
yum -y install tree
tree -L 1 /usr/local/apache/
├── bin 二进制命令
├── build
├── cgi-bin cgi 脚本目录
├── conf 配置文件目录
├── error 错误记录
├── htdocs 默认网站根目录
├── icons 小图标
├── include 一些C语言文件
├── logs 日志目录
├── man 帮助手册
├── manual 在线手册
└── modules 存放apache运行需要的模块
3. 启动Apache
关闭防火墙与SELinux
systemctl stop firewalld.service
setenforce 0
# 测试Apache
./apachectl -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK
# 启动Apache
./apachectl
# 测试服务
netstat -luntp | grep httpd
tcp6 0 0 :::80 :::* LISTEN
67935/httpd
# 关闭服务
yum search killall
yum -y install psmisc.x86_64
killall httpd
此时,如果前面没任何错误,则能够直接访问默认页面
# 文本测试
yum -y install elinks
elinks http://localhost
4. 处理警告
cd /usr/local/apache/conf/
vim httpd.conf
../bin/apachectl
vim httpd.conf
5. 虚拟主机
虚拟主机应用场景:一个WEB服务器同时发布多个WEB站点
- 基于 IP 地址
- 基于监听端口
- 基于域名
5.1 基于ip
grep "Include" /usr/local/apache/conf/httpd.conf
# 去除本行的注释
#Include conf/extra/httpd-vhosts.conf
# 打开apache主配文件
vim /usr/local/apache/conf/httpd.conf
(1)服务器多个ip
因为我用的是虚拟机,所以添加一张新网卡,虚拟机->设置->增加网络适配器
新增后,应该有两张网卡
dhclient
ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.241.134 netmask 255.255.255.0 broadcast 192.168.241.255
eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.241.158 netmask 255.255.255.0 broadcast 192.168.241.255
(2)创建两个web站点web1、web2
[root@localhost ~]# mkdir /usr/local/apache/htdocs/web{1..2}
(3)生成两个测试页面
echo qiye > /usr/local/apache/htdocs/web1/index.html
echo qiye_isgood> /usr/local/apache/htdocs/web2/index.html
(4)设置子配置文件
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
ip地址和DocumentRoot都要改
(5)重启Apache
# 测试apache
/usr/local/apache/bin/apachectl -t
Syntax OK
# 先关了apache进程,在开启apache
killall httpd
/usr/local/apache/bin/apachectl
(6)测试
[root@localhost ~] elinks http://192.168.241.134 -dump
qiye
Segmentation fault (core dumped)
[root@localhost ~] elinks http://192.168.241.158 -dump
qiye_isgood!
Segmentation fault (core dumped)
成功~~
5.2 基于端口
移除基于ip的配置
(1)修改子配置文件
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
(2)重启服务
/usr/local/apache/bin/apachectl -t
Syntax OK
killall httpd
/usr/local/apache/bin/apachectl
(3)测试
[root@localhost ~]# elinks http://localhost:80 -dump
qiye
Segmentation fault (core dumped)
[root@localhost ~]# elinks http://localhost:81 -dump
qiye_isgood!
Segmentation fault (core dumped)
5.3 基于域名
(1)本机做服务端和客户端,当前 IP 为 192.168.241.134,修改本机的 hosts 文件
vim /etc/hosts
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
如下图配置:
(2)重启服务
/usr/local/apache/bin/apachectl -t
Syntax OK
killall httpd
/usr/local/apache/bin/apachectl
(3)测试
[root@localhost ~]# /usr/local/apache/bin/apachectl
httpd (pid 5786) already running
[root@localhost ~]# elinks http://qiye.web1.com -dump
qiye
Segmentation fault (core dumped)
[root@localhost ~]# elinks http://qiye.web2.com -dump
qiye_isgood!
Segmentation fault (core dumped)
成功~~