zoukankan      html  css  js  c++  java
  • apache2.4

    介绍

    Apache HTTP server是Apache软件基金会的一个开源的网页服务器,可以运行在几乎所有广泛使用的计算机平台上,由于跨平台和安全性被广泛使用,是目前最流行的web服务器软件之一,目前主流的web服务器软件包括Apache、Nginx、Lighttpd、IIS、Resin、Tomcat、Weblogic、jetty等

    Apache服务器的特点是使用简单,速度快,性能稳定,可以作为负载均衡及代理服务器来使用

     静态资源和动态资源

    静态资源:静态内容,客户端从服务器获得的资源的表现形式与原文件相同

    动态资源:通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端

    状态码

    HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的,但是可以提供任何可读取的替代方案。 除非另有说明,状态码是HTTP / 1.1标准(RFC 7231)的一部分。

     常见的状态码:

    200:请求已成功,请求所希望的响应头或数据体将随此响应返回。
    301:请求的URL指向的资源已经被删除,但在响应报文中通过Location指明了资源现在所处的新位置
    302:与301相似,但在响应报文中通过Location指明资源现在所处临时新位置
    304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码
    401:需要输入账号密码访问资源
    403:请求被禁止
    404:服务器无法找到客户端请求的资源
    500:服务器内部错误
    502:代理服务器从后端服务器收到一条伪响应

    持久连接和非持久连接

    2.持久连接
            Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其他请求的完成
                如何断开?
                    数量限制:100
                    时间限制:可配置(http2.4可以配置毫秒)
                副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应
                折中:较短的持久连接时间
        3.非持久连接
            http1.0默认是非持久连接
            http1.1默认是持久连接
            
            KeepAlive On|Off
            MaxKeepAlivedRequests #
            KeepAliveTimeout #
        4.测试语法
            telnet 192.168.254.12 80
            GET / HTTP/1.1
            Host: HOSTNAME or IP

    长连接,一次连接好可以请求多个资源,直到等到设置的超时时间超时

     短连接,在请求一个资源后立刻关闭连接

    MPM

    Multipath Process Module:多路处理模块,Apache 一共有3种稳定的 MPM 模式(多进程处理模块),它们分别是 prefork、worker、event。2.4版本的httpd默认是prefork工作模式。
    而由于event不支持https,因此,企业里面很少使用event
    • prefork模式

        工作特点:

          使用多个进程,每个进程只有一个线程,每个进程在某个确定的时间只能维持一个链接,优点是稳定,但内存开销较高

    • worker模式

        工作特点:

          使用多个进程,每个进程包含多个线程,每个线程在某个确定的时间只能维持一个链接,内存占用比较小,适合大并发,高流量的web服务器worker缺点是一个线程崩溃,整个进程就会连同其任何线程一起挂掉

    • event模式

        不支持https

    修改MPM模块

    [root@localhost modules]# vim /etc/httpd/conf.modules.d/00-mpm.conf
    解开注释:LoadModule mpm_worker_module modules/mod_mpm_worker.so
    然后重启服务:
    [root@localhost modules]# systemctl restart httpd
    查看:
    [root@localhost modules]# httpd -V
    AH00112: Warning: DocumentRoot [/www/web1/] does not exist
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
    Server version: Apache/2.4.6 (CentOS)
    Server built: Aug 8 2019 11:41:18
    Server's Module Magic Number: 20120211:24
    Server loaded: APR 1.4.8, APR-UTIL 1.5.2
    Compiled using: APR 1.4.8, APR-UTIL 1.5.2
    Architecture: 64-bit
    Server MPM: worker
    threaded: yes (fixed thread count)
    forked: yes (variable process count)

    安装apache2.4

    [root@localhost modules]# yum install httpd -y
    [root@localhost modules]# systemctl restart httpd

    修改apache端口号

    1.Listen:[ip]:PORT
        省略ip表示监听本机所有ip;Listen可以出现多次

    定义默认主页面

    DirectoryIndex index.html index.html.var

    日志

    apache日志一般分为两类,1.错误日志,2.访问日志

    错误日志:一般存放apache所生成的错误信息

    [root@localhost ~]# cat /etc/httpd/conf/httpd.conf | grep "^Error"
    ErrorLog "logs/error_log"

    访问日志:记录着访问本网站的客户端信息,例如ip等

    [root@localhost ~]# vim /etc/httpd/conf/httpd.conf 
    <IfModule log_config_module>
        #
        # The following directives define some format nicknames for use with
        # a CustomLog directive (see below).
        #
        LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
        LogFormat "%h %l %u %t "%r" %>s %b" common
    
        <IfModule logio_module>
          # You need to enable mod_logio.c to use %I and %O
          LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
        </IfModule>
    
        #
        # The location and format of the access logfile (Common Logfile Format).
        # If you do not define any access logfiles within a <VirtualHost>
        # container, they will be logged here.  Contrariwise, if you *do*
        # define per-<VirtualHost> access logfiles, transactions will be
        # logged therein and *not* in this file.
        #
        #CustomLog "logs/access_log" common
    
        #
        # If you prefer a logfile with access, agent, and referer information
        # (Combined Logfile Format) you can use the following directive.
        #
        CustomLog "logs/access_log" combined
    </IfModule>

     访问日志格式

    combined和common:复合型和普通型

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

    含义:

    %h:远端主机
    %I:远端登录名
    %u:远程用户名
    %t:时间
    %r:请求第一行
    %>s:状态
    %b:传送字节
    %{Referer}i:请求来源
    "%{User-Agent}i:客户端浏览器提供的浏览器识别信息

    站点访问控制

    站点访问控制
        可基于两种类型的路径指明对哪些资源进行访问控制
            文件系统控制:
                <Directory ""> </Directory>
                <File ""> </File>
                <FileMatch ""> </FileMatch>
            URL路径:
                <location ""> </location>
                ...

    基于"来源地址"的访问控制

    Directory中"基于来源地址"实现访问控制
            (1)Options
                Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None All
                Indexes: 如果没有默认主页面也找不到自定义页面会显示索引页面
            (2)基于来源地址的访问控制机制
                Require all granted
    Require all denied 来源地址:
             Require ip IPADDR
              Require not ip IPADDR IPADDR:
    192.168 192.168.0.0 192.168.0.0/24 192.168.0.0/255.255.255.0
    示例:

        <Directory "/var/www/admin">
          AllowOverride None
          Options None
          #Require all granted

          Require not ip 192.168.254.0/24
        </Directory>

     

    基于"用户"的访问控制

    基于用户访问控制
            <Directory "/var/test">
                AllowOverride None
                Options None
                AuthType Basic
                AuthName "this is admin page"
                AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                Require user admin1 admin2 admin3
            </Directory>
                创建访问授权账号
                    -c:自动创建htpasswd文件,因此,仅应该在添加第一个用户时使用
                    -m:md5加密
                    -D:删除用户
                    htpasswd -c -m /etc/httpd/conf.d/.htpasswd admin1
                    htpasswd -m /etc/httpd/conf.d/.htpasswd admin1

    基于"组"的访问控制

    12.基于组访问控制
            <Directory "/var/test">
                AllowOverride None
                Options None
                AuthType Basic
                AuthName "this is admin page"
                AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                AuthGroupFile "/etc/httpd/conf.d/.htgroup"
                Require group webadmins
            </Directory>

    虚拟主机

    有三种实现方案:
                基于IP:
                    为每个虚拟主机准备至少一个ip
                基于port:
                    为每个虚拟主机准备至少一个port
                基于hostname:
                    为每个虚拟主机准备至少一个hostname
                可以混合使用上述三种方式中任意方式
            note:一般虚拟主机不要和中心主机混用,所以要使用虚拟主机,请先禁用虚拟主机
                禁用中心主机:注释DocumentRoot
            每个虚拟主机都有专门配置:
                <VirtualHost "IP:PORT">
                    ServerName:
                    DocumentRoot
                </VirtualHost>
    
    示例:
        <VirtualHost 192.168.254.12:80>
          ServerName www2.cl7.com
          DocumentRoot "/var/www/www2"
          ErrorLog logs/www2-error_log
          CustomLog logs/www2-access_log combiend
          <Directory "/var/www/html1">
            Options None
            AllowOverride None
            <RequireAll>
              Require not ip 192.168.1.0/24
              Require all granted 
            </RequireAll>
          </Directory>
        </VirtualHost> 

    lamp架构

    lamp架构是linux,apache,mysql,php的缩写,以下是架构图

    测试apache和php的连接

    安装php和mysql的驱动程序

    [root@localhost ~]# yum install php php-mysql

    在/var/www/html下(如果没有修改路径的话)创建index.php,添加如下内容

    [root@localhost ~]# vim /var/www/html/index.php
    <?php
        phpinfo();
    ?>

    验证:

     ok,成功

     

    测试php和mysql(mariadb)的连接

    在/var/www/html下(如果没有修改路径的话)创建index.php,添加如下内容:

    [root@localhost ~]# vim /var/www/html/index.php
    <?php
        $link=mysql_connect('127.0.0.1','root','root');
        if($link)
            echo "success!!!";
        else
            echo "failed!!!";
        mysql_close();
    ?>

    测试

     ok,没问题

  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/10927355.html
Copyright © 2011-2022 走看看