HTTP-Apache篇

HTTP-Apache篇

1. apache介绍和特点

1.1 apache特性

  • 高度模块化:core + modules
  • DSO:Dynamic Shared Object 动态加/卸载
  • MPM:multi-processing module 多路处理模块

1.2 apache功能

  • 虚拟主机:IP、Port、FQDN
  • CGI:Common Gateway Interface,通用网关接口
  • 反向代理
  • 负载均衡
  • 路径别名
  • 丰富的用户认证机制:basic,digest
  • 支持第三方模块

1.3 apache-httpd-2.4特性

  • MPM支持运行为DSO机制;以模块形式按需加载
  • event MPM生产环境可用
  • 异步读写机制
  • 支持每模块及每目录的单独日志级别定义
  • 每请求相关的专用配置
  • 增强版的表达式分析式
  • 毫秒级持久连接时长定义
  • 基于FQDN的虚拟主机不需要NameVirutalHost指令
  • 新指令
  • 支持用户自定义变量
  • 更低的内存消耗

2. MPM工作模式

2.1 prefork MPM:

  • prefork:预派生模式,多进程I/O模型,每个进程响应一个请求,CentOS7 默认模型
  • 一个主进程:生成和回收n个子进程,创建套接字,不响应请求
  • 多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求

img

prefork:一个主进程生成多个子进程,每个子进程有一个线程用来响应请求。子进程数可以设置

  • 优点:稳定
  • 缺点:慢,占用资源,不适用于高并发场景

2.2 worker MPM:

  • worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
  • 一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应
    请求:m*n

img

worker MPM:多进程,多线程混合模式,其中每个进程的线程是固定的,当线程不够用的时候回启动新的线程。

  • 优点:相比prefork 占用的内存较少,可以同时处理更多的请求
  • 缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。

2.3 event MPM:

事件驱动模型(worker模型的变种),CentOS8 默认模型

img

event模式也是多进程多线程的模式,和worker模式不同的是,event模式里每个进程会有一个监控线程来管理工作线程,当有一个真实请求时,监控线程会将请求传递给工作线程,而当来一个空请求时,监控线程不分配工作线程。

  • 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀
  • 缺点:缺点:没有线程安全控制

3. httpd相关文件

各个配置文件路径都是yum安装后的路径。

3.1 配置文件:

/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 子配置文件
/etc/httpd/conf.d/conf.modules.d/ 模块加载的配置文件

检查配置语法:httpd -t或者bin/apachectl -t

3.2 服务单元文件:

  • /usr/lib/systemd/system/httpd.service
  • 配置文件:/etc/sysconfig/httpd

3.3 服务控制和启动

  • systemctl enable|disable httpd.service
  • systemctl {start|stop|restart|status|reload} httpd.service

3.4模块文件路径:

  • /etc/httpd/modules
  • /usr/lib64/httpd/modules

3.5 主服务器程序文件:

/usr/sbin/httpd

3.6 主进程文件:

/etc/httpd/run/httpd.pid

3.7 日志文件目录:

/var/log/httpd

  • access_log: 访问日志
  • error_log:错误日志

4. apache安装

4.1 yum安装

yum install apache -y

4.2 编译安装

4.2.1 编译前说明

apache和别的app编译不太一样是因为,Apache在编译以前要安装APR

APR:Apache portable Run-time libraries,Apache可移植运行库,主要为上层的应用程序提供一个可以
跨越多操作系统平台使用的底层支持接口库

img

如图,各个app都是在通过操作系统的API接口进行开发的,操作系统的不同,API接口也会不同。而APR就相当于应用程序和系统API接口之间的层级,因为应用程序不直接接触操作系统,顾不用考虑API接口不同导致的问题

说明:安装httpd-2.4,依赖于apr-1.4+, apr-util-1.4+

4.2.2 安装依赖
[root@centos8 data]# yum -y install gcc make pcre-devel openssl-devel expat-devel

下载源代码并解压缩:

