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

    [[email protected] ~]# cd /etc/httpd/conf.modules.d/
    [[email protected] 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
    [[email protected] conf.modules.d]# grep -v ^# 00-mpm.conf | grep -v ^$
    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
    [[email protected] conf.modules.d]# vim 00-mpm.conf 
    [[email protected] conf.modules.d]# grep -v ^# 00-mpm.conf | grep -v ^$
    LoadModule mpm_event_module modules/mod_mpm_event.so
    [[email protected] conf.modules.d]# systemctl restart httpd
    [[email protected] 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
    [[email protected] conf.modules.d]# httpd -l
    Compiled in modules:
      core.c
      mod_so.c
      http_core.c
    [[email protected] 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服务器把结果返回给客户端
        对于不变化的动态资源,放入缓存中,以提升资源性能

[[email protected] ~]# yum install php php-mysql mariadb -y
[[email protected] ~]# yum install -y mariadb-server
[[email protected] ~]# rpm -q mariadb
mariadb-5.5.60-1.el7_5.x86_64
[[email protected] ~]# rpm -q mariadb-server
mariadb-server-5.5.60-1.el7_5.x86_64
[[email protected] ~]# rpm -ql mariadb-server | grep service
/usr/lib/systemd/system/mariadb.service
[[email protected] ~]# systemctl start mariadb
[[email protected] ~]# ss -tnl | grep 3306
LISTEN     0      50           *:3306                     *:*     
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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"
[[email protected] conf.modules.d]# vim 00-mpm.conf
[[email protected] conf.modules.d]# grep -v ^# 00-mpm.conf 
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
[[email protected] conf.modules.d]# systemctl restart httpd.service
[[email protected] conf.modules.d]# httpd -M |grep php
 php5_module (shared)
[[email protected] conf.modules.d]# cd /www/htdocs
[[email protected] htdocs]# cp index.html index.php
[[email protected] htdocs]# vim index.php
[[email protected] htdocs]# cat index.php
<?php
    phpinfo()
?>

系统运维-22-1-httpd2.4和LAMP基础知识

[[email protected] htdocs]# vim index.php
[[email protected] htdocs]# cat index.php 
<?php
    $link=mysql_connect('127.0.0.1','mysql','');
    if ($link)
        echo "Success";
    else
        echo "Failure";
    mysql_close(); 
?>
[[email protected] htdocs]# curl 172.20.0.132/index.php
Success
[[email protected] htdocs]# systemctl stop mariadb.service
[[email protected] htdocs]# curl 172.20.0.132/index.php
Failure
[[email protected] htdocs]systemctl start mariadb.service

注意:LAMP搭建过程,这里httpd开始是以event模式运行,没有模块,prefork和event模式运行时其编译方式是不同的,重启的时候要调回event模式

httpd + php 的三种方式:
    1)modules
    2)cgi
    3)fastcgi(fpm)

 

 

相关文章: