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