CentOS 7上,httpd已经到了2.4版本,新增了很多新特性:
(1)MPM支持运行DSO机制;以模块形式按需加载
 (2)支持event MPM;
 (3)支持异步读写;
 (4)支持每模块及每个目录分别使用各自的日志级别;
 (5)每请求配置:<If>
 (6)增强版的表达式分析器;
 (7)支持毫秒级的KeepAlive timeout;
 (8)基于FQDN的虚拟主机不再需要NameVirtualHost指令;
 (9)支持用户自定义变量;
新模块:
 (1)mod_proxy_fcgi
 (2)mod_ratelimit
 (3)mod_remoteip
修改了一些配置机制:
   不再支持使用Order,Deny,Allow来做基于IP的访问控制;
安装httpd-2.4
httpd2.4依赖于apr-1.4+,apr-util-1.4+,[apr-icon],即对版本有要求,要求1.4及以上版本
   apr:apache portable runtime,类似虚拟机,隐藏底层操作系统的差异。
CentOS 6上编译安装步骤:
   1.4+版本的apr和apr-util
前提:安装开发环境,安装pcre-devel
 (1)apr
   # ./configure --prefix=/usr/localapr
   # make && make install
(2)apr-util
   # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
   # make && make install
  # groupadd -r apache
   # useradd -r -g apache apache
   # ./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
启动服务:apachectl
实操:
 1)确保Development tools和Server Platform Development包组安装:
2)安装pcre-devel:
3)编译安装apr:
  # tar -xvf apr-1.7.4.tar.bz2 
  # ./configure --prefix=/usr/local/apr17
  # make && make install

4)编译安装apr-util:
  # tar -xvf 
  # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr17
  # make && make install

 make && make install时出现错误,大致是缺少xml解析器,安装expat-devel包
 yum install expat-devel -y
重新make && make install
5)编译安装httpd2.4
 增加用户和组:
  # groupadd -r apache
  # useradd -r -g apache apache
  # ./configure --prefix=/usr/local/apache --sysconf=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr17 --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
  # make && make install
安装时出现错误:
查找资料后,原因是CENTOS 是 64bit的,在编译配置中并没有指定 --with-included-apr的具体引用路径,导致找不到相应的库文件,而 --with-included-apr 默认是查找/usr/lib下的库文件,正确的引用应该是安装的apr的库文件,在第3步中安装的位置。这类情况在64bit下非常常见。
上面的方法还是不对,再次解决:
 需要安装libxml2-devel
yum install -y libxml2-devel
 然后删除apr-util重新编译安装,也需要重新编译安装httpd
 rm -rf /usr/local/apr-util
 cd ~/apr-util-1.6.3 
 清缓存:make clean
 然后重新配置安装
 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr17
 编译并安装:make && make install
然后重新安装httpd2.4成功。
6)启动服务
 编译安装的服务,没有管理脚本,使用apache自己提供的管理器:
 apachectl
注意,启动后测试,总也访问不到网页,需要关闭防火墙:service iptables stop
CentOS 7上安装httpd2.4
CentOS7默认的httpd就是2.4,所以使用yum安装即可
 yum install httpd
配置文件多了conf.modules.d目录,用于模块的配置。
配置文件:
   主配置文件:/etc/httpd/conf/httpd.conf
   模块配置文件:/etc/httpd/conf.modules.d/*.conf
   辅助配置文件:/etc/httpd/conf.d/*.conf
mpm:以DSO机制提供,配置文件00-mpm.conf
启动:systemctl start httpd.service
启动出现错误:
原因:修改了00-mpm.conf中的配置,由默认的使用prefork改为使用event,就出错了,使用prefork没有问题。
 网上解决方法是在主配置中加上LoadModule php5_module modules/libphp5.so
 但是语法检查提示: 

php5不支持线程安全,而worker和event都是运行在线程模式下。所以,如果需要worker和event模式,需要升级php。
CentOS 7上安装httpd2.4
CentOS7默认就是安装httpd2.4,使用yum进行安装:
yum install httpd -y
 服务控制:systemctl {start | stop | restart | status | reload } httpd.service
配置:
 1)切换使用MPM
   LoadModule mpm_NAME_module modules/mod_mpm_NAME.so
     NAME:prefork、event、worker
 2)修改‘Main’ server 的DocumentRoot
 3)基于IP的访问控制法则
   允许所有主机访问:Require all granted
   拒绝所有主机访问:Require all deny
     控制特定IP访问:
       Require ip IPADDR:授权指定来源地址的主机访问
       Require not ip IPADDR:拒绝指定来源地址的主机访问
       IPADDR:
         IP:192.168.138.2
         Network/mask:192.168.138.0/255.255.255.0
         Network/length:192.168.138.0/24
         Net:192.168.138
     控制特定主机(HOSTNAME)访问
       Require host HOSTNAME
       Require not host HOSTNAME
       HOSTNAME:
         FQDN:特定主机
         DOMAIN:指定域内的所有主机
  上述控制语句要放在一个容器中,如下拒绝192.168.138.1访问:
     <RequireAll>
         Require all granted
         Require not ip 192.168.138.1
     </RequireAll>
配置文件:一般使用模块化配置,即主配置文件中使用Include或IncludeOptional包含一些配置目录,在目录中按不同功能或用途模块化配置,便于管理。如conf.d目录和conf.modules.d目录。
  4)虚拟主机
     基于IP、Port和FQDN都支持
     基于FQDN的不再需要NameVirtualHost指令;
  5)ssl
     启用模块:LoadModule ssl_module modules/mod_ssl.so
实操:
 默认配置,DocumentRoot是/var/www/html,访问控制是所有IP都可访问
修改DocumentRoot “/var/www/html”为“/www/htdocs”,在此目录下新建index.html,测试访问:
只修改DocumentRoot,没有增加<Directory "/www/htdocs">,默认就是拒绝。
 修改配置文件:
   <Directory "/www/htdocs">
        Require all granted
   </Directory>
 可以访问到。注意,对于CentOS7,不仅要关闭iptables,还要关闭selinux,即setenforce 0
   <RequireAll>
         Require all granted
         Require not ip 192.168.138.1
     </RequireAll>
 此时,192.168.138.1就不能访问了,而其他主机依然可以访问。
  6)CentOS 6服务脚本
 拷贝httpd2.2的httpd服务脚本,进行一下修改,即/etc/rc.d/init.d/httpd

脚本做好后,执行:
 chkconfig --add httpd24
 查看启动级别
 chkconfig --list
 chkconfig httpd24 on
 service httpd24 start

LAMP:
   L:Linux,A:Apache,M:mariadb、mysql,P:php、perl、python
LAMMP:memcached
静态资源:静态内容,客户端从服务器获得的资源的表现形式与原文件相同;
 动态资源:通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端;
CGI:Common Gateway Interface,通用网关接口
 FASTCGI
HTTPD与解析器之间可以通过共享内存或是消息队列等通信,解析器功能可以单独独立出来,然后与httpd之间通过套接字通信。
安装:
 yum install php php-mysql mariadb
启动mariadb服务:systemctl start mariadb.service
连接数据库:
http+php三种方式,modules最常用
   modules、  cgi、  fastcgi(fpm)
在DocumentRoot目录下新建index.php文件,内容:
 <?php
     phpinfo();
 ?>
浏览器中访问:
php连接mariadb:
请求流程:
 Client --> (http) --> httpd --> (cgi) --> application server (program file) --> (mysql) --> mariadb
搭建wordpress4.5:
 1、下载 wordpress-4.5.31-zh_CN.tar.gz,解压:tar xf  wordpress-4.5.31-zh_CN.tar.gz
 2、拷贝解压后的wordpress目录至/www/htdocs/wordpress45/  :cp -r wordpress/ /www/htdocs/wordpress45/
 3、拷贝wp-config-sample.php为wp-config.php,wordpress的配置文件
 4、配置数据库:使用mariadb
     create database wp45db;
     grant all on wp45db.* to 'wp45user'@'localhost' identified by '123456';
     grant all on wp45db.* to 'wp45user'@'127.0.0.1' identified by '123456';
     flush privileges;
 5、配置wp-config.php
     define('DB_NAME', 'wp45db');
     define('DB_USER', 'wp45user');
     define('DB_PASSWORD', '123456');
     define('DB_HOST', 'localhost');
 6、在浏览器中输入地址,进行wordpress45的安装:
     配置站点名称、站点管理用户和密码,点击安装即可
 7、
问题:第一次使用的是wordpress4.9版本,输入地址总是弹出phpinfo()信息。
登录页面显示:
无法登录。
安装phpMyAdmin管理mysql,是mariadb的WebGUI:
1、下载phpMyAdmin-4.4.15-all-languages.tar.bz2,解压缩,tar xf phpMyAdmin-4.4.15-all-languages.tar.bz2 -C /www/htdocs/
 2、解压后形成/www/htdocs/phpMyAdmin-4.4.15-all-languages目录。
 3、目录过长,创建链接文件:ln -sv phpMyAdmin-4.4.15-all-languages/ pma44
 4、cp config.sample.inc.php config.inc.php ,通过配置模板文件,创建一个配置文件,修改配置文件:
5、访问:提示缺少mbstring,安装

注意,这个程序包需要CentOS-7-x86_64-Everything-光盘。
 安装完毕后,重新启动httpd,再次访问
6、修改mariadb用户密码:phpMyAdmin需要密码登录。
登录后:

需要注意的是:在安装wordpress以及phpMyAdmin时,因为CentOS7默认安装的PHP以及mysql(mariadb)版本都较低,所以对应的应用系统也要低版本的,使用高版本会出现很多错误。
php解析器如何与MariaDB交互:
解析器无需与MariaDB交互,那些用到数据存储系统的程序才需要与数据存储交互;
 存储系统:
   文件系统:文件
   SQL:MariaDB,Oracle,MSSQL,。。。
   NoSQL:redis,mongodb,hbase,。。。
   NewSQL:
PHP简单了解:
Zend Engine (PHP的解析器,新开发)—— Zend opcode (类似Java的字节码)
 PHP加速器:
   APC(Alternative PHP Cache)、eAccelerator、XCache、Zend Optimizer和Zend Guard Loader、NuSphere PhpExpress
安装加速器xcache:
 yum install php-xcache





![[leetcode]rotate-array 轮转数组](https://img-blog.csdnimg.cn/direct/042e573364104ac8b972c8fc728593cc.png)












