httpd-2.4基础知识
新增特性:
1)MPM支持运行DSO(动态共享对象)机制,以模块形式按需加载
2)支持event MPM
3)支持异步读写
4)支持每个模块及每个目录分别使用各自的日志级别
5)每请求配置
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
httpd依赖于apr-1.4+,apr-util-1.4+,apr-icon
apr:apache portable runtime
Centos 6环境下编译安装httpd-2.4步骤
1.4+版的apr和apr-util
前提:
安装开发环境,安装pcre-devel
1)apr
# ./configure --prefix=/usr/local/apr
# make %% make install
2) apr-util
# ./configure --prefix=/usr/local/apr-util --with=/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 --whti-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
# make %% make install
注意:默认一般为--sysconf=/etc/httpd,这里为了防止和已经安装的冲突
启动服务
apachectl
Centos 7环境下默认安装了httpd-2.4
配置文件
主配置文件 /etc/httpd/conf/httpd.conf
模块配置文件 /etc/httpd/conf.modules.d/*.conf
辅助配置文件 /etc/httpd/conf.d/*.conf
mpm 以DSO机制提供,配置文件00-mpm.conf
服务控制 systemctl
[root@lab1 ~]# cd /etc/httpd/conf.modules.d/
[root@lab1 conf.modules.d]# ll
total 32
-rw-r--r-- 1 root root 3739 Apr 24 09:44 00-base.conf
-rw-r--r-- 1 root root 139 Apr 24 09:44 00-dav.conf
-rw-r--r-- 1 root root 41 Apr 24 09:44 00-lua.conf
-rw-r--r-- 1 root root 742 Apr 24 09:44 00-mpm.conf
-rw-r--r-- 1 root root 957 Apr 24 09:44 00-proxy.conf
-rw-r--r-- 1 root root 41 Apr 24 09:44 00-ssl.conf
-rw-r--r-- 1 root root 88 Apr 24 09:44 00-systemd.conf
-rw-r--r-- 1 root root 451 Apr 24 09:44 01-cgi.conf
[root@lab1 conf.modules.d]# grep -v ^# 00-mpm.conf | grep -v ^$
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
[root@lab1 conf.modules.d]# vim 00-mpm.conf
[root@lab1 conf.modules.d]# grep -v ^# 00-mpm.conf | grep -v ^$
LoadModule mpm_event_module modules/mod_mpm_event.so
[root@lab1 conf.modules.d]# systemctl restart httpd
[root@lab1 conf.modules.d]# ps aux | grep httpd
root 1323 0.1 0.4 248188 7568 ? Ss 19:13 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1324 0.0 0.1 247936 3616 ? S 19:13 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1325 0.0 0.3 535016 6228 ? Sl 19:13 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1326 0.0 0.3 535016 6224 ? Sl 19:13 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1327 0.0 0.3 535016 6224 ? Sl 19:13 0:00 /usr/sbin/httpd -DFOREGROUND
root 1410 0.0 0.0 112708 976 pts/0 S+ 19:14 0:00 grep --color=auto httpd
[root@lab1 conf.modules.d]# httpd -l
Compiled in modules:
core.c
mod_so.c
http_core.c
[root@lab1 conf.modules.d]# httpd -M | grep mpm
mpm_event_module (shared)
配置访问控制
1)切换使用MPM
LoadModule mpm_NAME_module modules/mod_mpm_NAME.so
2)修改‘Main’ Server的DocumentRoot
3)基于IP的访问控制法则
允许所有主机访问 Require all granted
拒绝所有主机访问 Require all deny
控制特定ip访问
Require ip IPADDR 授权指定来源地址的主机访问
Require not ip IPADDR 拒绝指定来源地址的主机访问
控制特定主机HOSTNAME访问
Require host HOSTNAME
Require not host HOSTNAME
HOSTNAME
FQDN 特定主机
DOMAIN 指定域内的所有主机
<RequireAll>
Require all granted
Require not ip #.#.#.#
</RequireAll>
4)虚拟主机
基于IP PORT和FQDN都支持
基于FQDN的不再需要NameVirtualHost指令
5)ssl
启用模块
LoadModule ssl_module modules/mod_ssl.so
6)Centos 6 服务脚本
LAMP基础知识
apache,mariadb(mysql),php(perl,python)
LAMMP memcached
静态资源:静态内容,客户端从服务器端获得的资源的表现形式与原文件相同
动态资源:通常是程序文件,需要在服务器端执行后,将执行结果返回给客户端
CGI Common Gateway Interface
fastcgi
程序 = 指令 + 数据
整个处理过程
1)客户端请求动态资源,请求先送给WEB服务器
2)WEB服务器发现是动态资源,转交给应用程序服务器
3)应用程序服务器从磁盘加载本地程序运行,执行过程中生成结果则直接返回给WEB服务器,如果发现需要用到数据,则发送请求给数据服务器
4)数据服务器从磁盘中加载数据,在索引中过滤获取最终数据
在这里简单解释一下数据库的一般存储和查找模式
(1)按照每一个KEY对应的列提取出来进行存储
(2)对每一列进行排序,并对同一类型(例如:同一首字母)进行分类索引(数据量特别大的话,有时也进行多层次多次分类),即稀疏索引(相反的对每一个值索引则为稠密索引)
(3)查找时先找到某一类(必要时不断查找细分类),再依次进行查找
5)数据服务器将数据返回给应用程序服务器
6)应用程序服务器把结果返回给WEB服务器
7)WEB服务器把结果返回给客户端
对于不变化的动态资源,放入缓存中,以提升资源性能
[root@lab1 ~]# yum install php php-mysql mariadb -y
[root@lab1 ~]# yum install -y mariadb-server
[root@lab1 ~]# rpm -q mariadb
mariadb-5.5.60-1.el7_5.x86_64
[root@lab1 ~]# rpm -q mariadb-server
mariadb-server-5.5.60-1.el7_5.x86_64
[root@lab1 ~]# rpm -ql mariadb-server | grep service
/usr/lib/systemd/system/mariadb.service
[root@lab1 ~]# systemctl start mariadb
[root@lab1 ~]# ss -tnl | grep 3306
LISTEN 0 50 *:3306 *:*
[root@lab1 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
Bye
[root@lab1 ~]# rpm -ql php
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
/usr/lib64/httpd/modules/libphp5.so
/usr/share/httpd/icons/php.gif
/var/lib/php/session
[root@lab1 ~]# rpm -ql php
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
/usr/lib64/httpd/modules/libphp5.so
/usr/share/httpd/icons/php.gif
/var/lib/php/session
[root@lab1 ~]# grep -v ^# /etc/httpd/conf.d/php.conf | grep -v ^$
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
AddType text/html .php
DirectoryIndex index.php
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
[root@lab1 conf.modules.d]# vim 00-mpm.conf
[root@lab1 conf.modules.d]# grep -v ^# 00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
[root@lab1 conf.modules.d]# systemctl restart httpd.service
[root@lab1 conf.modules.d]# httpd -M |grep php
php5_module (shared)
[root@lab1 conf.modules.d]# cd /www/htdocs
[root@lab1 htdocs]# cp index.html index.php
[root@lab1 htdocs]# vim index.php
[root@lab1 htdocs]# cat index.php
<?php
phpinfo()
?>
[root@lab1 htdocs]# vim index.php
[root@lab1 htdocs]# cat index.php
<?php
$link=mysql_connect('127.0.0.1','mysql','');
if ($link)
echo "Success";
else
echo "Failure";
mysql_close();
?>
[root@lab1 htdocs]# curl 172.20.0.132/index.php
Success
[root@lab1 htdocs]# systemctl stop mariadb.service
[root@lab1 htdocs]# curl 172.20.0.132/index.php
Failure
[root@lab1 htdocs]systemctl start mariadb.service
注意:LAMP搭建过程,这里httpd开始是以event模式运行,没有模块,prefork和event模式运行时其编译方式是不同的,重启的时候要调回event模式
httpd + php 的三种方式:
1)modules
2)cgi
3)fastcgi(fpm)