Web service---马哥运维笔记


文章目录

TCP协议的特性:

  • 建立连接:三次握手;
  • 将数据打包成段:校验和(CRC32)
  • 确认、重传及超时;
  • 排序:逻辑序号;
  • 流量控制:滑动窗口算法;
  • 拥塞控制:慢启动和拥塞避免算法

httpd的特性:

  • 高度模块化:core+modules;
  • DSO:dynamic shared object;
  • MPM:Multipath processing Modules(多路处理模块);
    * prefork:多进程模型,每个进程响应一个请求;
    一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
    n个子进程:每个子进程处理一个请求;
    工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;
    * worker:多进程多线程模型,每线程处理一个用户请求;
    一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
    多个子进程:每个子进程负责生成多个线程;
    每个线程:负责响应用户请求;
    并发响应数量:m*n
    m:子进程数量
    n:每个子进程所能创建的最大线程数量;
    * event:事件驱动模型,多进程模型,每个进程响应多个请求;
    一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
    子进程:基于事件驱动机制直接响应多个请求;

httpd-2.4常用配置:

(一)、修改监听的IP和PORT:

Listen [IP:]PORT

  • 省略IP表示为0.0.0.0;
  • Listen指令可重复出现多次:Listen 80;Listen 8080;
  • 修改监听socket,重启服务进程方可生效;

(二)、持久连接:

Persistent Connection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行; 如何断开?

  • 资源数量限制;
  • 连接时间限制;
  • 副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常 响应;
  • 折衷:使用较短的持久连接时长,以及较少的请求数量;
  • Ex:
    KeepAlive On|Off
    KeepAliveTimeout 15
    MaxKeepAliveRequests 100

(三)、MPM:

1、prefork的配置:

2、worker的配置:

(四)、DSO:

  • 配置指定实现模块加载:LoadModule <mod_name> <mod_path>
  • 模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)

(五)、定义“Main” server的文档页面路径:

  • DocumentRoot “/var/www/html”
  • DocumentRoot指向的文件系统路径为URL路径的起始位置,其相当于站点URL的根路径:/var/www/html/index.html–>(URL)/index.html

(六)、站点访问控制常见机制:

1、可基于两种机制指明对哪些资源进行何种访问控制:

  • 文件系统路径:在httpd-2.4下所有目录访问控制都需要显示授权
    <Directory “”>


    <File “”>


    <FileMatch “PATTERN”>

  • URL路径:
    <Location “”>


    <LocationMatch “”>

2、中“基于源地址”实现访问控制:

(1)、Options:
  • 后跟1个或多个以空白字符分隔的“选项”列表;
    Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;
    FollowSymLinks:允许跟踪符号链接文件所指向的源文件;
    None:
    All:
(2)、AllowOverride:

与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;
All:
None:

(3)、 基于IP的访问控制

允许所有主机访问:Require all granted
拒绝所有主机访问:Require all deny

控制特定的IP访问:
Require ip IPADDR:授权指定来源的IP访问;
Require not ip IPADDR:拒绝

控制特定的主机访问:
Require host HOSTNAME:授权指定来源的主机访问;
Require not host HOSTNAME:拒绝
  HOSTNAME:
    FQDN:特定主机
    domin.tld:指定域名下的所有主机

#必须放置块内,例:

Require all granted
Require not ip 172.16.100.2

(七)、定义站点主页面:

DirectoryIndex index.html index.html.var index.php

(八)、定义路径别名:

格式:Alias /URL/ “/PATH/TO/SOMEDIR/”
例:
#DocumentRoot “/www/htdocs”
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm
#Alias /download/ “/rpms/pub/”
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/rpms/pub/bash-4.4.2-3.el6.x86_64.rpm

(九)、设定默认字符集:

例:AddDefaultCharset UTF-8

(十)日志设定:访问日志和错误日志

1、访问日志:

LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined
CustomLog logs/access_log combined

%h:客户端IP地址;
%l:Remote User, 通常为一个减号(“-”);
%u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;
%>s:最终响应状态码;(%s:起始的响应状态码;)
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;
%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;
%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;

2、错误日志:

ErrorLog logs/error_log
LogLevel warn
Possible values include: debug, info, notice, warn, error, crit, alert, emerg.

(十一)、基于用户的访问控制:

1、认证质询:

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;

2、认证:

Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;
认证方式有两种:
  basic:明文
  digest:消息摘要认证;
目前web常用表单认证;

3、安全域:

需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因;

basic认证配置示例:
(1) 定义安全域
<Directory “”>
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile “/PATH/TO/HTTPD_USER_PASSWD_FILE”
Require user username1 username2 …

允许账号文件中的所有用户登录访问:
用Require valid-user 替换 Require user username1 username2 …

