1. httpd简介
httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行。
2. httpd版本
本文主要介绍httpd的两大版本,httpd-2.2和httpd-2.4。
- CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包
- CentOS7系列的版本默认提供的是httpd-2.4版本的rpm包
3. httpd基础
3.1 httpd自带的工具程序
工具 | 功能 |
---|---|
htpasswd | basic认证基于文件实现时,用到的帐号密码生成工具 |
apachectl | httpd自带的服务控制脚本,支持start,stop,restart |
apxs | 由httpd-devel包提供的,扩展httpd使用第三方模块的工具 |
rotatelogs | 日志滚动工具 |
suexec | 访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具 |
ab | apache benchmark,httpd的压力测试工具 |
3.2 rpm包安装的httpd程序环境
文件/目录 | 对应的功能 |
---|---|
/var/log/httpd/access.log | 访问日志 |
/var/log/httpd/error_log | 错误日志 |
/var/www/html/ | 站点文档目录 |
/usr/lib64/httpd/modules/ | 模块文件路径 |
/etc/httpd/conf/httpd.conf | 主配置文件 |
/etc/httpd/conf.modules.d/*.conf | 模块配置文件 |
/etc/httpd/conf.d/*.conf | 辅助配置文件 |
3.3 web相关的命令
3.3.1 curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。
curl支持以下功能:
https认证
http的POST/PUT等方法
ftp上传
kerberos认证
http上传
代理服务器
cookies
用户名/密码认证
下载文件断点续传
socks5代理服务器
通过http代理服务器上传文件到ftp服务器
curl -o [下载的位置以及文件名] 下载地址
3.3.2 httpd命令
/语法:httpd [options]
//常用的options:
-l //查看静态编译的模块,列出核心中编译了哪些模块。 \
//它不会列出使用LoadModule指令动态加载的模块
-M //输出一个已经启用的模块列表,包括静态编译在服务 \
//器中的模块和作为DSO动态加载的模块
-v //显示httpd的版本,然后退出
-V //显示httpd和apr/apr-util的版本和编译参数,然后退出
-X //以调试模式运行httpd。仅启动一个工作进程,并且 \
//服务器不与控制台脱离
-t //检查配置文件是否有语法错误
4.编译安装httpd-2.4
4.1 访问控制法则:
法则 | 功能 |
---|---|
Require all granted | 允许所有主机访问 |
Require all deny | 拒绝所有主机访问 |
Require ip IPADDR | 授权指定来源地址的主机访问 |
Require not ip IPADDR | 拒绝指定来源地址的主机访问 |
Require host HOSTNAME | 授权指定来源主机名的主机访问 |
Require not host HOSTNAME | 拒绝指定来源主机名的主机访问 |
IPADDR的类型 | HOSTNAME的类型 |
---|---|
IP:192.168.1.1 Network/mask:192.168.1.0/255.255.255.0 Network/Length:192.168.1.0/24 Net:192.168 | FQDN:特定主机的全名 DOMAIN:指定域内的所有主机 |
注意:httpd-2.4版本默认是拒绝所有主机访问的,所以安装以后必须做显示授权访问
//安装开发环境
//先查看需要安装的开发环境
[root@2 ~]# yum group list
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Available Environment Groups:
Minimal Install
Infrastructure Server
File and Print Server
Basic Web Server
Virtualization Host
Server with GUI
Available Groups:
Compatibility Libraries
Console Internet Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Scientific Support
Security Tools
Smart Card Support
System Administration Tools
System Management
Done
//安装需要的开发环境
[root@2 ~]# yum -y groupinstall "Development Tools"
[root@2 ~]# yum -y install openssl-devel pcre-devel expat-devel libtoo
[root@2 ~]# groupadd -r apache
[root@2 ~]# useradd -r -M -s /sbin/nologin -g apache apache
//下载并安装apr和apr-util
//下载apr和apr-util
[root@2 src]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.5.tar.bz2 https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2 https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.37.tar.bz2
安装apr
[root@2 src]# tar xf apr-1.6.5.tar.bz2
[root@2 src]# cd apr-1.6.5
[root@2 apr-1.6.5]# vim configure
fgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile" //将此行加上注释,或者删除此行
[root@2 apr-1.6.5]# ./configure --prefix=/usr/local/ap
//编译和安装
[root@2 apr-1.6.5]# make && make install
安装apr-util
[root@2 src]# tar xf apr-util-1.6.1.tar.bz2
[root@2 src]# cd apr-util-1.6.1
[root@2 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
//编译和安装
[root@2 apr-util-1.6.1]# make && make install
//安装http
[root@2 src]# tar xf httpd-2.4.37.tar.bz2
[root@2 src]# cd httpd-2.4.37
[root@2 httpd-2.4.37]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --sysconfdir=/etc/httpd24 --with-mpm=prefork
//编译和安装
[root@2 httpd-2.4.37]# make && make install
//定义环境变量
[root@2 ~]# cd /etc/profile.d/
[root@2 profile.d]# vim apache.sh
[root@2 profile.d]# cat apache.sh
export PATH=/usr/local/apache/bin:$PATH
[root@2 profile.d]# . apache.sh
//开启80端口
在httpd的主配置文件进行修改,因为这是源码安装,所以主配置文件是/etc/httpd24/httpd.conf
5. 配置虚拟主机
5.1 相同IP不同端口
添加监听端口
[root@2 htdocs]# vim /etc/httpd24/httpd.conf
...
Listen 8080
....
<VirtualHost 192.168.23.132:80>
ServerName www.dsz.com
DocumentRoot "/usr/local/apache/htdocs/dsz"
ErrorLog "logs/dsz_error_log"
CustomLog "logs/dsz_access_log" combined
<Directory //usr/local/apache/htdocs/dsz>
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
# virtual host 2 # 虚拟主机2的配置
<VirtualHost 192.168.23.132:8080>
ServerName www.zml.com
DocumentRoot "//usr/local/apache/htdocs/zml"
ErrorLog "logs/zml_error_log"
CustomLog "logs/zml_access_log" combined
<Directory /usr/local/apache/htdocs/zml>
</Directory>
</VirtualHost>
//创建网页目录并修改属主属组
[root@2 htdocs]# chown -R apache.apache htdocs/
//在浏览器上进行测试
5.2 不同IP相同端口
//在服务端上添加一个ip
[root@2 ~]# ip addr add 192.168.23.200 dev ens32
[root@2 ~]# ip a
[root@2 htdocs]# vim /etc/httpd24/httpd.conf
<VirtualHost 192.168.23.132:80>
ServerName www.dsz.com
DocumentRoot "/usr/local/apache/htdocs/dsz"
ErrorLog "logs/dsz_error_log"
CustomLog "logs/dsz_access_log" combined
<Directory //usr/local/apache/htdocs/dsz>
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
# virtual host 2 # 虚拟主机2的配置
<VirtualHost 192.168.23.181:80>
ServerName www.zml.com
DocumentRoot "//usr/local/apache/htdocs/zml"
ErrorLog "logs/zml_error_log"
CustomLog "logs/zml_access_log" combined
<Directory /usr/local/apache/htdocs/zml>
</Directory>
</VirtualHost>
[root@2 htdocs]# ip addr add 192.168.23.200 dev ens32
[root@2 htdocs]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:80:44:2d brd ff:ff:ff:ff:ff:ff
inet 192.168.23.132/24 brd 192.168.23.255 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.23.200/32 scope global ens32
valid_lft forever preferred_lft forever
//在浏览器上测试
5.3 相同IP相同端口不同域名
[root@2 htdocs]# vim /etc/httpd24/httpd.conf
<VirtualHost 192.168.23.132:80>
ServerName www.dsz.com
DocumentRoot "/usr/local/apache/htdocs/dsz"
ErrorLog "logs/dsz_error_log"
CustomLog "logs/dsz_access_log" combined
<Directory //usr/local/apache/htdocs/dsz>
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
# virtual host 2 # 虚拟主机2的配置
<VirtualHost 192.168.23.132:80>
ServerName www.zml.com
DocumentRoot "//usr/local/apache/htdocs/zml"
ErrorLog "logs/zml_error_log"
CustomLog "logs/zml_access_log" combined
<Directory /usr/local/apache/htdocs/zml>
</Directory>
</VirtualHost>
//在客户机上验证
1.修改hosts文件
//在浏览器上测试