精华内容
参与话题
问答
  • HTTP服务和APACHE2

    2018-11-03 19:58:00
    HTTP服务和APACHE2 知识点 请求报文响应报文 错误码 请求重定向 编译安装 实现https curl工具 1. http协议 http协议版本 http/0.9, http/1.0, http/1.1(较多), http/2.0(将来) http协议无状态 ...

    HTTP服务和APACHE2

    知识点

    • 请求报文响应报文
    • 错误码
    • 请求重定向
    • 编译安装
    • 实现https
    • curl工具

    1. http协议

    • http协议版本
      http/0.9, http/1.0, http/1.1(较多), http/2.0(将来)

    • http协议无状态

      1. stateless 无状态
        服务器无法持续追踪访问者来源
      2. 解决http协议无状态方法
        1. cookie:客户端存放
        2. session:服务端存放
          多服务器session解决方案
          1. 在调度器中记录cookie的id,始终将其分配到第一次访问的服务器
          2. 让服务器之间复制session信息,每台服务器都存放所有服务器的session
          3. 搭专用的session服务器(用到redis),需要实现主从,提高容错
    • 协议查看或分析的工具
      tcpdump,wireshark,tshark

    • http事务一次访问的过程

      1. 请求:request

        1. HTTP请求报文图示
          在这里插入图片描述
        2. request报文语法格式
          <method> <request-URL> <version>
          <headers>
          

    <entity-body>

    • 1
    • 2
    • 3
    • 4

    响应:response

    1. HTTP响应报文图示
      在这里插入图片描述
    2. response报文语法格式:
      <version> <status> <reason-phrase>
      <headers>
      

    <entity-body>

    • 1
    • 2
    • 3
    • 4

    参数说明

    1. method (获取服务器支持的动作curl -i -x OPTIONS
      请求方法,标明客户端希望服务器对资源执行的动作GET、HEAD、POST等
      1. GET:从服务器获取一个资源
      2. HEAD:只从服务器获取文档的响应首部,相当于
      3. POST:向服务器输入数据,通常会再由网关程序继续处理
      4. PUT:将请求的主体部分存储在服务器中,如上传文件
      5. DELETE:请求删除服务器上指定的文档
      6. TRACE:追踪请求到达服务器中间经过的代理服务器
      7. OPTIONS:请求服务器返回对指定资源支持使用的请求方法
    2. version
      http协议版本:HTTP/<major>.<minor>
    3. status:
      三位数字,如200,301, 302, 404, 502; 标记请求处理过程中发生的情况
    4. reason-phrase
      状态码所标记的状态的简要描述
    5. headers
      每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟一个可选空格,接着是一个值
    6. entity-body
      请求时附加的数据或响应时附加的数据

    http协议状态码(status)分类

    1. 1xx:100-101 信息提示
    2. 2xx:200-206 成功
      1. 200
        成功,请求数据通过响应报文的entity-body部分发送;OK
    3. 3xx:300-305 重定向
      1. 301
        请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
      2. 302
        响应报文Location指明资源临时新位置 Moved Temporarily
      3. 304
        客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;客户端上有缓存,直接从缓存返回结果;Not Modified
    4. 4xx:400-415 错误类信息,客户端错误
      1. 401
        需要输入账号和密码认证方能访问资源;Unauthorized
      2. 403
        请求被网站禁止,不是防火墙禁止访问;Forbidden
      3. 404
        服务器无法找到客户端请求的资源;Not Found
    5. 5xx:500-505 错误类信息,服务器端错误
      1. 500
        服务器内部错误;Internal Server Error
      2. 502
        代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
      3. 503
        服务不可用,临时服务器维护或过载,服务器无法处理请求
      4. 504
        网关超时 Gateway Time-out

    HTTP 首部字段(headers)
    首部字段同时存在于请求和响应报文内,并涵盖 HTTP 报文相关的内容信息。使用首部字段是为了给客服端和服务器端提供报文主体大小、所使用的语言、认证信息等内容

    1. 首部字段结构
      HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔,字段值对应单个 HTTP 首部字段可以有多个值
      报文首部中出现了两个或以上具有相同首部字段名的首部字段时,在规范内尚未明确,根据浏览器内部处理逻辑的不同,优先处理的顺序可能不同,结果可能并不一致
    2. 首部的分类
      1. 通用首部
        请求报文和响应报文两方都会使用的首部

    首部字段 描述
    Date 报文的创建时间
    Connection 连接状态,如keep-alive, close
    Via 显示报文经过的中间节点(代理,网关),用于排除,查看哪个缓存服务器不能访问
    Cache-Control 控制缓存,如缓存时长
    MIME-Version 发送端使用的MIME版本
    Warning 错误通知

    请求首部
    从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息

    首部字段 描述
    Accept 通知服务器自己可接受的媒体类型
    Accept-Charset 客户端可接受的字符集
    Accept-Encoding 客户端可接受编码格式,如gzip
    Accept-Language 客户端可接受的语言
    Client-IP 请求的客户端IP
    Host 请求的服务器名称和端口号
    Referer 跳转至当前URI的前一个URL
    User-Agent 客户端代理,浏览器版本

    条件式请求首部

    首部字段 描述
    Expect 允许客户端列出某请求所要求的服务器行为
    If-Modified-Since 自从指定的时间之后,请求的资源是否发生过修改
    If-Unmodified-Since 与上面相反
    If-None-Match 本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配
    If-Match 与上面相反

    安全请求首部

    首部字段 描述
    Authorization 向服务器发送认证信息,如账号和密码
    Cookie 客户端向服务器发送cookie
    Cookie2 用于说明请求端支持的cookie版本

    代理请求首部

    首部字段 描述
    Proxy-Authorization 向代理服务器认证

    响应首部
    从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息
    信息性

    首部字段 描述
    Age 从最初创建开始,响应持续时长
    Server 服务器程序软件名称和版本

    协商首部:某资源有多种表示方法时使用

    首部字段 描述
    Accept-Ranges 服务器可接受的请求范围类型
    Vary 服务器查看的其它首部列表

    安全响应首部:

    首部字段 描述
    Set-Cookie 向客户端设置cookie
    Set-Cookie2 以上面相似
    WWW-Authenticate 来自服务器对客户端的质询列表

    实体首部
    针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息

    首部字段 描述
    Allow 列出对此资源实体可使用的请求方法
    Location 告诉客户端真正的实体位于何处
    Content-Encoding 对主体执行的编码
    Content-Language 理解主体时最适合的语言
    Content-Length 主体的长度
    Content-Location 实体真正所处位置
    Content-Type 主体的对象类型,如text

    缓存相关:

    首部字段 描述
    ETag 实体的扩展标签
    Expires 实体的过期时间
    Last-Modified 最后一次修改的时间

    扩展首部

    HTTP 无状态及解决方案 Cookie
    协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。可是随着 Web 的不断发展,很多业务都需要对通信状态进行保存。于是引入了 Cookie 技术。

    1. Cookie 技术
      使用 Cookie 的状态管理Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存Cookie。
      当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息
      1. cookie过期时间
        1. 会话cookie
          生命期在浏览器会话期间,关闭浏览器此cookie就会消失,一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
        2. 持久性cookie
          若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间,存储在硬盘上的cookie可以在不同的浏览器进程间共享
      2. 安全性
        1. 隐患
          在Web应用中,Cookie常用来标记用户或授权会话。因此,如果Web应用的Cookie被窃取,可能导致授权用户的会话受到攻击,例如跨站请求伪造(CSRF)

          跨站请求伪造(CSRF)
          如在不安全聊天室或论坛上的一张图片,它实际上是一个给你银行服务器发送提现的
          当你打开含有了这张图片的HTML页面时,如果你之前已经登录了你的银行帐号并且Cookie仍然有效(还没有其它验证步骤),你银行里的钱很可能会被自动转走。

        2. 应对方法
          1. 对用户输入进行过滤阻止XSS
          2. 任何敏感操作都需要确认
          3. 用于敏感信息的cookie只能拥有较短的生命期
      3. Set-Cookie首部字段
        1. 示例
          Set-Cookie: status=enable; expires=Fri, 24 Nov 2017 20:30:02 GMT; path=/;
          
          • 1
        2. 键值描述
          1. NAME=VALUE
            赋予 Cookie 的名称和其值,此为必需项
          2. expires=DATE
            Cookie 的有效期,若不明确指定则默认为浏览器关闭前为止
          3. path=PATH
            将服务器上的文件目录作为Cookie的适用对象,若不指定则默认为文档所在的文件目录
          4. domain=域名
            作为 Cookie 适用对象的域名,若不指定则默认为创建 Cookie的服务器的域名
          5. Secure
            Cookie只应通过被HTTPS协议加密过的请求发送给服务端,因为Cookie有其固有的不安全性,敏感信息也不应该通过Cookie传输
          6. HttpOnly
            加以限制使 Cookie 不能被 JavaScript 脚本访问
        3. cookie实现过程示例
          安装php软件,提供httpd动态页面处理
          [root@hai7-6 conf]$yum install php
          
          • 1
          编写一个cookie
          [root@hai7-6 html]$vim /var/www/html/setcookie.php
          <?php                          <==php语句块关键字
          setcookie('title','cto');      <==setcookie为系统函数,用于设置cookie的键值对
          setcookie('name','wang',time()+3600*12);   <==time()为系统函数,表示当前时间,+3600*12表示有效期有12小时
          ?>
          
          • 1
          • 2
          • 3
          • 4
          • 5
          将浏览器中的cookie清空,以chrome为例,设置→高级设置→内容设置→cookie→查看所有cookie和网站数据,在网页访问http://localhost/setcookie.php
          http://192.168.50.107/setcookie.php	
          
          • 1
          在网页设置中查看所有cookie和网站数据,会有如下界面,就是setcookie.php设置的cookie值
          在这里插入图片描述
    2. 服务器端session
      服务器端记录用户状态的机制,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId,此ID以cookie的键值形式发送给用户(key为JSSIONID,value为ID)
      session用于存储用户会话所需的属性及配置信息,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去
    3. cookie和session区别
      1. cookie是存放在客户端,session存放在服务器
      2. cookie通常有大小限制(常见4k)以及数量限制(部分浏览器为20个),session大小和硬件有关,通常没有规定大小

    2. curl工具和elinks工具

    • curl工具
      基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。
      curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证, 下载文件断点续传,上载文件断点续传, http代理服务器管道( proxy tunneling),还支持IPv6,socks5代理服务器,通过http代理服务器上传文件到FTP服务器等,功能十分强大

      1. 语法格式
        curl [options] [URL…]
      2. 常用选项
        1. -A/--user-agent <string>:设置用户代理发送给服务器
          1. 正常访问网站,会在日志文件中记录使用的浏览器
          [root@hai6  ~]$curl http://192.168.50.107
          在日志中显示的信息为
          "curl/7.19.7 (x86_64-redhat-linux-gnu)"
          2. 增加-A,指定浏览器为IE100
          [root@hai6  ~]$curl -A 'IE100' http://192.168.50.107
          在日志中显示的信息为
          "IE100"
          	```
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
        2. -e/--referer <URL>:来源网址,伪造跳转网站
          1. 在访问时增加-e,会伪造指定的跳转地址
          [root@hai6  ~]$curl -A 'IE100'  -e 'www.baidu.com' http://192.168.50.107
          2. 在访问日志文件referer行就会添加www.baidu.com
          "www.baidu.com" "IE100"
          
          • 1
          • 2
          • 3
          • 4
        3. --cacert <file>: CA证书 (SSL)
        4. -k/--insecure :允许忽略证书进行 SSL 连接
        5. --compressed: 要求返回是压缩的格式,需要服务器端支持压缩
        6. -H/--header <line>:自定义首部信息传递给服务器
          指定主机头HOST:www.a.com,实际访问的为www.c.com
          [root@hai6  ~]$curl -H "host: www.c.com"  www.a.com
          
          • 1
          • 2
        7. -i:显示页面内容,包括报文首部信息
        8. -I/--head: 只显示响应报文首部信息
        9. -D/--dump-header <file>:将url的header信息存放在指定文件中
        10. --basic: 使用HTTP基本认证
        11. -u/--user <user[:password]>:设置服务器的用户和密码
        12. -L:如果有3xx响应码,重新发请求到新位置
          1. '当访问网站被跳转时,使用curl正常访问只会返回网站被跳转信息'
          [root@hai6  ~]$curl www.taobao.com
          <p>The requested resource resides temporarily under a different URI.</p>
          2. '加上-L会显示跳转后的页面'
          [root@hai6  ~]$curl -L  www.taobao.com
          
          • 1
          • 2
          • 3
          • 4
          • 5
        13. -O: 使用URL中默认的文件名保存文件到本地
        14. -o <file>:将网络文件保存为指定的文件中,不可以下载二进制文件,可能会出错
        15. --limit-rate <rate>: 设置传输速度
        16. -0/--http1.0: 指定使用HTTP 1.0
        17. -v/--verbose: 更详细
        18. -C:选项可对文件使用断点续传功能
        19. -c/--cookie-jar <file name>: 将url中cookie存放在指定文件中
        20. -x/--proxy <proxyhost[:port]>:指定代理服务器地址
        21. -X/--request <command>: 向服务器发送指定请求方法
          [root@hai6  ~]$curl -I -X OPTIONS 192.168.50.107
          Allow: GET,HEAD,POST,OPTIONS,TRACE
          
          • 1
          • 2
        22. -U/--proxy-user <user:password>: 代理服务器用户和密码
        23. -T: 选项可将指定的本地文件上传到FTP服务器上
        24. --data/-d:方式指定使用POST方式传递数据
        25. -b name=data: 从服务器响应set-cookie得到值,返回给服务器
    • elinks工具

      1. 安装服务包
        yum -y install elinks
        
        • 1
      2. 语法格式
        elinks [OPTION]… [URL]…
      3. 参数
        1. -dump:非交互式模式,将URL的内容输出至标准输出
        2. -source:打印源码

    3. mod_deflate模块

    mod_deflate模块提供DEFLATE输出过滤器,运行在通过网络发送到客户端之前压缩来自服务器的输出

    • 适用场景:

      1. 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
      2. 压缩适于压缩的资源,例如文本文件
    • 可以压缩常见的基于文本的内容类型

      AddOutputFilterByType DEFLATE |text/html |text/plain |text/xml |text/css |text/javascript| application/javascript|
      
      • 1
    • 查看模块是否已加载

      [root@hai7-6 html]$httpd -M |grep  deflate
       deflate_module (shared)   <==加载状态
      
      • 1
      • 2
    • 加载模块配置方法
      LoadModule deflate_module modules/mod_deflate.so

    • 将压缩限制为特定的MIME类型,使用AddOutputFilterByType指令

      <Directory "/your-server-root/manual">    <==授权目录
      AddOutputFilterByType DEFLATE text/html   <==限定需要压缩的类型
      </Directory>
      
      • 1
      • 2
      • 3
    • 压缩级别Level of compression (Highest 9 - Lowest 1)
      DeflateCompressionLevel 9

    • 排除特定旧版本的浏览器,不支持压缩

      1. Netscape 4.x 只压缩text/html
        BrowserMatch  ^Mozilla/4  gzip-only-text/html
        
        • 1
      2. Netscape 4.06-08三个版本 不压缩
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        
        • 1
      3. Internet Explorer标识本身为“Mozilla / 4”,但实际上是能够处理请求的压缩。如果用户代理首部匹配字符串“MSIE”(“B”为单词边界”),就关闭之前定义的限制
        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
        
        • 1
    • 示例:将text/html格式的文件输出时压缩压缩,配置如下

      SetOutputFilter DEFLATE                        
      # Restrict compression to these MIME types  
      AddOutputFilterByType DEFLATE text/html     <==支持压缩的格式,可以自定义选择
      
      • 1
      • 2
      • 3

    4. 加密访问https(http over ssl)

    Apache一个IP地址只支持一次加密,虚拟主机FQDN方式只能加密一个

    • SSL会话的简化过程

      1. 客户端发送可供选择的加密方式,并向服务器请求证书
      2. 服务器端发送证书以及选定的加密方式给客户端
      3. 客户端取得证书并进行证书验证(如果信任给其发证书的CA)
        1. 验证证书来源的合法性;用CA的公钥解密证书上数字签名
        2. 验证证书的内容的合法性:完整性验证
        3. 检查证书的有效期限
        4. 检查证书是否被吊销
        5. 证书中拥有者的名字,与访问的目标主机要一致
      4. 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
      5. 服务用此密钥加密用户请求的资源,响应给客户端
    • https实现过程

      1. 配置httpd支持使用ssl,及使用的证书,需要安装mod_ssl,使httpd支持加密模块
        [root@hai7115 ~]$yum -y install mod_ssl
        
        • 1
      2. 搭建私有CA(在生产中是需要向权威机构申请证书的)
        1. 在预搭建CA主机A上申请私钥,必须放在 private/下,必须叫cakey.pem,因为有配置文件定义,所以要按规范写
          进入CA目录
          [root@hai7115 ~]$cd /etc/pki/CA
          [root@hai7115 CA]$(umask 077;openssl genrsa -out private/cakey.pem 2048)
          
          • 1
          • 2
          • 3
        2. 自签名证书,生成的证书必须放在当前/etc/pki/CA目录
          [root@hai7115 CA]$openssl req -new -x509 -key private/cakey.pem  -out cacert.pem
          
          • 1
        3. 创建颁发系列号
          [root@hai7115 CA]$touch index.txt
          [root@hai7115 CA]$echo 01 > serial
          
          • 1
          • 2
      3. http服务器B申请证书
        1. 在B主机上生成私钥,然后生成证书申请
          生成证书申请文件
          [root@hai7-6 ssl]$openssl req -new -key httpd.key -out httpd.csr
          
          • 1
          • 2
        2. 将文件拷贝到CA服务器
          [root@hai7-6 ssl]$scp httpd.csr 192.168.50.115:/etc/pki/CA/
          
          • 1
        3. CA服务器为B签名,签名后将证书发送给B
          1. '为申请证书B签名'
          [root@hai7115 CA]$openssl ca -in httpd.csr -out certs/httpd.crt
          2. '将客户端证书和CA证书一起发送给客户端'
          [root@hai7115 CA]$scp  cacert.pem  certs/httpd.crt 	192.168.50.107:/etc/httpd/conf.d/ssl
          
          • 1
          • 2
          • 3
          • 4
      4. http服务器拿到证书后,实现https配置
        1. 客户端修改mod_ssl配置文件,重启服务
          [root@hai7-6 ~]$vim /etc/httpd/conf.d/ssl.conf
          #   Server Certificate:
          SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt      <==修改为申请的证书存放路径
          #   Server Private Key:
          SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key   <==修改为生成的私钥路径
          #   Certificate Authority (CA):
          SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem    <==去掉注释,修改CA证书存放路径
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
        2. 重启服务
          [root@hai7-6 conf.d]$systemctl restart httpd
          
          • 1
    • 测试基于https访问相应的主机

      1. 语法格式
        openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
      2. 示例
        1. 通过CA证书测试目标地址证书信息
          [root@hai7115 CA]$openssl s_client  -connect 192.168.50.107:443  -CAfile cacert.pem
          
          • 1
        2. 使用curl通过CA证书测试目标地址,cacert.pem为CA证书
          [root@hai7115 CA]$curl --cacert cacert.pem    https://www.moli.com
          
          • 1
    • 安装mod_ssl 时系统会通过脚本,生成默认的私钥和证书文件

      查看生成默认私钥和证书的脚本
      [root@hai7-6 conf]$rpm -q --scripts mod_ssl
      
      • 1
      • 2

    5. http重定向https

    将http请求转发至https的URL,https带来的问题是并发处理能力降低

    • 在介绍内容前,先将http和https的网页做成不同的样式

      1. 新建一个目录,放https主页文件
        1. '在/var/www/下创建ssl目录放https的页面文件'
        [root@hai7-6 www]$mkdir  /var/www/ssl
        2. '在ssl下创建一个页面文件index.html'
        root@hai7-6 www]$echo /var/www/ssl/index.html > /var/www/ssl/index.html
        
        • 1
        • 2
        • 3
        • 4
      2. 修改mod_ssl配置文件
        [root@hai7-6 ssl]$vim /etc/httpd/conf.d/ssl.conf 
        #DocumentRoot "/var/www/html"  <==https默认的访问页面路径,可以修改		
        DocumentRoot "/var/www/ssl"    <==新建一行以上项,修改为我们定义的https页面文件目录
        
        • 1
        • 2
        • 3
    • 实现重定向

      1. 配置命令
        Redirect [status] URL-path URL
      2. 参数
        status状态:
        1. Permanent
          Returns a permanent redirect status (301) indicating that the resource has moved permanently
        2. Temp
          Returns a temporary redirect status (302). This is the default
        3. 示例:
          Redirect temp / https://192.168.50.107/
    • 实现跳转HTTPS示例

      1. 在http配置文件中加入跳转命令配置
        [root@hai7-6 ~]$vim /etc/httpd/conf.d/text.conf
        Redirect temp /  https://192.168.50.107     <==跳转配置,只要访问服务器根目录,自动跳转到https上
        
        • 1
        • 2
      2. 这样配置后,跳转到https后,会出现保存提示ERR_TOO_MANY_REDIRECTS,因为访问根就会跳转,所以跳转到https后,又一次访问192.168.50.107的根目录,再次跳转,解决此问题配置为如下内容
        1. '修改配置文件'
        [root@hai7-6 ~]$vim /etc/httpd/conf.d/text.conf
        RewriteEngine on                         <==启动RewriteEngine引擎
        rewritecond   %{SERVER_PORT}  !^443      <==设置跳转条件,接口号非443才跳转
        RewriteRule  ^(/.*)$  https://%{HTTP_HOST}$1 [redirect=302]  <==跳转到哪里
        3. 重新启动服务
        [root@hai7-6 conf.d]$systemctl restart httpd
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        成功跳转到https后可以进行加密访问,但前面的跳转过程仍然是不加密的,有被中间人攻击的危险,解决此问题采用的方法为HSTS
    • HSTS:HTTP Strict Transport Security

      1. 作用
        HSTS可以用来抵御SSL剥离攻击,只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP

        SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://,达到阻止HTTPS的目的

      2. HSTS实现过程
        当客户端通过HTTPS向服务器XXX发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security字段(非加密传输时设置的HSTS字段无效)
        在STS字段中定义的时间内,客户端浏览器只要向服务器XXX发起请求,浏览器会在内部做3XX重定向跳转到HTTPS,而无需任何网络过程,
      3. 不足之处
        用户首次访问某网站是不受HSTS保护的,这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问
      4. 解决方案为HSTS preload list(HSTS预列表)
        1. HSTS preload list
          此列表将世界上目前有的https网站都收录起来,载入到浏览器中,方便用户第一次访问网站时直接加密访问,是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS,Firefox、Safari、Edge浏览器也会采用这个列表
        2. 将HSTS信息加入到域名系统记录中
          需要保证DNS的安全性,也就是需要部署域名系统安全扩展。截至2014年这一方案没有大规模部署

    6. httpd自带的工具程序和压力测试工具

    • httpd自带工具
      1. htpasswd
        basic认证基于文件实现时,用到的账号密码文件生成工具
      2. apachectl
        httpd自带的服务控制脚本,支持start和stop
        [root@hai7-6 ~]$apachectl stop
        [root@hai7-6 ~]$apachectl start
        
        • 1
        • 2
      3. rotatelogs
        日志滚动工具,当系统文件过大时让其生成一个新的文件,可以确保日志的完整性
        access.log -->
        access.log, access.1.log -->
        access.log, acccess.1.log, access.2.log
    • httpd的压力测试工具
      1. 常见测试工具
        ab, webbench, http_load,seige,Jmeter (开源),Loadrunner (商业),tcpcopy(网易,复制生产环境中的真实请求,并将之保存)
      2. ab工具介绍:来自httpd-tools包,不可以在线上做压测,在测试环境就测好了
        正常压测过程中,打开一个网页不能超过3秒,测试结果的支持并发数按80%取
        跨并发测试,每种压测至少要测3次以上,取平均值
        ab测试只有参考价值,没有实际意义,因为只请求了一个URL
        一个服务器如果对静态资源只能承载10000个,那么对于动态资源可能要少于1000
        1. 语法格式
          ab [OPTIONS] URL
        2. 常用参数
          -n:总请求数
          -c:模拟的并行数,每一个并发对应一个客户端,一个客户端就需要一个套接字,一个套接字对应一个文件,一个文件对应一个文件描述符,而linux默认一个程序打开的文件上限为1024个
          -k:以持久连接模式测试
        3. 示例,测试条件超出系统范围解决方法
          [root@hai7115 ~]$ab -c 1000 -n 1500 http://192.168.50.115/
          socket: Too many open files (24)
          
          • 1
          • 2
          解决办法,修改系统文件设置值
          1. '查看系统当前文件管理设置值'
          [root@hai7115 ~]$ulimit -a   <==查询所有
          [root@hai7115 ~]$ulimit -n   <==查询单项
          2. '调整值大小'
          [root@hai7115 ~]$ulimit -n 2000
          
          • 1
          • 2
          • 3
          • 4
          • 5
        4. 示例,压测输出信息
    [root@hai7-6 conf.d]$ab -c 50 -n 100 http://192.168.50.107/
    

    ….省略
    Server Software: Apache/2.4.6 <==服务器程序版本号
    Server Hostname: 192.168.50.107 <==请求的主机名称
    Server Port: 80 <==服务器对应端口

    Document Path: / <==压测时的URL
    Document Length: 5 bytes <==URL对应相应内容的长度

    Concurrency Level: 50 <==并发数
    Time taken for tests: 0.023 seconds <==整体测试时间
    Complete requests: 100 <==整体完成相应请求数
    Failed requests: 0 <==错误的请求数
    Write errors: 0 <==相应错误数
    Total transferred: 27400 bytes <==整体字节数
    HTML transferred: 500 bytes <==HTML占了多少内容,上面那个是带首部的总体大小
    Requests per second: 4359.58 [#/sec] (mean) <==每秒处理请求数
    Time per request: 11.469 [ms] (mean) <==平均每组请求所有时间
    Time per request: 0.229 [ms] (mean, across all concurrent requests) <==每个请求平均用时
    Transfer rate: 1166.53 [Kbytes/sec] received <==传输速率

    Connection Times (ms)
    min mean[+/-sd] median max
    最少用时 平均值 中间值 最慢用时
    Connect: 0 1 1.0 2 3
    连接建立
    Processing: 1 7 2.4 8 10
    处理请求
    Waiting: 1 7 2.5 8 10
    等待将请求报文发送给客户端接收完成
    Total: 4 8 1.8 9 12
    整体完成
    Percentage of the requests served within a certain time (ms)
    50% 9
    66% 9
    75% 10
    80% 10
    90% 10
    95% 11
    98% 11
    99% 12
    100% 12 (longest request)

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    7. httpd-2.4较2.2的改变

    • 新增特性
      1. MPM支持运行为DSO机制;以模块形式按需加载
      2. event MPM生产环境可用
      3. 异步读写机制
      4. 支持每模块及每目录的单独日志级别定义
      5. 每请求相关的专用配置
      6. 增强版的表达式分析式
      7. 毫秒级持久连接时长定义
      8. 基于FQDN的虚拟主机不需要NameVirutalHost指令
      9. 新指令,AllowOverrideList
      10. 支持用户自定义变量
      11. 更低的内存消耗
    • 修改了一些配置机制
      不再支持使用Order, Deny, Allow来做基于IP的访问控制
      1. 新模块
        1. mod_proxy_fcgi
          支持FastCGI Protocol
        2. mod_remoteip
          用反向代理的IP地址代替远程客户机的IP
        3. mod_ratelimit
          提供带宽控制
      2. 基于IP的访问控制:
        1. 无明确授权的目录,默认拒绝
        2. 允许所有主机访问:Require all granted
        3. 拒绝所有主机访问:Require all denied
        4. 控制特定的IP访问:
          1. 先授权指定来源的IP访问:Require ip IPADDR
          2. 再拒绝特定的IP访问:Require not ip IPADDR
        5. 控制特定的主机访问:
          1. 授权特定主机访问:Require host HOSTNAME
          2. 拒绝 HOSTNAME:Require not host HOSTNAME
          3. 特定主机:FQDN
          4. 指定域名下的所有主机:domin.tld
      3. 虚拟主机
        基于FQDN的虚拟主机不再需要NameVirutalHost指令
        <VirtualHost *:80>
        ServerName www.b.net
        DocumentRoot "/apps/b.net/htdocs"
        <Directory "/apps/b.net/htdocs">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
        </VirtualHost>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        注意:任意目录下的页面只有显式授权才能被访问
      4. KeepAlive on
        毫秒级持久连接时长定义
        KeepAliveTimeout #ms
        MaxKeepAliveRequests 100

    8. Sendfile机制

    • 不用 sendfile 的传统网络传输过程(需要经历4次I/O过程)
      1. 过程
        1. 网络I\O连接过程,通过网卡接收请求存放在网卡buffer,接收完成后发送给内核,暂存在内核buffer当中
        2. 内核解封装后找到监听端口,转发给进程
        3. 进程分析用户请求后,要通过内核读取磁盘拿到网页文件,也就是磁盘I/O过程
        4. 内核读取磁盘文件,需要将数据加载到内核的内存空间,加载完成后再发送个用户空间的进程(此过程很慢,进程将大量时间耗在等待)
        5. 应用程序进程处理数据,添加头部信息,形成新的回应报文,发送给内核,在通过网卡传回给用户
      2. 4次I/O
        硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协议栈
        一般网络应用通过读硬盘数据,写数据到 socket 来完成网络传输,底层执行过程:
        1. 系统调用 read() 产生一个上下文切换:从 user mode 切换到 kernel mode,然后 DMA 执行拷贝,把文件数据从硬盘读到一个 kernel buffer 里。
        2. 数据从 kernel buffer 拷贝到 user buffer,然后系统调用 read() 返回,这时又产生一个上下文切换:从kernel mode 切换到 user mode
        3. 系统调用 write() 产生一个上下文切换:从 user mode 切换到 kernel mode,然后把步骤2读到 user buffer 的数据拷贝到 kernel buffer(数据第2次拷贝到 kernel buffer),不过这次是个不同的 kernel buffer,这个 buffer和 socket 相关联。
        4. 系统调用 write() 返回,产生一个上下文切换:从 kernel mode 切换到 user mode(第4次切换),然后DMA从 kernel buffer 拷贝数据到协议栈(第4次拷贝)
    • Sendfile机制
      在kernel 2.0+ 版本中,系统调用 sendfile() 就是用来简化上面步骤提升性能的。sendfile() 不但能减少切换次数而且还能减少拷贝次数
      用 sendfile() 来进行网络传输的过程:sendfile(socket, file, len)
      硬盘 >> kernel buffer (快速拷贝到kernel socket buffer) >> 协议栈
      1. 系统调用 sendfile() 通过 DMA 把硬盘数据拷贝到 kernel buffer,然后数据被 kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer。这里没有 user mode 和 kernel mode 之间的切换,在 kernel 中直接完成了从一个 buffer 到另一个 buffer 的拷贝
      2. DMA 把数据从 kernel buffer 直接拷贝给协议栈,没有切换,也不需要数据从 user mode 拷贝到 kernel mode,因为数据就在 kernel 里
    • 不支持Sendfile的场景
      服务器上的数据是通过其他服务器获取的,也就是说用户访问的数据不在本机磁盘中

    反向代理功能

    编译安装httpd-2.4

    • 安装httpd-2.4需要的源码

      1. httpd-2.4源码:httpd-2.4.34.tar.bz2
      2. arp可移植运行库源码:apr-1.6.3.tar.gz、apr-util-1.6.1.tar.gz
    • 安装前准备开发包:

      1. 开发环境包组:Development Tools,Server
      2. 依赖包:pcre-devel openssl-devel expat-devel
    • APR(Apache portable Run-time libraries,Apache可移植运行库)

      1. 作用
        主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库
      2. 为何开发
        在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数
        随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。目前APR主要还是由Apache使用,由于APR的较好的移植性,因此一些需要进行移植的C程序也开始使用APR,开源项目比如用于服务器压力测试的Flood loader tester,该项目不仅仅适用于Apache
      3. 参考
        http://httpd.apache.org/test/flood
    • 编译安装httpd-2.4方法

      1. 方法一,将内核与接口分别编译
        1. 编译安装apr-1.4+
          1. 进入apr解压目录:cd apr-1.6.2
          2. 编译:./configure --prefix=/app/apr
          3. 构造并安装:make && make install
        2. 编译安装apr-util-1.4+
          1. 进入apr-util解压目录:cd …/apr-util-1.6.0
          2. 编译:./configure --prefix=/app/apr-util --with-apr=/app/apr/
          3. 构造并安装make -j 2 && make install
        3. 编译安装httpd-2.4
          1. 进入httpd解压目录:cd …/httpd-2.4.27
          2. 编译:./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/app/apr/ --with-apr-util=/app/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
          3. 构造并安装:make -j 4 && make install
      2. 方法二,放在一起编译
        1. 安装开发包组
          [root@hai7115 ~]$yum groupinstall "development tools"
          
          • 1
        2. 安装依赖的程序包,以下这些为编译经验所得,可以在编译过程中发现查看安装
          [root@hai7115 ~]$yum install  pcre-devel  openssl-devel  expat-devel
          
          • 1
        3. 官方下载httpd源码,以及依赖的apr包(apr-1.6.3.tar.gz、apr-util-1.6.1.tar.gz 、httpd-2.4.34.tar.bz2
          ),导入linux中,然后解压缩
          [root@hai7115 srcd]$tar xf apr-1.6.3.tar.gz 
          [root@hai7115 srcd]$tar xf apr-util-1.6.1.tar.gz 
          [root@hai7115 srcd]$tar xf httpd-2.4.34.tar.bz2 
          
          • 1
          • 2
          • 3
        4. 将apr和apr-util整个目录拷贝到httpd-2.4.34/srclib/目录下
          [root@hai7115 srcd]$cp -r apr-1.6.3 httpd-2.4.34/srclib/apr
          [root@hai7115 srcd]$cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util
          
          • 1
          • 2
        5. 编译
          '进入httpd解压后的目录,运行configure'
          ./configure\
          --prefix=/app/httpd24\
          --enable-so\      		  <==是否支持动态模块
          --enable-ssl\  			  <==是否支持加密
          --enable-cgi\    
          --enable-rewrite\
          --with-zlib\     
          --with-pcre\      		  <==正则表达式
          --with-included-apr\      <==表示已经将apr相关需要编译的内容放在httpd相关的路径下,可以一起编译
          --enable-modules=most\    <==是否支持大部分模块
          --enable-mpms-shared=all\
          --with-mpm=prefork        <==是否支持mpm的prefork工作模型
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
        6. 构造和安装
          [root@hai7115 httpd-2.4.34]$make -j 8  && make install
          
          • 1
        7. 配置环境变量,生效变量,启动程序
          [root@hai7115 httpd-2.4.34]$echo PATH=/app/httpd24/bin:$PATH > /etc/profile.d/httpd.sh
          [root@hai7115 httpd-2.4.34]$. /etc/profile.d/httpd.sh
          
          • 1
          • 2
        8. 初始页面存放目录
          [root@hai7115 htdocs]$cat /app/httpd24/htdocs/index.html 
          <html><body><h1>It works!</h1></body></html>
          
          • 1
          • 2
        9. 设置开机启动,将其放在系统启动脚本中,给启动脚本加上执行权限
          [root@hai7115 ~]$echo "/app/httpd24/bin/apachectl start" >> /etc/rc.d/rc.local
          [root@hai7115 ~]$chmod +x /etc/rc.d/rc.local 
          
          • 1
          • 2
            </div>
    					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
                </div>
    
    展开全文
  • Apache2配置目录分析(详细版)

    万次阅读 2018-05-06 14:21:44
    我们来看apache2服务器的标准启动命令:/etc/init.d/apache2 start。其他命令如service apache2 start都是间接调用了上面的命令,找到脚本apache2然后执行而已。/etc/init.d这个目录是所有服务的脚本,可以通过执行...

    ls  -al用来查看软件的软链接信息。出现->的都是进行了软链接,后面才是真正的目录。

    我们来看apache2服务器的标准启动命令:

     /etc/init.d/apache2 start

    其他命令如service apache2 start都是间接调用了上面的命令,找到脚本apache2然后执行而已。

    /etc/init.d这个目录是所有服务(如何web服务、ftp服务、mysql...)的脚本,通过在执行脚本时加上参数,可以开启、关闭或者重启对应的服务。上面就是执行init.d文件及下的apache2脚本来启动apche2服务器,其他服务器都是类似原理。

    下面就是脚本文件的内容,开头#!/bin/sh就是表明了这个脚本文件是用Shell--sh来执行的,其他的就不看了。

    我们输入/etc/init.d/apache2 start时候,系统就会执行apache2脚本文件,然后会转去调用配置文件apache2.conf。

    这个文件就是apache2服务器的配置文件,它在 /etc/apache2目录下。

     

    我们来看看这个配置都写了啥:

     

    上面将/etc/apache2目录大致情况列举了出来。大致意思就是里面有配置

    1、apaceh2.conf、
    
    2、端口配置文件port.conf、
    
    3、mods-enable文件夹,这个文件夹下都是*.load和*.conf后缀的文件。
    
    4、site-enable文件夹,这个文件夹下都是*.conf后缀的文件。

    其实还有其他的文件,它没列举出来。请看下图,比上图更直接清晰:

    我们再接着看apache2.conf的内容:

     

    第一句的大致意思就是在说,apache2.conf是个主配置文件,当apache2服务器启动时,就将零散的配置文件以Including方式组合在一起。看到这,你就应该知道了,这个文件不是真正的具体配置文件,它只是把各个零散的配置文件以inluceding方式包含进来。apache2.conf其实就是负责调用其他配置文件的。不信看下图:

    这就是将端口配置文件包含进来调用。这个配置文件它是怎么写的,apache2.conf根本是不知道到,因为不是它写的。

    其他也类似,如下面的就是将配置文件conf-enable和sites-enable这两个配置启动文件包含进来。它也没具体的实现部分。

     

    我们来看下mods-availablel和mods-enabled文件夹:这两个文件夹里面存放的都是一些apache2的读写操作等模块,mods-enabled是apache2服务器的启动配置文件,mods-available是apache2服务器可以使用的配置文件,如下图;

    通过上面,你是不是发现了什么?

    我们发现mods-enable里面的文件都是mods-available中的快捷方式(或则称为软连接)。

    再看mods-available的内容,下图是mods-avalible文件夹下的rewriter模块文件信息:

    我们发现,这里才是具体配置的代码实现部分。

    所以,你如果想给apache2添加什么功能模块,直接建立一个从avalible中建立一个快捷方式到enabled中就行了,删除也是一样,删掉enabled中的某模块的快捷方式就行了,实际的模块代码还在available中没有消失。

    我们再来看看下面两个比较重要的配置文件夹site-available和site-enabled。这两个是网站根目录的配置文件。

     

     

    sites-enabled是apache2正在使用的网站配置文件,sites-available是apache2可用的网站配置文件。

    enabled中只有一个000-default.conf快捷方式。availbel中有一个000-default.conf和default-ssl.conf两个文件。

    000-default.conf是使用http协议网站的默认网站配置文件,而default-ss.conf是https协议网站才使用的默认网站配置文件。

    https还需要申请ssl证书,这里我们就不讲default-ss.conf,反正我也用不到https协议。

     

    打开000-defaut.con文件。

    ServerAdmin: 设置一个邮件地址,如果服务器有任何问题将发信到这个地址, 这个地址会在服务器产生的某些页面中出现。

    DocumentRoot 是这个站点的根目录,这样 Apache2 启动时会扫描 /etc/apache2/sites-enabled 中可用的 website 配置并加载。

    当用户访问localhost:80 时,Apache2 就将 default 站点根目录 /var/www/html 下的index.html(或 index.PHP 等,可配置)作为请求的回应返回给浏览器,然后你能欣赏到的就是 /var/www/html/index.html 这个文件的内容了。

     

    我们现在试着修改这里的根目录为:/var/www,然后写一个html文件,文件内容如下:

    <html>
    
    <head>
    
    <body>this is my website</body>
    
    </head>
    
    </html>

     

    特别注意;我们修改了apache2配置信息,但必须重启才能生效。

    service apacehe2 restart 

     或

    /etc/init.d/apache2 restart。

    一定记住,每次修改配置后,都要重启apache2服务器,不然配置不会立即生效。

    特别注意,我们现在这样访问网站,是不会显示具体内容的。不信看图:

    我们发现,我们通过浏览器是看到了我们的test.html文件,但是为什么没显示内容呢。

    那是因为服务默认的显示格式没有test.html。默认的显示格式在/etc/apache2/mods-available/dir.conf文件中。如下图所示:默认显示的格式有:index.html index.cgi index.pl index.php index.xhtml index.htm

    我们在dir.conf文件最后添加test.html格式。看看能不能显示呢:

    nice, 成功了。

    看了这么多,你对apache2的目录是不是了解了不少呢,现在请尝试修改下网站根目录实践一下吧。

     

    如果你觉得博主的文章对你有用,请给博主一个一个赞/关注。

     

     

     

    展开全文
  • Ubuntu搭建Apache2服务

    千次阅读 2019-06-26 23:59:00
    在本指南中,我们将讨论如何在Ubuntu 16.04服务器上安装Apache Web服务器。 第1步:安装Apache Apache在Ubuntu的默认软件库中可用,因此我们将使用传统的软件包管理工具进行安装。 我们将从更新本地包索引开始,...

    介绍

    Apache HTTP服务器是世界上使用最广泛的Web服务器。 它提供了许多强大的功能,包括动态加载模块,强大的媒体支持,以及与其他流行软件的广泛集成。

    在本指南中,我们将讨论如何在Ubuntu 16.04服务器上安装Apache Web服务器。

    第1步:安装Apache

    Apache在Ubuntu的默认软件库中可用,因此我们将使用传统的软件包管理工具进行安装。

    我们将从更新本地包索引开始,以反映最新的上游更改。 之后,我们可以安装apache2包:

    sudo apt-get install apache2
    

    确认安装后, apt-get将安装Apache和所有必需的依赖项。

    img

    第2步:调整防火墙

    在我们测试Apache之前,我们需要修改我们的防火墙以允许外部访问默认的Web端口。 假设您遵循先决条件中的说明,您应该配置一个UFW防火墙来限制对您的服务器的访问。

    在安装过程中,Apache向UFW注册自己,以提供一些应用程序配置文件。 我们可以使用这些配置文件来简化通过我们的防火墙启用或禁用访问Apache的过程。

    我们可以通过键入以下内容列出ufw程序配置文件:

    sudo ufw app list
    

    您应该获得应用程序配置文件的列表:

    OutputAvailable applications:
      Apache
      Apache Full
      Apache Secure
    

    您可以看到,有三种可用于Apache的配置文件:

    • Apache :此配置文件仅打开端口80(正常,未加密的Web流量)
    • Apache Full :此配置文件打开端口80(正常,未加密的Web流量)和端口443(TLS / SSL加密流量)
    • Apache Secure :此配置文件仅打开端口443(TLS / SSL加密流量)

    为了我们的目的,我们将通过键入以下方式来允许Apache Full配置文件的传入流量:

    sudo ufw allow 'Apache Full'
    

    img

    第3步:检查您的Web服务器

    在安装过程结束时,Ubuntu 16.04启动Apache。 Web服务器应该已经启动并运行了。

    我们可以使用systemd init系统检查以确保该服务正在运行,方法是输入:

    sudo service apache2 status
    

    img

    如上所述,服务似乎已成功启动。 但是,测试这个的最好方法是从Apache实际请求一个页面。

    您可以访问默认的Apache着陆页,以确认软件是否正常运行。 您可以通过服务器的域名或IP地址访问此服务。

    尝试在您的服务器的命令提示符下键入:

    hostname -I
    

    你会收到一些空格分开的地址。 您可以在Web浏览器中尝试一下,看看它们是否正常工作

    也可以在虚拟机浏览器中直接访问 localhost 页面,会显示一个Apache网页,如下图

    img

    第4步:管理Apache进程

    现在,您的Web服务器启动并运行,我们可以通过一些基本的管理命令。

    要停止您的Web服务器,您可以键入:

    sudo service apache2 stop
    

    要在Web服务器停止时启动Web服务器,请键入:

    sudo service apache2 start
    

    要停止再次启动服务,请键入:

    sudo service apache2 restart
    

    如果您只是进行配置更改,Apache通常可以重新加载而不会丢弃连接。 为此,您可以使用以下命令:

    sudo service apache2 reload
    

    第5步:熟悉重要的Apache文件和目录

    现在你知道如何管理服务本身,你应该花几分钟时间来熟悉几个重要的目录和文件。

    内容

    • /var/www/html :实际的Web内容(默认情况下只包含您之前看到的默认Apache页面)由/var/www/html目录提供。 这可以通过更改Apache配置文件来更改。

      比如,我们在虚拟机 /var/www/html 目录下创建一些文件

      img

      然后再宿主机中访问 http://192.168.56.101/pyjun ,就可以查看之前在虚拟机中创建的文件

      img

    服务器配置

    • /etc/apache2 :Apache配置目录。 所有Apache配置文件驻留在此处。
    • /etc/apache2/apache2.conf的主配置文件。 这可以修改为对Apache全局配置进行更改。 该文件负责在配置目录中加载许多其他文件。
    • /etc/apache2/ports.conf :该文件指定Apache将监听的端口。 默认情况下,当启用提供SSL功能的模块时,Apache会监听端口80,并在端口443上进行监听。
    • /etc/apache2/sites-available/ :可以存储每个站点“虚拟主机”的目录。 Apache不会使用此目录中找到的配置文件,除非它们链接到sites-enabledsites-enabled目录(见下文)。 通常,所有服务器块配置都在此目录中完成,然后通过使用a2ensite命令链接到另一个目录来启用。
    • /etc/apache2/sites-enabled/ :存储启用了每个站点“虚拟主机”的目录。 通常,这些是通过链接到具有a2ensite的sites-available目录中找到的配置文件创建的。 Apache在启动或重新加载以编译完整配置时读取此目录中找到的配置文件和链接。
    • /etc/apache2/conf-available//etc/apache2/conf-enabled/ :这些目录与sites-availablesites-enabled目录具有相同的关系,但用于存储不属于虚拟主机 conf-available目录中的文件可以使用a2enconf命令启用,并使用a2enconf命令禁用。
    • /etc/apache2/mods-available//etc/apache2/mods-enabled/ :这些目录分别包含可用和启用的模块。 以.load结尾的文件包含加载特定模块的片段,而以.conf结尾的文件包含这些模块的配置。 可以使用a2enmoda2dismod命令启用和禁用模块。

    服务器日志

    • /var/log/apache2/access.log :默认情况下,对Web服务器的每个请求都记录在此日志文件中,除非Apache被配置为执行其他操作。
    • /var/log/apache2/error.log :默认情况下,所有错误都记录在此文件中。 Apache配置中的LogLevel指令指定错误日志将包含多少细节。
    展开全文
  • 安装指令:sudo apt-get install apache2安装结束后: 产生的启动和停止文件是:/etc/init.d/apache2 启动:sudo apache2 start 停止:sudo apache2 stop 重新启动:sudo apache2 restart 配置文件保存在 /etc/...

    安装指令:sudo apt-get install apache2安装结束后:

    产生的启动和停止文件是:/etc/init.d/apache2

    启动:sudo apache2 start

    停止:sudo apache2 stop

    重新启动:sudo apache2 restart

    配置文件保存在 /etc/apache2 目录下

           普通的apache发行版本配置文件是:httpd.conf,Ubuntu发行版本的主配置文件是:apache2.conf

             conf.d目录,包含的配置文件也会影响全局,其它包如果需要使用 apache 来为之服务的话可能会往里面添加文件、符号链接

             envvars文件,在里面有 apache 的环境变量的设置httpd.conf文件,以前是以它来作为 apache 的主配置文件的,是根据 httpd 这个服务进程命名的,现在可以用它来做一些用户的特定的配置

             mods-avaliable目录,包含可用模块的配置以及加载文件,在 windows 下的 httpd.conf 文件中有诸如 LoadModule ***_module modules/mod_***.so 这样的语句用来加载额外的模块,但是并不是所有的模块都有它们的配置文件

             mods-enabled目录,里面的文件是指向 mods-avaliable 目录下文件的符号链接,指向的代表激活的。如果你要加载某项模块的功能,只要把 mods-avaliable 里面的对应的模块配置文件在该目录下建立符号链接就行了,要重启 apache 服务。

             ports.conf文件,里面的指令决定apache去监听哪个 TCP 端口

             sites-avaliable目录,主要对虚拟主机做配置(在 windows 下的 httpd.conf 中要对虚拟主机做配置的话可以包含在 <VirtualHost "xxx">xxoo</VirtualHost>中),如果有多个主机的话,可以分别在几个文件中做配置。

             sites-enables目录,原理同 mods-enabled,启用哪些主机就把那些对应的在 sites-avaliable 目录下的配置文件在该目录下建立符号链接,然后重启 apache 服务。

    在apache2.conf引用到了以下文件:

      # 包含动态模块的配置:  Include /etc/apache2/mods-enabled/*.load  Include /etc/apache2/mods-enabled/*.conf

      # 包含用户自己的配置:  Include /etc/apache2/httpd.conf

      # 包含端口监听的配置:  Include /etc/apache2/ports.conf

      # 包含一般性的配置语句片断: Include /etc/apache2/conf.d/

      # 包含虚拟主机的配置指令:  Include /etc/apache2/sites-enabled/

      修改httpd.conf,增加:  ServerName 127.0.0.1:80

     

    ubuntu apache2配置

    1.apache2.conf 是主配置文件,httpd.conf 用户配置文件

    2.虚拟目录在 httpd.conf 中

    <VirtualHost *>  
    DocumentRoot "路径"  
    ServerName 名称  
    <Directory "路径"> allow from all Options +Indexes </Directory>  
    </VirtualHost>  
      
    <VirtualHost *:80>  
    ServerName www.test.com  
    DocumentRoot /home/test  
    </VirtualHost> 

    3.根设置(默认主目录)在 /etc/apache2/sites-available/default

    4.重启命令  sudo /etc/init.d/apache2 restart 或者 cd /etc/init.d sudo apache2 restart

    5.日志文件在 /var/log/apache2/

     

    vim /etc/httpd/conf/httpd.conf

          在Windows下,Apache的配置文件通常只有一个,就是httpd.conf。但我在Ubuntu Linux上用apt-getinstall apache2命令安装了Apache2后,竟然发现它的httpd.conf(位于/etc/apache2目录)是空的!进而发现Ubuntu的Apache软件包的配置文件并不像Windows的那样简单,它把各个设置项分在了不同的配置文件中。严格地说,Ubuntu的Apache(或者应该说Linux下的Apache)的配置文件是/etc/apache2/apache2.conf,Apache在启动时会自动读取这个文件的配置信息。而其他的一些配置文件,如httpd.conf等,则是通过Include指令包含进来。当然,完全可以把所有的设置放在apache2.conf或者httpd.conf或者任何一个配置文件中。Apache2的这种划分只是一种比较好的习惯。

          安装完Apache后的最重要的一件事就是要知道Web文档根目录在什么地方,对于Ubuntu而言,默认的是/var/www。怎么知道的呢?apache2.conf里并没有DocumentRoot项,httpd.conf又是空的,因此肯定在其他的文件中。经过搜索,发现在/etc/apache2/sites-enabled/000-default中,里面有这样的内容:

    NameVirtualHost *  
    <VirtualHost *>  
    ServerAdmin webmaster@localhost  
    DocumentRoot /var/www/  
    …… 

     

     这是设置虚拟主机的,虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术。可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口,也可让多个网站拥有不同的域名。进一步的配置和使用,就可以查阅APACHE的手册了

          再看看/etc/apache2目录下的东西。刚才在apache2.conf里发现了sites-enabled目录,而在/etc/apache2下还有一个sites-available目录,这里面才是真正的配置文件,而sites-enabled目录存放的只是一些指向这里的文件的符号链接,可以用ls -l/etc/apache2/sites-enabled/来证实一下。所以,如果apache上配置了多个虚拟主机,每个虚拟主机的配置文件都放在sites-availabl,那么对于虚拟主机的停用、启用就非常方便了:当在sites-enabled下建立一个指向某个虚拟主机配置文件的链接时,就启用了它;如果要关闭某个虚拟主机的话,只需删除相应的链接即可,根本不用去改配置文件。

           mods-available、mods-enabled和上面说的sites-available、sites-enabled类似,这两个目录是存放apache功能模块的配置文件和链接的。当我用apt-get installphp5安装了PHP模块后,在这两个目录里就有了php5.load、php5.conf和指向这两个文件的链接。这种目录结果对于启用、停用某个Apache模块是非常方便的。

            最后一个要说的是ports.conf,这里面设置了Apache使用的端口。如果需要调整默认的端口设置,建议编辑这个文件。或者你嫌它实在多余,也可以先把apache2.conf中的Include/etc/apache2/ports.conf一行去掉,在httpd.conf里设置Apache端口。

            ubuntu里缺省安装的目录结构很有一点不同。在ubuntu中module和 virtualhost的配置都有两个目录,一个是available,一个是enabled,available目录是存放有效的内容,但不起作用,只有用ln连到enabled过去才可以起作用。对调试使用都很方便,但是如果事先不知道,找起来也有点麻烦。

    /etc/apache2/sites-available 里放的是VH的配置,但不起作用,要把文件link到 sites-enabled 目录里才行。

     

    配置文件httpd.conf说明:

    DocumentRoot "/var/www/html" ---Apache默认服务器主目录路径
    DirectoryIndex index.html index.htm index.php index.html.var ---默认文档,多个文件之间用空格分开
    Listen 192.168.1.1:80       设置监听ip是192.168.1.1的地址和端口为80
    Listen 192.168.1.2:8080   设置监听ip是192.168.1.2的地址和端口为8080
    ServerRoot "/etc/httpd"     设置相对根目录的路径 ,通常是指存放配置文件和日志文件的地方。缺省是:/etc/httpd 一般包括conf和logs子目录
    ErrorLog logs/error_log     设置错误日志,注意:如果日志文件存放路径不是以“/”开头,意味著该文件是相对于 ServerRoot目录
    CustomLog logs/access_log combined      访问日志(combined指明日志使用的格式,还有common格式)
    ServerAdmin c.z.cz@163.com    设置网络管理员的Email,当客户端服务器发生错误时,服务器通常会向客户端返回错误提示页面,为了方便解决错误,这个网页中通常有管理员的Email地址,可以通过使用 ServerAdmin语句来设置管理员的EMail地址
    ServerName www.cz.com:80       设置服务器主机名称 (如果有域名可以填入域名,没有域名则可填入服务器IP地址)
    AddDefaultCharset UTF-8            设置默认字符集,定义服务器返回给客户机默认字符集(由于西欧UTF-8是Apache默认字符集,因此当访问有中文的网页时会出现乱码,这时只要将字符集改成GB2312,再重启Apache服务即可)
    虚拟目录的
    Alias /down    "/software/download"     创建虚拟目录(创建名为down的虚拟目录,它对应的物理路径是:/software/download)
    Alias /ftp        "/var/ftp"                       创建虚拟目录(创建名为ftp的虚拟目录,它对应的物理路径是:/var/ftp)
    <Directory "/var/www/html">       设置目录权限(<Directory "目录路径">此次写设置目录权限的语句</Directory>)
          Options FollowSymLinks      page:116
          AllowOverride None
    </Directory>

     

    虚拟主机详解:

    Apache的虚拟主机是一种允许在同一台机器上,运行超过一个网站的解决方案。虚拟主机有两种,一种叫基于IP的(IP-based),另一种叫基于名字的(name-based)。虚拟主机的存在,对用户来说是透明的。

            基于IP的虚拟主机

            对于基于IP的虚拟主机来说,必须为每个虚拟主机配备一个单独的IP。也就是说你的服务器必须有多个IP地址。对于这种方式,我们在本地就可以做一个实验来进行配置。配置基于IP的虚拟主机,有两种方法:

            一是启动多个apache伺服程序,每个实例使用单独的配置文件,一般来说,在同一台机器上,架设两个网站,这两个网站互相之间不希望对方访问自己的文件,就使用这种方式,每个apache实例都是用单独的用户名,组来启动,并且放到不同的目录下,这种方式只要在apche的配置文件中,为Listen命令配置不同的ip即可;

            在ports.conf 中增加监听端口

    NameVirtualHost *:80  
    Listen 80  
    NameVirtualHost *:12340  
    Listen 12340 

       在sites-available中新加一个文件(可以拷贝原有的default并改名)用户定义新的站点

    <VirtualHost *:12340>  
        ServerAdmin webmaster@localhost  
        ServerName wwwtest  
        DocumentRoot /var/wwwtest  
        ErrorLog /var/wwwtest/log/wwwtest_error.log  
        LogLevel warn  
        CustomLog /var/wwwtest/log/wwwtest_access.log combined  
    </VirtualHost>

       在sites-enable中新加一个对sites-available的软连接

    ln -s /etc/apache2/sites-available/test /etc/apache2/sites-enabled/test 

    重启apache服务器即可。

            第二种方法是只启动一个单一的apache进程,使用VirtualHost指令来为不同的站点,配置不同的值,这种配置方式,我们可以在本地做个试验的,由于127.0.0.*的所有ip都是指向本机的,所以,我们可以随便拿两个出来做实验,按照如下方式配置apache,之后,在hosts文件中,将域名绑定到配置的ip上,就可以实现在本地运行多个wp系统的一个配置:

    <VirtualHost 127.0.0.1:80>  
        ServerAdmin yourname@domain.com  
        DocumentRoot "/usr/mySite/test1"  
        ServerName site1.com  
        ServerAlias www.site1.com  
        ErrorLog "logs/site1.com-error.log"  
        CustomLog "logs/site1.com-access.log" combined  
    </VirtualHost>  
      
    <VirtualHost 127.0.0.2:80>  
        ServerAdmin yourname@domain.com  
        DocumentRoot "/usr/mySite/test2"  
        ServerName site2.com  
        ServerAlias www.site2.com  
        ErrorLog "logs/site2.com-error.log"  
        CustomLog "logs/site2.com-access.log" combined  
    </VirtualHost> 

     

      基于名字的虚拟主机:


            基于名字的虚拟主机比起基于IP的来说,配置要更加简单,它只要依靠客户端发送的HTTP头信息中的HOST字段来判断,服务器到底要服务哪个虚拟主机。一般情况下,还是比价推荐使用这种方式。因为IP资源日渐稀缺,对于一般用户来说,为一台服务器购买多个IP也是成本较高的。

            使用这种方式配置时,首先是用NameVirtualHost指令,配置次apache实例监听的IP地址和端口号,然后使用VirtualHost指令来配置不同的虚拟主机,上述的例子,用这种方式配置的话,配置方法如下(注意,在这种方式中,ServerName是必填字段):

    NameVirtualHost 127.0.0.1:80  
      
    nbsp;<VirtualHost *:80>  
        ServerAdmin yourname@domain.com  
        DocumentRoot "/usr/mySite/test1"  
        ServerName test1.com  
        ServerAlias www.test1.com  
        ErrorLog "logs/test1.com-error.log"  
        CustomLog "logs/test1.com-access.log" combined  
    </VirtualHost>  
      
    <VirtualHost *:80>  
        ServerAdmin yourname@domain.com  
        DocumentRoot "/usr/mySite/test2"  
        ServerName test2.com  
        ServerAlias www.test2.com  
        ErrorLog "logs/test2.com-error.log"  
        CustomLog "logs/test2.com-access.log" combined  
    </VirtualHost>  

     附加:PHP 的安装与配置: http://hi.baidu.com/agudazaric/item/e89efe13ca1fb00db88a1a17

    展开全文
  • Ubuntu 中 Apache2 安装、配置、卸载

    万次阅读 2018-10-15 09:08:23
    Ubuntu 中 Apache2 安装、配置、卸载 两种安装方法 软件包安装 源码安装 一、软件包安装 安装 命令: sudo apt-get update sudo apt-get install apache2 配置 (1)apache2 默认的几...
  • apache2配置目录教程

    2018-11-01 08:51:26
    apache2服务器的配置文件在 /etc/apache2目录下,里面有配置: 1、apaceh2.conf、 2、端口配置文件port.conf、 3、mods-enable文件夹,这个文件夹下都是*.load和*.conf后缀的文件。 4、site-enable文件夹,这个...
  • apache2.2版本安装说明

    千次阅读 2018-04-12 18:29:52
    部署httpd服务 apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方便。不同的模块...
  • 之前由于在apache上面打算配置虚拟域名,于是对apache的配置文件进行...Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" ...
  • ubuntu apache2下目录结构

    万次阅读 2012-10-11 15:18:03
    ubuntu apache2下目录结构 在Windows下,Apache的配置文件通常只有一个,就是httpd.conf。但我在Ubuntu Linux上用apt-get install apache2命令安装了Apache2后,竟然发现它的httpd.conf(位于/etc/apache2目录...
  • Ubuntu环境下利用Apache2部署多个站点

    千次阅读 2018-11-14 20:37:07
    关于Apache2 Ubuntu环境下安装Apache2 ...apache2在启动的时候自动读取/etc/apache2/apache2.conf文件的配置信息,不同的配置项按功能分布在不同的文件中,然后被Include包含到apache2.conf这个主配置文件中,方...
  • 在我的kali上systemctl start apache2的时候apache启动失败,运行systemctl status apache2.service查看状态,发现是这个问题, Jul 08 15:22:27 kali apachectl[1789]: apache2: Syntax error on line 146 of /etc...
  • apache2 启动、重启、停止方法

    千次阅读 2017-02-27 18:12:44
    Linux系统为Ubuntu  一、Start Apache 2 ...# /etc/init.d/apache2 start  or  $ sudo /etc/init.d/apache2 start  二、 Restart Apache 2 Server /重启apache服务  # /etc/init.d/apache2 restart  or
  • apache2: Syntax error on line 219 of /etc/apache2/apache2.conf: Syntax error on line 30 of /etc/apache2/sites-enabled/000-default.conf: </VirtualHost> without matching <VirtualHost> section ...
  • Centos7 下安装Apache2

    千次阅读 2018-10-11 11:00:51
    2.设置服务器开机自动启动Apache systemctl enable httpd.service 若要验证是否自动启动可在重启服务器后在终端键入以下命令来检测Apache是否已经启动 systemctl is-enabled httpd.service 如果看到了enable这样...
  • apache2日志格式

    千次阅读 2016-10-17 07:51:18
    ubuntu 16.04中,默认的apache2配置文件位于/etc/apache2/apache2.conf其中可以找到LogFormat语法,定义了日志格式如下:LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_...
  • ubuntu apache2配置

    万次阅读 2016-05-30 17:40:44
    2. 输入下面的命令安装apache2  sudo apt-get install apache2  当提示“您希望继续执行吗?”时 输入 Y  然后等待安装完成   3. 配置apache2  (1)进入目录 /etc/apache2 。输入下面的命令可
  • Apache2 Ubuntu Default Page

    千次阅读 2017-02-28 00:07:44
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------他开始工作了!...
  • apache2开启重写模块

    千次阅读 2014-09-25 13:35:40
    Ubuntu LAMP 如何配置Apache 1. 修改文件夹读写权限 PHP网络服务器根目录默认位置:/var/www,默认属性只允许root用户执行操作,但是在Ubuntu中因为安全性的考虑默认关闭了 root账户。为了可以在这个文件夹新建...
  • 我按照...是添加在/etc/apache2/apache2.conf的什么,我尝试了 放在apache2.conf文件最后,放在随意位置,把apache2.conf所有代换为上面代码。没有一个好用。
  • 1. 简介 最近由于项目需要,对apache与tomcat进行整合进行了学习...2.环境要求 系统 ubutun 18.04 tocmat 8.5.31 jdk 1.8 3.环境准备 3.1卸载apache $ sudo apt-get remove apache* $ sudo fi...
  • Ubuntu 完全卸载 Apache2

    千次阅读 2017-11-28 15:33:50
    1. 删除apache 代码: $ sudo apt-get --purge remove apache-common ...2.找到没有删除掉的配置文件,一并删除 代码: $ sudo find /etc -name "*apache*" |xargs rm -rf $ sudo rm
  • Ubuntu16.04 安装最新Apache2加配置cgi

    千次阅读 2018-03-20 17:01:49
    Ubuntu16.04 安装最新Apache2加配置cgi 首先吐槽一下, apache一更新总是有些习惯性配置变更,对于大牛来说不算什么,可对刚入门学习的小白来说,特别是英盲来说(比如我),简直抓狂,因为一些小的更改,按照以前的教程...
  • apache2启动失败的解决方法

    千次阅读 2013-01-26 15:03:39
    之前ubantu安装的时候,...所以,我接下来就按照windows的思想将 /tmp 文件夹下的临时文件全部删除掉了,导致的结果就是很多东西突然间都会报错了...apache2也一样.... 首先一开始我是使用apache2 start的方法直接启动
  • apache2三种模式及参数调优

    万次阅读 2016-10-23 20:56:31
    问题来源一般配置应付小规模的访问量其实没什么问题,只是最近我们设计了一些...进一步定位,发现是apache接收了太多了请求,起了无数进程,内存用爆,机器卡死了。如何配置apache,最大程度的发挥系统性能呢?apache
  • Linux配置Apache2的经验总结

    万次阅读 2014-01-26 10:19:06
    目前在windows上还叫httpd,在debian/ubuntu/linux mint系列的linux上,程序名是apache2。所以网上说httpd的资料,对apache2是部分适用的。官网本身也用httpd的说法,可以理解为httpd是产品名,apache2
  • ubuntu查看apache2错误日志

    万次阅读 2018-02-15 19:50:43
    Ubuntu 16.04系统下安装Discuz出现“HTTP ERROR 500”目前无法处理此请求问题:当我们在Ubuntu 16.04系统下安装...f /var/log/apache2/error.log查看错误日志,可以看到如下错误日志:日志显示在目录/discuz/install...
  • Ubuntu下利用Apache2实现Django部署

    千次阅读 2018-08-22 11:17:31
    Ubuntu下利用Apache2实现Django部署 简介 当我们使用Django框架写出自己的web时,那种成就感是不言而喻的。不过好东西自然要和大家分享,因此就需要将自己的web部署在某个地方。废话不多说,接下来将...
  • ubuntu apache2 配置安装ssl证书,https

    千次阅读 2019-04-12 10:20:19
    1.申请免费阿里证书 阿里云服务器:... 然后购买,填写相应的信息,域名信息即可. 成功后: 根据自己的网站服务器来选择下载不同的ssl证书 包括: 1_root_bundle.crt # 证书文件 2_xxx.xxx.xxx.crt # 证书文件...
  • ubuntu Apache2 如何 设置 HTTPS

    万次阅读 2013-11-13 16:03:02
    一、创建证书  证书(Cerificate)的基本作用是将一个公钥和安全个体(个人、公司、组织等)的名字绑定在一起。  一般情况下,制作证书要经过几个步骤,如上图所示。首先用openssl genrsa生成一个私钥,然后用...
  • 移植apache2 ARM版 - 交叉编译apache2

    千次阅读 2013-11-08 15:47:31
    下载apache2 http://apache.fayea.com/apache-mirror//httpd/httpd-2.4.6.tar.bz2 1. tar jxvf httpd-2.4.6.tar.bz2 2. cd httpd-2.4.6 3. ./configure --host=arm-linux --prefix=/usr/local/arm/4.4.3 --with...

空空如也

1 2 3 4 5 ... 20
收藏数 1,898,659
精华内容 759,463
关键字:

apache2