1.httpd简介
httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中做为服务运行。
2.httpd版本
主要介绍httpd的两大版本:
httpd-2.2
httpd-2.4
3.httpd特性
- httpd-2.2 特性:
事先创建进程
按需维持适当的进程
模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块
支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等
支持https协议(通过mod_ ssI模块实现)
支持用户认证
支持基于IP或域名的ACL访问控制机制
支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和支持URL重写
支持MPM (Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、 单进程多线程、多进程、多进程单线程、多进程多线程) - httpd-2.4 特性:
MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载
支持event MPM, event MPM模块生产环境可用
支持异步读写
支持每个模块及每个目录分别使用各自的日志级别
每个请求相关的专业配置,使用来配置
增强版的表达式分析器
支持毫秒级的keepalive timeout
基于FQDN的虚拟主机不再需要Name Virtual Host指令
支持用户自定义变量
支持新的指令(Allow Override List)
降低对内存的消耗
4.httpd基础
4.1httpd自带的工具
工具 | 功能 |
---|---|
htpasswd | basic 认证基于文件实现,用到的账户密码生成工具 |
apachectl | httpd自带的服务控制脚本,支持start,stop,restart |
apxs | 由httpd-devel 包提供的,扩展httpd使用第三方模块的工具 |
rotatelogs | 日志滚动工具 |
suexec | 访问某些有特殊权限配置的资源时,临时切换至指定的用户运行的工具 |
ab | apache benchmark ,httpd的压力测试工具 |
4.2web相关的命令
curl是基于URL语法在命令行方式下的传输工具,它支持FTP,FTPS,HTTP,HTTPS等协议
curl 支持的功能:
·https 认证
·http 的POST/PUT 等方法
·ftp 上传
·kerberos 认证
·http 上传
·代理服务器
·cookies
·用户名/密码认证
·下载文件断点传续
·socks5 代理服务器
·通过http 代理服务器上传文件到ftp服务器
语法
//语法:curl [option] […]
常用的option:
-A……//设置用户代理发送给服务器
-basic……//使用Http 基本认证
–tcp-nodelay …… //使用TCP_NODELAY选项
-e …… //来源网址
–cacert ……//CA证书
–compressed ……//要求返回时压缩格式
-H ……//自定义请求首部信息传递服务器
-I ……//只显示响应报文首部信息
–limit-rate ……//设置传输速度
-o……//把输出写到文件中
httpd命令
-l……//查看静态编译模块,列出核心中编译了那些模块
-M……//输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块
-v……//显示httpd版本,然后退出
-V……//显示httpd和apr/apr-util的版本和编译参数,然后退出
-X……//以调试模式运行httpd
-t……//检查配置文件是否有错误
5.编译安装
//关闭防火墙与SELINUX
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0
**//安装前请确保本地仓库或网络源有一个可以用**
**//安装开发环境**
[root@localhost ~]# yum groupinstall "Development Tools"
……安装过程略
[root@localhost ~]# groupadd -r apache
[root@localhost ~]# useradd -r -g apache apache
[root@localhost ~]# yum -y install openssl-devel pcre-devel expat-devel libtool
……安装过程略
**//下面下载安装包请确保电脑有网(如果有下载好的安装包可直接上传即可。)**
**//下载并安装apr-1.4+和apr-util-1.4+**
[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.5.tar.gz
[root@localhost src]# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
[root@localhost src]# ls
apr-1.6.5.tar.bz2 apr-util-1.6.1.tar.bz2 debug kernels
[root@localhost src]# tar xf apr-1.6.5.tar.bz2
[root@localhost src]# tar xf apr-util-1.6.1.tar.bz2
[root@localhost src]# ls
apr-1.6.5 apr-1.6.5.tar.bz2 apr-util-1.6.1 apr-util-1.6.1.tar.bz2 debug kernels
[root@localhost src]# cd apr-1.6.5
[root@localhost apr-1.6.5]# vim configure
........
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile" //将此行添加注释
.........
[root@localhost apr-1.6.5]# ./configure --prefix=/usr/local/apr
……配置过程略
[root@localhost apr-1.6.5]# make && make install
……编译安装过程略
[root@localhost apr-1.6.5]# cd /usr/src/apr-util-1.6.1
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
……配置过程略
[root@localhost apr-util-1.6.1]# make && make install
……编译安装过程略
**//下载httpd(如有下载完成的安装包可直接上传)**
[root@localhost ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.38 .tar.bz2
……下载过程略
[root@localhost ~]# ls
httpd-2.4.38.tar.bz2
[root@localhost ~]# tar xf httpd-2.4.38.tar.bz2
[root@localhost ~]# ls
httpd-2.4.38.tar.bz2 httpd-2.4.38
[root@localhost ~]# cd httpd-2.4.38
[root@localhost httpd-2.4.38]#./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
……配置过程略
[root@localhost httpd-2.4.37]# make && make install
……编译安装过程略
**//创建软连接**
[root@localhost ~]# echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/httpd.sh
[root@localhost ~]# source /etc/profile.d/httpd.sh
[root@localhost ~]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@localhost ~]# echo 'MANPATH /usr/local/apache/man' >> /etc/man.config
**//取消ServerName前面的注释**
[root@localhost ~]# sed -i '/#ServerName/s/#//g' /etc/httpd24/httpd.conf
**//启动服务(80端口为httpd服务端口)**
[root@localhost ~]# apachectl start
[root@server ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::81 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::* :::*
编辑虚拟主机
[root@localhost ~]# vi /etc/httpd24/httpd.conf
文件最后一行添加下面内容
<VirtualHost *:80> 虚拟主机配置起始
DocumentRoot "/usr/local/apache/htdocs/" 虚拟主机发布目录
ServerName yang.example.com 虚拟主机完整域名
ErrorLog "logs/11-error_log" 错误日志路径以及文件名
CustomLog "logs/11-access_log" common 访问日志路径及文件名
</VirtualHost> 虚拟主机配置结束
配置Apache页面
[root@localhost ~]# cd /usr/local/apache/htdocs/
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# echo hello world >index.html
检查语法
[root@localhost ~]# apachectl -t
Syntax OK
重启服务
[root@localhost ~]# apachectl restart
访问页面测试(用ip地址访问)