安装及配置

http 配置及部署

安装方式

rpm:centos发行版,稳定,建议使用 编译:定制或特殊需求
配置文件
检查配置语法 httpd -t

Httpd 程序环境

Httpd 常见配置

httpd配置文件的组成:
  • 主要组成 Global Environment Main server configuration virtual host
  • 配置格式:directive value directive 不区分字符大小写 value 为路径时,是否区分大小写,取决于文件系统
1、显示服务器版本信息
2、修改监听的IP和Port**(支持开启多个端口)**
3、持久连接 Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接 断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应 折衷:使用较短的持久连接时间
4、DSO: Dynamic Shared Object 加载动态模块配置,不需重启即生效
5、MPM( Multi-Processing Module)多路处理模块 prefork, worker, event
  • 切换使用的MPM
prefork的配置
选项
256 最多进程数,最大20000
4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
worker的配置
6、定义’Main’ server的文档页面路径
7、定义站点主页面DirectoryIndex index.html
8、站点访问控制常见机制 可基于两种机制指明对哪些资源进行何种访问控制 访问控制机制有两种:客户端来源地址,用户账号 文件系统路径:
9、<Directory>中“基于源地址”实现访问控制 (1) Options:后跟1个或多个以空白字符分隔的选项列表在选项前的+,- 表示增加或删除指定选项
(2) AllowOverride 与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令 只对<directory>语句有效
(3) 基于IP的访问控制: 无明确授权的目录,默认拒绝 允许所有主机访问:Require all granted 拒绝所有主机访问:Require all denied 控制特定的IP访问: Require ip IPADDR:授权指定来源的IP访问 Require not ip IPADDR:拒绝特定的IP访问 控制特定的主机访问: Require host HOSTNAME:授权特定主机访问 Require not host HOSTNAME:拒绝 HOSTNAME: FQDN:特定主机 domin.tld:指定域名下的所有主机
不能有失败,至少有一个成功匹配才成功,即失败优先
多个语句有一个成功,则成功,即成功优先
10、日志设定 日志类型: 访问日志 错误日志 ErrorLog logs/error\_log LogLevel warn LogLevel 可选值: debug, info, notice, warn,error, crit, alert, emerg
访问日志
11、设定默认字符集AddDefaultCharset UTF-8 此为默认值 中文字符集:GBK, GB2312, GB18030
12、定义路径别名
13、基于用户的访问控制
  • 认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
  • 认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
  • 认证方式两种: basic:明文 digest:消息摘要认证,兼容性差
  • 安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
  • 用户的账号和密码 虚拟账号:仅用于访问某服务时用到的认证标识 存储:文本文件,SQL数据库,ldap目录存储,nis等
basic认证配置示例: (1) 定义安全域
(2) 提供账号和密码存储(文本文件) 使用专用命令完成此类文件的创建及用户管理
基于组账号进行认证 (1) 定义安全域
(2) 创建用户账号和组账号文件
示例:实现基于basic验证
14、实现用户家目录的http共享 基于模块mod\_userdir.so实现 SELinux: http\_enable\_homedirs
15、ServerSignature On | Off | EMail 当客户请求的网页并不存在时,服务器将产生错误文档,如果打开了ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息,如果不对外显示这些信息,就可以将这个参数设置为Off,设置为Email,将显示ServerAdmin 的Email提示
16、实现网站status页面
17、虚拟主机 站点标识: socket IP相同,但端口不同 IP不同,但端口均为默认端口 FQDN不同: 请求报文中首部 Host: www.xxx.com
有三种实现方案: 1、基于ip:为每个虚拟主机准备至少一个ip地址 2、基于port:为每个虚拟主机使用至少一个独立的port 3、基于FQDN:为每个虚拟主机使用至少一个FQDN
虚拟主机的配置方法:
基于IP的虚拟主机示例:
基于端口的虚拟主机:可和基于IP的虚拟主机混和使用
基于FQDN虚拟主机 基于FQDN的虚拟主机不再需要NameVirutalHost指令
mod\_deflate模块 使用mod\_deflate模块压缩页面优化传输速度

https

https:http over ssl SSL会话的简化过程 1、客户端发送可供选择的加密方式,并向服务器请求证书 2、服务器端发送证书以及选定的加密方式给客户端 3、客户端取得证书并进行证书验证 如果信任给其发证书的CA \- a、验证证书来源的合法性;用CA的公钥解密证书上数字签名 \- b、验证证书的内容的合法性:完整性验证 \- c、检查证书的有效期限 \- d、检查证书是否被吊销 \- e、证书中拥有者的名字,与访问的目标主机要一致 4、客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换 5、服务用此密钥加密用户请求的资源,响应给客户端
(1) 为服务器申请数字证书 测试:通过私建CA发证书 \- a、创建私有CA \- b、在服务器创建证书签署请求 \- c、CA签证 (2) 配置httpd支持使用ssl,及使用的证书
(3) 测试基于https访问相应的主机
示例:实现https

http重定向https

将http请求转发至https的URL 重定向

HSTS:HTTP Strict Transport Security

服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程
  • HSTS preload list 是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表

正向代理和反向代理

notion image
反向代理功能 启用反向代理
  • 特定URL反向代理
  • 示例:

Sendfile机制

不用 sendfile 的传统网络传输过程: read(file, tmp\_buf, len) write(socket, tmp\_buf, len) 硬盘 >> 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 切换到 usermode(第4次切换),然后DMA从 kernel buffer 拷贝数据到协议栈(第4次拷贝) 上面4个步骤有4次上下文切换,有4次拷贝,如能减少切换次数和拷贝次数将会有效提升性能
在kernel 2.0+ 版本中,系统调用 sendfile() 就是用来简化上面步骤提升性能的。 sendfile() 不但能减少切换次数而且还能减少拷贝次数 用 sendfile() 来进行网络传输的过程: sendfile(socket, file, len); 硬盘 >> kernel buffer (快速拷贝到kernel socket buffer) >> 协议栈 1、系统调用 sendfile() 通过 DMA 把硬盘数据拷贝到 kernel buffer,然后数据被kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer。这里没有 usermode 和 kernel mode 之间的切换,在 kernel 中直接完成了从一个 buffer 到另一个 buffer 的拷贝 2、DMA 把数据从 kernel buffer 直接拷贝给协议栈,没有切换,也不需要数据从user mode 拷贝到 kernel mode,因为数据就在 kernel 里

APR

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

编译安装

小结

编译安装注意下,使用的模块需要加入到配置文件中
代理参考 正向代理的用途:是为在防火墙内的局域网客户端提供访问Internet的途径。 正向代理还可以使用缓冲特性减少网络使用率; 反向代理的典型用途:将防火墙后面的服务器提供给Internet用户访问。 反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
Loading...