设为首页 收藏本站
查看: 552|回复: 0

[经验分享] apache2.4-zhangyuhe2的博客

[复制链接]

尚未签到

发表于 2018-11-17 09:41:40 | 显示全部楼层 |阅读模式
第1章   apache2.4
1.1      基础
1.1.1    2.4版本的新特性
  新特性
  l  MPM支持运行DSO机制,在编译时可将三个模块都编译进去,可按需加载
  l  支持event MPM
  l  支持异步读写
  l  支持每个模块及每个目录分别使用各自的日志级别
  l  基于FQDN的虚拟主机不再需要NameVirtuaHost指令
  l  支持用户自定义变量
  新模块
  mod_proxy_fcgi   #fast cgi快速cgi机制,cgi的全称是“通用网关接口”,apache与php交互有三种方式,其中一种方式就是通过cgi进行交互,如果php与apache分离成两台主机,那么它们之间的交互不得不依赖于tcp/ip或者“套接字”进行交互,这种分离的方式又被称之为fast cgi。
  mod_ratelimit,作用是可以进行限速
  mod_remoteip ,做远端IP地址的控制
  修改了一些配置机制:
  不再支持使用Order,Deny,Allow来做基于IP的访问控制。
  注意:
  目前centos6上的apache都是2.2版本的,想要升级为2.4版本有些麻烦,建议不要在centos6上面使用2.4版本,原因如下:
  apache程序的运行需要依赖一种叫做apr的东西,那么这个apr是什么东西呢?apr是apache  portable  runtime的缩写,其实就是apache运行时所依赖的环境,在centos6当中这个环境的版本是1.3.9,如下:
  [root@www ~]# rpm -qa | grep apr
  apr-1.3.9-5.el6_2.x86_64
  apr-util-ldap-1.3.9-3.el6_0.1.x86_64   #除了上面apr的主要程序,下面这两个程序也是非常重要的哦!
  apr-util-1.3.9-3.el6_0.1.x86_64       #这三个加起来就是apache在安装时的基本环境
  而2.4版本的apache所依赖的环境并不是1.3.9了,而是1.4以上,你可能会说了,把apr升级成1.4之后再安装2.4版本的apache不就行了吗?这样做太冒险,因为apr这个环境不仅仅是apache所依赖,可能别的软件也会依赖,所以还是尽量不要升级,所以在centos6上安装apache2.4只有一种办法了就是编译安装,下面就演示一下在centos6上进行apache2.4的编译安装。
1.1.2    在6上编译安装apache2.4
  安装前的准备:
  yum  groupinstall “Development  tools” “Server Platform Development” –y
  yum –y  install  pcre  pcre-devel
  groupadd –r apache
  useradd –r –g apache apache
  apr安装:
  apr-1.5.2
  ./configure  --prefix=/usr/local/apr
  make && make install
  apr-util安装
  arp-utils-1.5.3
  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  #with的意思是针对于apr来安装apr-utill
  make && make install
  httpd2.4的安装:
  wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.33.tar.gz    #下载
  yum -y install pcre pcre-devel    #这两个包是开发包,必须要安装
  yum –y install openssl-devel
  ./configure  --prefix=/usr/local/apache  --sysconf=/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
  make
  make install
  --prefix是指明路径,不必多说
  --sysconfig=/etc/httpd24这里是指明存放配置文件的目录为/etc/httpd24,因为使用rpm包安装的httpd的配置文件在/etc/httpd,这里的24主要用来区别。
  --enabled-so 支持动态模块加载机制
  --enable-cgi  激活CGI后面会讲cgi
  --enable-rewrite作用是URL重写
  --with-zlib   作用是压缩
  --with-pcre  #pcre兼容正则表达式库(Perl Compatible Regular Expressions),在URL重写时会用到,在安装它之前要先安装pcre-devel包
  --with-apr-/usr/local/apr   #指明2.4的依赖的apr
  --with-apr-util=/usr/local/apr-util/   #指明2.4所依赖的util
  --enable-modules=most  #要编译进去哪些模块呢?most代表大多数模块,而all代表全部模块,后面跟上—help可以查看
  --enable-mpms-shared=all  #把所支持mpm模块都编译进来
  --with-mpm-prefork   #把所有的mpm模块都编译进来之后,默认使用prefork
  启动服务:
  apache自带了一个服务启动脚本apachectl
  apachectl start     #编译安装的httpd不可能有服务脚本的,所以也只能通过这种方式启动
1.1.3    在6上编译安装2.4之后的善后
  apachectl用于控制httpd的开启和关闭
  [root@www ~]# ls /usr/local/apache/bin/apachectl          #两个命令是不一样的。
  /usr/local/apache/bin/apachectl
  [root@www ~]# which apachectl
  /usr/sbin/apachectl
  我们首先要明白一点,apachectl这个命令无论是rpm包安装还是使用编译安装都会生成此命令,不过此命令所在的路径是不同的。以上一小节的编译安装路径的来讲,编译安装之后的apache的路径在/usr/local/apache/bin/目录下,而使用rpm安装的apachectl在/usr/sbin/apachectl目录下,所以我们在使用的时候要当心,在使用此命令的时候最好使用全路径。
  在同一时刻,我们只能启动一个http服务,假设我只想启动编译安装的,但是写绝对路径又太麻烦了,我们可以把绝对路径写入到PATH里面,怎样写入呢?我们之前学过的,每启动一个新的shell或者使用su-切换到某一个用户都会读取/etc/profile文件和/etc/profile.d/*.conf文件,我们在/etc/profile.d/里面新建一个脚本文件,然后将/usr/local/apache/bin/优先于/usr/sbin,这样的话我们直接在命令行当中定apachectl的时候,优先调用的就是编译安装好的那个apachectl,下面我们就来做一下:
  [root@www ~]# echo $PATH
  /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  [root@www ~]# cd /etc/profile.d     #进入到/etc/profile.d目录下
  [root@www profile.d]# vim httpd.sh   #写一个全局变量赋值命令,一定要是.sh结尾
  export PATH=/usr/local/apache/bin/:$PATH
  [root@www profile.d]# . ./httpd.sh   #重读
  [root@www profile.d]# echo $PATH   #检查
  /usr/local/apache/bin/:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  好,这样我们再使用apachectl时再调用时就是编译好的apachectl而不是使用rpm安装的那个了。
  比如我们想要开机立马就启动编译安装好httpd,而不是rpm安装好的,怎么做呢?
  两种方法:
  第一种非常的简单,就是把apachectl start这种命令直接写入到/etc/rc.d/rc.local这个文件里面,开机自动就会执行了。
  第二种就是把自己写一个脚本加入到/etc/init目录下,使之能够被service命令和chkconfig命令进行调用,其实这个脚本并不难写,我们只要仿照rpm包安装的httpd修改一下就好,过程如下:
  apachectl=/usr/local/apache/bin/apachectl    #apachectl命令的路径修改一下
  httpd=/usr/local/apache/bin/httpd   #httpd二进制的文件
  prog=httpd                       #不动
  pidfile=${PIDFILE-/var/run/httpd/httpd24.pid}   #把httpdPID更改成httpd24
  lockfile=${LOCKFILE-/var/lock/subsys/httpd24}   #这个也更改成http24
  [root@www init.d]# chkconfig --add httpd24
  [root@www init.d]# chkconfig --list httpd24
  httpd24           0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
  [root@www init.d]# chkconfig httpd24 on
  [root@www init.d]# chkconfig --list httpd24
  httpd24           0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
  [root@www init.d]# service httpd24 start
1.1.4    centos7上httpd
DSC0000.jpg

  里面提供了有各种modules,如果想改过模块装载与否的话只需要更改配置文件 。
  而配置文件前面的序号是在glob匹配的时候有次序匹配的含义
  查看模块装载到了什么地方:
  [root@localhost ~]# rpm -ql httpd
  /usr/lib64/httpd/modules/mod_mpm_event.so
  /usr/lib64/httpd/modules/mod_mpm_prefork.so
  /usr/lib64/httpd/modules/mod_mpm_worker.so   ……………  #都装载到了/usr/lib64/httpd/modules/下了
  /etc/httpd/conf.modules.d
  [root@localhost conf.modules.d]# less 00-mpm.conf    #从此文件当中就可以看到用的使用mpm模块
  LoadModule mpm_prefork_module modules/mod_mpm_prefork.so  #我们可以看到默认使用的还是prefork,我们可以在里面更改……,如果我们要使用别的模型把对应行前面的注释然后重启即可。
  systemctl restart httpd.service   #重启httpd
  [root@localhost ~]# httpd -l
  Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  [root@localhost ~]# httpd –M
  [root@localhost ~]# httpd -M | grep mpm    #验证当前使用的使用mpm模块
  mpm_prefork_module (shared)
  centos7:
  配置文件:
  l  主配置文件:/etc/httpd/conf/httpd.conf
  l  模块配置文件:/etc/httpd/conf/conf.modules.d/*.conf
  l  辅助配置文件:/etc/httpd/conf.d/*.conf
  l  Mpm:以DSO机制提供,配置文件00-mpm.conf
  服务控制:
  Systemctl {start|stop|restartstatus|reload}  httpd.service
  如果直接使用apachectl是rpm生成的命令,如果想使用编译安装的话就得使用全路径,/usr/local/apache/bin/apachectl,如果你想方便一些,不想写这么长的名字,您可以将共写入到PATH变量里面,只要在/etc/profile.d/httpd.sh:
  export PATH =/usr/local/apache/bin:PATH    #把sysctl写入到前面
  ./etc/profile.d/httpd.sh
  echo $PATH
  [root@localhost ~]# setenforce 0
  [root@localhost ~]# iptables -F
  [root@localhost ~]# systemctl start httpd
  /etc/profile.d文件
1.1      配置
1.1.1    切换使用MPM
  [root@www ~]# httpd -M | grep mpm    #查看当前使用的MPM模块,在2.4当中httpd –l不会显示使用的mpm模块。
  mpm_prefork_module (shared)
  还可以像下面这样,直接去配置文件里面查看:
  [root@localhost conf.modules.d]# cat 00-mpm.conf | egrep -v "^$|#"
  LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
  怎样切换MPM模块呢?如下
  [root@localhost ~]# cd /etc/httpd/conf.modules.d/     #这个目录是专门放置模块用的,而2.2是没有这个目录的
  [root@localhost conf.modules.d]# vim 00-mpm.conf  #把想要开启的mpm模块前的#去掉检查语法后然后重启服务即可,假设我们在这里把prefork更改成了event。
  [root@localhost conf.modules.d]# httpd –t
  Syntax OK
  [root@localhost conf.modules.d]# systemctl restart httpd.service
  [root@localhost ~]# httpd -M | grep mpm    #event模块生效
  mpm_event_module (shared)
1.1.2    虚拟主机
  虚拟主机的配置内容与6是一样的,不过centos7我们可以把虚拟主机的配置内容专门拿出来生成一个配置文件以.conf结尾的文件放置到/etc/httpd/conf.d目录下,注意,要把中心主机给注释掉。
  编译安装的2.4版本也是被拆分成一个又一个小片段放置在/etc/httpd24/extra/这个辅助配置文件里面了。
1.1.3    访问控制
  2.4的根目录与2.2的根目录配置虽然差不多,但是其运行机制变了,比如我们在2.2当中使用DocumentRoot定义了主目录之后,下文当中的Directory所对应的目录如果与DocumentRoot对应的目录不同,那么Directory里面的限制只会限定在Directory对应的目录当中,而DocumentRoot所有人是照常可以访问的。
  我们先用2.2来举例子:
  DocumentRoot "/www/html"    #由原来的/var/www/html更改成了/www/html/,当然前是得有这个目录
                    #此标签下面的内容都没动
  Options FollowSymLinks
  AllowOverride None
  
               #这里也更改成了与DocumentRoot对应的目录一致,并做了限制
  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Deny from 192.168.80.100/32    #拒绝了物理机
  Allow from all
  
  在物理机的结果是这样的,如下:
DSC0001.jpg

  这个结果说明我们的上面的实验是成功的。我们再进一步,还是用2.2版本,如果Directory与DocumentRoot所对应的目录不一样,测试语法时会不会报错?如果不报错的话,假如DocumentRoot是/www/html/,与Directory写的是/www/html/htdocs,然后在/www/html/htdocs限制了物理机的访问,物理机肯定不能访问/www/html/htdocs下的index.html,但是它可不可以访问/www/html/下的index.html呢?下面我们就来试一试
  DocumentRoot "/www/html"    #由原来的/var/www/html更改成了/www/html/,当然前是得有这个目录
                    #此标签下面的内容都没动
  Options FollowSymLinks
  AllowOverride None
  
             #这里也更改成了与DocumentRoot对应的目录不一致,并做了限制
  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Deny from 192.168.80.100/32    #拒绝了物理机
  Allow from all
  
  实验结果是,当物理机访问/www/html/htdocs被拒绝,但是访问/www/html没有被拒绝,实验结果截图如下:
DSC0002.jpg

DSC0003.jpg

  那么通过这个实验学习了什么呢?
  DocumentRoot对应的目录可以与Directory对应的目录不一致,在请求检测时不会出错,不过前提是要有这些目录。
  如果Directory标签里面做了限制,那么此限制就仅仅对此标签对应的目录起作用,如果此标签Directory与DocumentRoot对应的目录一致,那么限制自然就一致,如果不一致,就仅对Directory做限制,而DocumentRoot那里对应的目录因为没有限制,默认谁都可以进行访问,那么以上就是apache2.2版本DocumentRoot和Directory的关系。
  下面我们再看一下2.4版本关于DocumentRoot和Directory的关系,在centos7上做,当然了还是用实验说话:
  DocumentRoot "/www/html"      #由原来的/var/www/html更改成了/www/html/,当然前是得有这个目录
            #没做更改
  AllowOverride None
  Require all granted
  
     #与DocumentRoot不一致
  Options Indexes FollowSymLinks
  AllowOverride None
                    #与2.2不同的是,这时要专门制定一个标签
  Require not ip 192.168.80.100/32
  Require all granted
  
  实验结果:
DSC0004.jpg

DSC0005.jpg

  当我们把  标签当中的拒绝项给删除之后,如下,实验结果又是这样的,
                   
  Require all granted
  
   DSC0006.jpg
DSC0007.jpg

  那么我们通过2.2与2.4的配置文件的对比,我们最应该明白的一点就是:
  2.2版本的DocumentRoot对应的目录,在没做Directory限制时,默认允许所有人访问
  2.4版本的DocumentRoot对应的目录,在没做Directory限制时,默认拒绝所有人访问
  2.4的版本的配置文件有所变量,虚拟主机可自定义到目录当中,删除和更改都非常的方便,由其是自动化运维的时候。
编译后的centos6服务脚本
  在cetos6当中编译安装2.4之后默认是没有服务脚本,没有服务就没有办法使用service命令进行程序的控制,我们可以利用rpm默认安装的服务脚本,把脚本里面的程序的路径改成使用编译安装的程序的路径就可以了,非常的简单。
  [root@www init.d]# cp httpd httpd24
  apachectl=/usr/local/apache/bin/apachectl    #改
  httpd=/usr/local/apache/bin/apachectl     #改
  prog=httpd        #没有更改
  pidfile=${PIDFILE-/var/run/httpd/httpd24.pid}   #改
  lockfile=${LOCKFILE-/var/lock/subsys/httpd24}   #改
  [root@www init.d]# chkconfig --add httpd24
  [root@www init.d]# chkconfig --list httpd24
  httpd24           0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
  [root@www init.d]# chkconfig httpd24 on


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636073-1-1.html 上篇帖子: CentOS7部署Apache Mesos-10683404 下篇帖子: Apache Calcite官方文档中文版-概览-1.背景
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表