• Apache相关知识与配置


    Web服务器--Apache

    1. Apache是进行传输超文本的媒介,Html ,超文本是指页面内包含图片,链接甚至音乐,程序等非文本元素。传输超文本的协议叫超文本传输协议,httphttp使用统一资源定位符URL来建立连接和传输数据。URI,统一资源标志符,但是更宽泛,包含URL
    2. Apache概述与工作模式

    概述: 世界第一使用量的web服务器软件,可以运行在几乎所有计算机平台。快速可靠,通过简单的API扩充将各种解释器编译到服务器中。不适合多处理器环境,进程消耗比线程多。

    处理流程: 守护进程->工作进程->产生线程(处理请求)

    客户端通过随机端口连接到Apache80端口,服务器开启线程进程请求处理,匹配用户的请求是动态还是静态的:

    静态 服务器直接回传页面给客户端(html

    动态 需要解析器,服务器找到PHP处理后的页面回传给客户端。(是否需要连接数据库)

    Apache工作模式: 3种稳定的MPM模式(MPM:多进程处理模块)分别是:

    preforkworkerevent

    prefork工作模式:

    Apache在启动之前,就预先fork一些子进程,然后等待请求进来、之所以这样做。是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点,只能处理一个请求。

    优点:成熟稳定,兼容所有新老模块。同时不需要担心线程安全问题。

    缺点: 一个进程占用相对多的系统资源,消耗更多的内存,而且不擅长处理高并发请求。

    worker 工作模式:

    使用多进程和多线程的混合模式。它也预先fork一些子进程(数量少),然后每个子进程创建一些线程,包括一个监听线程。该监听线程监听接入请求并将其传递给服务线程处理和应答。线程相比进程更轻量,消耗资源更少。因为线程通常会共享父进程的内存空间,所以占用资源更少。在高并发的场景下,相比prefork有更多的可用线程,处理能力会更强。

    优点: 占据更少的内存高并发表现更优秀。

    缺点: 必须考虑线程安全问题,一个线程死亡,整个线程所在的子进程上所有线程都会死亡

    event 工作模式:

    worker模式类似,最大的区别在于,解决了keep-alive(早期http申请资源需要不停地进行TCP连接与断开,浪费资源。所以有了keep-alivekeep-alive设置了keepalive_timeout,会在http守护进程发送完一个响应后等待一个keepalive_timeout时间,超过时间才会断开。但是长时间的使用等待可能会更加浪费资源)长时间占用线程的浪费问题,有一个专门的线程来管理这些keep-alive类型的线程增强高并发下的请求处理能力。

    查看方式: http -V | grep -i “server mpm” 

    指定方式: 在编译时指定选项 --with-mpm=xxx

      3.Apache的配置详解

    开始配置:

    1. 安装

    [root@apache ~]# yum install -y httpd httpd-manual

    [root@apache ~]# rpm -ql httpd

    /etc/httpd/conf.d/autoindex.conf

    /etc/httpd/conf.d/userdir.conf

    /etc/httpd/conf.d/welcome.conf

    /etc/httpd/conf.modules.d

    /etc/httpd/conf.modules.d/00-base.conf

    /etc/httpd/conf.modules.d/00-dav.conf

    /etc/httpd/conf.modules.d/00-lua.conf

    /etc/httpd/conf.modules.d/00-mpm.conf

    /etc/httpd/conf.modules.d/00-proxy.conf

    /etc/httpd/conf.modules.d/00-systemd.conf

    /etc/httpd/conf.modules.d/01-cgi.conf

    子配置文件

    /etc/httpd/conf/httpd.conf

    主配置文件

    日志

    /var/log/httpd/

    错误日志:记录apache-server出过哪些错误

    访问日志:记录哪些客户端访问过当前的web-server

    /etc/logrotate.d/httpd

    日志轮转

    /var/log/httpd/*log {

        missingok

        notifempty

        sharedscripts

        delaycompress

        postrotate

            /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true

    ## 重新加载apache的配置文件

    ## 正确输出和错误输出全部进入黑洞文件

    ## ||  前面的命令执行失败,执行后面的命令

    && 前面的命令执行成功,执行后面的命令

    ## true 永远返回一个真值

    面试题:为什么要做这个操作?

    日志文件轮转以后,旧文件的inode没有变化,如果不重新加载配置文件,新的日志依然写入旧的日志文件,轮转失效。

        endscript

    }

    /usr/lib64/httpd/modules

    ##apache的模块

    /usr/share/doc/httpd-2.4.6

    ##配置帮助

    /var/www

    ##页面发布目录

    [root@apache ~]# systemctl start httpd

    浏览器访问:http://172.16.0.31/manual/

    [root@apache ~]# grep "apache" /etc/passwd

    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

    2. 解读配置文件

    [root@apache /etc/httpd/conf]# vim httpd.conf

    ##目录容器,定义一个访问的虚拟路径

    <Directory /> ##没有""包起来,这是虚拟路径

        AllowOverride none

        Require all denied

    </Directory>

    DocumentRoot "/var/www/html"

    ##定义默认的访问路径

    <Directory "/var/www"> ##""包起来的,实体路径

        AllowOverride None

        # Allow open access:

        Require all granted

    </Directory>

    <Directory "/var/www/html">

        Options Indexes FollowSymLinks

    ##目录容器的配置选项

    #Indexes 支持索引

    #FollowSymLinks 支持软链接

        AllowOverride None

    ##是否使用验证

    #None表示不使用

        Require all granted

    ##访问控制列表,允许哪些客户端访问本机apache

    #all granted 允许所有的客户端访问

    </Directory>

    (1)安装后,直接启动,访问结果,错误测试页

    [root@apache /etc/httpd/conf.d]# vim welcome.conf

    <LocationMatch "^/+$">

        Options -Indexes

        ErrorDocument 403 /.noindex.html

    </LocationMatch>

    <Directory /usr/share/httpd/noindex>

        AllowOverride None

        Require all granted

    </Directory>

    ##测试页,不存在,直接返回403错误

    Alias /.noindex.html /usr/share/httpd/noindex/index.html

    ##访问的页面是 /.noindex.html

    # cd /var/www/html/

    [root@apache /var/www/html]# ls

    [root@apache /var/www/html]# echo "test" > index.html

    [root@apache /var/www/html]# cp /etc/passwd .

    [root@apache /var/www/html]# cp /etc/group  .

    #有默认测试页的情况下,其他文件不能被访问

    [root@apache /var/www/html]# rm -f index.html

    [root@apache /var/www/html]# ls

    group  passwd

    [root@apache /etc/httpd/conf.d]# vim welcome.conf

    ##注释这个文件的所有配置

    [root@apache /etc/httpd/conf.d]# systemctl restart httpd

    (2)Indexes

    展示页面发布目录下的文件

    [root@apache /etc/httpd/conf]# vim httpd.conf

        #Options Indexes FollowSymLinks

        Options Indexes

    [root@apache /etc/httpd/conf]# systemctl restart httpd

    (3)FollowSymLinks

    在页面展示目录下,是否支持软链接

    [root@apache /var/www/html]# ln -s /etc/fstab .

    [root@apache /var/www/html]# ll

    total 8

    lrwxrwxrwx 1 root root   10 Aug 14 14:35 fstab -> /etc/fstab

    -rw-r--r-- 1 root root  481 Aug 14 14:10 group

    -rw-r--r-- 1 root root 1031 Aug 14 14:10 passwd

    [root@apache /etc/httpd/conf]# vim httpd.conf

        Options Indexes FollowSymLinks

    [root@apache /etc/httpd/conf]# systemctl restart httpd

    (4)访问验证

    [root@apache /etc/httpd/conf]# vim httpd.conf

        AllowOverride All ##在目录容器里面

    AccessFileName .htaccess ##在目录容器外面

    <Files ".ht*"> ##文件容器,约束 ".ht" 以.ht开头命名的文件

        Require all denied ##拒绝所有人访问

    </Files>

    [root@apache /var/www/html]# vim .htaccess

    AuthName "access-test" ##验证的名字

    AuthType Basic ##验证的类型,基本验证

    AuthUserFile "/var/www/html/.htpasswd" ##保存合法用户的文件

    Require valid-user ##只有合法的用户才可以访问

    [root@apache /var/www/html]# htpasswd -c /var/www/html/.htpasswd h1

    -c 创建用户文件

    New password:

    Re-type new password:

    Adding password for user h1

    [root@apache /var/www/html]# cat .htpasswd

    h1:$apr1$qO3Rhva5$3RgNncMHN2npNWt7CDQVW.

    [root@apache /var/www/html]# htpasswd /var/www/html/.htpasswd h2

    New password:

    Re-type new password:

    Adding password for user h2

    [root@apache /var/www/html]# cat .htpasswd

    h1:$apr1$qO3Rhva5$3RgNncMHN2npNWt7CDQVW.

    h2:$apr1$gSEFk0Ia$vLtp05wisooWhrMEfIZZ60

    [root@apache /etc/httpd/conf]# systemctl restart httpd

    (5)访问控制

    Require all granted ##允许所有的客户端访问

    Require all denied ##拒绝所有的客户端访问

    白名单:允许哪些客户端访问本机的web-server

    应用在网站的后台web-server,只允许公司的业务人员访问。

    Require all denied

    require ip ip地址列表

    [root@apache /etc/httpd/conf]# vim httpd.conf

        Require all denied

        Require ip 172.16.0.230AuthName "access-test" ##验证的名字

    AuthType Basic ##验证的类型

    [root@apache /etc/httpd/conf]# systemctl restart httpd

    黑名单:拒绝哪些客户端访问本机的web-server

    应用在网站的前台web-server,允许来自互联网的所有用户,拒绝的非法访问。

    如何确认用户是非法的?

    分析apache的访问日志。

      <RequireAll>

    require not ip ip地址列表

    Require all granted

      </RequireAll>

    [root@apache /etc/httpd/conf]# vim httpd.conf

      <RequireAll>

        Require not ip 172.16.0.230

        Require all granted

      </RequireAll>

    [root@apache /etc/httpd/conf]# systemctl restart httpd

    --------------------------------------------------------

    ##定义默认的测试页的文件名

    <IfModule dir_module>

        DirectoryIndex index.html

    </IfModule>

    ##访问日志

    ##定义访问日志的格式

        LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

        LogFormat "%h %l %u %t "%r" %>s %b" common

    172.16.0.230 - - [10/Jun/2019:18:44:48 +0800] "GET / HTTP/1.1" 200 690 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)"

    172.16.0.230 客户端的IP

    - - 两个占位符

    [10/Jun/2019:18:44:48 +0800] 访问时间,时区

    GET / HTTP/1.1 访问方式,协议

    200 状态码

    -------------------

    web-server的状态码:

    1xx 消息

    2xx 访问成功

    200 OK

    3xx 重定向

    4xx 客户端错误

    5xx 服务器错误

    -------------------

    690 server给client传输了多大的文件,byte

    后面是客户端信息

        TypesConfig /etc/mime.types

    ##web-server在浏览器上支持的文件格式

  • 相关阅读:
    call()和apply( )
    String.prototype.replace( )
    Global对象和浏览器的window对象
    ros qt 項目增加新的线程
    ubuntu18.04 在QT中添加ros环境搭建 亲测可用
    ubuntu18.04系统下安装Nvidia驱动 + cuda10.0 + cudnn7
    【ROS学习】发布自定义数据结构的话题
    Autoware快速使用资料
    TX2-ubuntu无外接显示器远程桌面时分辨率过低
    Jetson TX2 安装 远程桌面软件 NoMachine
  • 原文地址:https://www.cnblogs.com/plutozzl/p/11355533.html
Copyright © 2020-2023  润新知