[root@centos8 data]# ll
total 8180
-rw-r--r-- 1 root root  872238 Dec  9 17:06 apr-1.7.0.tar.bz2
-rw-r--r-- 1 root root  428595 Dec  9 17:06 apr-util-1.6.1.tar.bz2
-rw-r--r-- 1 root root 7072373 Dec  9 17:05 httpd-2.4.41.tar.bz2
4.2.3 编译安装httpd的方法一
编译安装apr
[root@centos8 ~]# tar -xvf apr-1.7.0.tar.bz2
[root@centos8 ~]# cd apr-1.7.0/
[root@centos8 ~]# ./configure --prefix=/app/apr
[root@centos8 ~]# make && make install
编译安装apr-util
[root@centos8 data]# tar xvf apr-util-1.6.1.tar.bz2
[root@centos8 data]# cd apr-util-1.6.1/
[root@centos8 apr-util-1.6.1]# ./configure --prefix=/app/apr-util --with-apr=/app/apr
[root@centos8 apr-util-1.6.1]# make && make install
编译安装httpd-2.4
[root@centos8 data]# tar xf httpd-2.4.41.tar.bz2
[root@centos8 data]# cd httpd-2.4.41/
[root@centos8 httpd-2.4.41]#./configure --prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/app/apr/ \
--with-apr-util=/app/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
[root@centos8 httpd-2.4.41]# make -j 2 && make install

会有一大堆输出,每次执行完以后可以用echo $?来确认是否有报错

4.2.4 编译安装httpd-2.4方法二
[root@centos8 data]# tar xf apr-1.7.0.tar.bz2 
[root@centos8 data]# tar xf apr-util-1.6.1.tar.bz2 
[root@centos8 data]# tar xf httpd-2.4.41.tar.bz2
将apr 和apr-util源码与httpd 源码合并
[root@centos8 data]# mv apr-1.7.0 httpd-2.4.41/srclib/apr
[root@centos8 data]# mv apr-util-1.6.1 httpd-2.4.41/srclib/apr-util
[root@centos8 data]# ll httpd-2.4.41/srclib/
total 12
drwxr-xr-x 27 1001 1001 4096 Apr  2  2019 apr
drwxr-xr-x 20 1001 1001 4096 Oct 18  2017 apr-util
-rw-r--r--  1 root   40  121 Feb 11  2005 Makefile.in
[root@centos8 data]#
将三者一并编译并安装
[root@centos8 data]# cd httpd-2.4.41/
[root@centos8 httpd-2.4.41]# ls
ABOUT_APACHE     CMakeLists.txt  INSTALL         NWGNUmakefile
acinclude.m4     config.layout   InstallBin.dsp  os
Apache-apr2.dsw  configure       LAYOUT          README
Apache.dsw       configure.in    libhttpd.dep    README.cmake
apache_probes.d  docs            libhttpd.dsp    README.platforms
ap.d             emacs-style     libhttpd.mak    ROADMAP
build            httpd.dep       LICENSE         server
BuildAll.dsp     httpd.dsp       Makefile.in     srclib
BuildBin.dsp     httpd.mak       Makefile.win    support
buildconf        httpd.spec      modules         test
CHANGES          include         NOTICE          VERSIONING
[root@centos8 httpd-2.4.41]# ./configure \
--prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
[root@centos8 httpd-2.4.41]# make -j 2 && make install
4.2.5 编译安装后配置

Httpd编译过程:/app/httpd24/build/config.nice
自带的服务控制脚本:/app/httpd24/bin/apachectl

创建用户
[root@centos8 ~]# useradd -s /sbin/nologin -r apache
修改配置文件
vim /app/httpd24/conf/httpd
user apache
group apache
修改环境变量
root@centos8 ~]# vim /etc/profile.d/httpd.sh

PATH=/app/httpd24/bin:$PATH
[root@centos8 ~]# . /etc/profile.d/httpd.sh
设置开机自启
[root@centos8 ~]# ll /etc/rc.d/rc.local 
-rw-r--r--. 1 root root 474 May 23  2019 /etc/rc.d/rc.local
[root@centos8 ~]# vim /etc/rc.d/rc.local 

/app/httpd24/bin/apachectl start
[root@centos8 ~]# chmod +x /etc/rc.d/rc.local 
[root@centos8 ~]# ll /etc/rc.d/rc.local 
-rwxr-xr-x 1 root root 507 Dec 10 19:33 /etc/rc.d/rc.local

-. 1 root root 474 May 23 2019 /etc/rc.d/rc.local
[root@centos8 ~]# vim /etc/rc.d/rc.local

/app/httpd24/bin/apachectl start
[root@centos8 ~]# chmod +x /etc/rc.d/rc.local
[root@centos8 ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 507 Dec 10 19:33 /etc/rc.d/rc.local

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值