(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
-m:md5格式加密
-s: sha格式加密
-D:删除指定用户

另外:基于组账号进行认证;–为什么需要用到组认证?一个单位有上万人,我们想让3000人登录,总不能把这3000人都加入到配置文件吧,我们可以将这一万人进行分组,允许这3000人在的组登录管理;
(1) 定义安全域
<Directory “”>
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile “/PATH/TO/HTTPD_USER_PASSWD_FILE”
AuthGroupFile “/PATH/TO/HTTPD_GROUP_FILE”
Require group grpname1 grpname2 …

(2) 创建用户账号和组账号文件;

组文件:"/PATH/TO/HTTPD_GROUP_FILE"每一行定义一个组
例如:运维组:包含哪些人:
  GRP_NAME: username1 username2 …

(十二)、虚拟主机:

1、站点标识:socket

  • IP相同,但端口不同;
  • IP不相同,但端口均为默认端口;
  • FQDN不同;请求报文中首部:Host:www.google.com

2、有三种实现方案:

  • 基于IP:为每个虚拟主机准备至少一个ip地址;
  • 基于port:为每个虚拟主机使用至少一个独立port;
  • 基于FQDN:为每个虚拟主机使用至少一个FQDN;

3、虚拟主机的配置方法:

ServerName FQDN DocumentRoot ""
(1)、其他可用指令:

ServerAlias:虚拟主机的别名;可多次使用;
ErrorLog:
CustomLog:
<Directory “”>


Alias

(2)、基于IP的虚拟主机实例:
①基于IP的虚拟主机示例:

<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot “/www/a.com/htdocs”

<VirtualHost 172.16.100.7:80>
ServerName www.b.net
DocumentRoot “/www/b.net/htdocs”

②基于端口的虚拟主机:

<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot “/www/a.com/htdocs”

<VirtualHost 172.16.100.6:8080>
ServerName www.b.net
DocumentRoot “/www/b.net/htdocs”

③基于FQDN的虚拟主机:

<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot “/www/a.com/htdocs”

<VirtualHost 172.16.100.6:80>
ServerName www.b.net
DocumentRoot “/www/b.net/htdocs”

Note:如果是httpd2.2,使用基于FQDN的虚拟主机时,需要事先使用如下指令:
NameVirtualHost IP:PORT

(十三)、status页面:

需要加载status模块:LoadModule status_module modules/mod_status.so

<Location /server-status>—此处的server-status的名字可以自己乱起。
SetHandler server-status
  
     Require ip 172.16
  

(十四)、user/group:

指定以哪个用户的身份运行httpd服务进程;
User apache
Group apache

(十五)、使用mod_deflate模块压缩页面优化传输速度:

1、适用场景:

  • 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
  • 压缩适于压缩的资源,例如文件文件;

2、实例:

创建/etc/httpd/conf.d/compress.conf文件,在文件编辑如下:
SetOutputFilter DEFLATE

# mod_deflate configuration

# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css

# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9

# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

(十六)、https、http over ssl:

1、SSL会话的简化过程

  • (1) 客户端发送可供选择的加密方式,并向服务器请求证书;
  • (2) 服务器端发送证书以及选定的加密方式给客户端;
  • (3) 客户端取得证书并进行证书验正:
      如果信任给其发证书的CA:
      (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;
      (b) 验正证书的内容的合法性:完整性验正
      © 检查证书的有效期限;
      (d) 检查证书是否被吊销;
      (e) 证书中拥有者的名字,与访问的目标主机要一致;
  • (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
  • (5) 服务用此密钥加密用户请求的资源,响应给客户端;
  • 注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
  • 理解:ssl会话:1、先tcp三次握手;2、然后客户端给服务器要证书,服务器发送证书;3、客户端要验证一下证书的真伪;4、客户端给服务器发送商量好的对称秘钥,服务器用商量好的对称秘钥给客户端发送资料;

2、SSL自签证书流程:

(1)、构建私有CA:

配置文件:/etc/pki/tls/openssl.cnf
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;

步骤:
(1) 生成私钥;
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
(2) 生成自签证书;
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新证书签署请求;
-x509:生成自签格式证书,专用于创建私有CA时;
-key:生成请求时用到的私有文件路径;
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
-days:证书的有效时长,单位是day;
(3) 为CA提供所需的目录及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial

(2)、要用到证书进行安全通信的服务器,需要向CA请求签署证书:

步骤:(以httpd为例)
(1) 用到证书的主机生成私钥;
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
(2) 生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
(3) 将请求通过可靠方式发送给CA主机;
  scp /etc/httpd/ssl/httpd.csr  root@192.168.80.10:/tmp/
(4) 在CA主机上签署证书;
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

查看证书中的信息:
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

(3)、吊销证书:

步骤:
(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
(2) CA主机吊销证书
先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;

吊销:
~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

其中的SERIAL要换成证书真正的序列号;

(3) 生成吊销证书的吊销编号(第一次吊销证书时执行)
~]# echo 01 > /etc/pki/CA/crlnumber

(4) 更新证书吊销列表
~]# openssl ca -gencrl -out thisca.crl

查看crl文件:
~]# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

(十七)、httpd自带的工具程序:

  • htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具;
  • apachectl:httpd自带的服务控制脚本,支持start和stop;
  • apxs:由httpd-devel包提供,扩展httpd使用第三方模块的工具;
  • rotatelogs:日志滚动工具;
     access.log -->
       access.log, access.1.log -->
         access.log, acccess.1.log, access.2.log
  • suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行;
  • ab: apache bench
    感想:如果你感觉生活很困难,那么你走的是上坡路,相反如果你感觉很舒适,嘿嘿,你在走下坡路哦。
    文章目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值