systemd用于启动守护进程,是系统的第一个进程,PID为1

systemctl

systemctl command name.service

常用命令
启动:start
停止:stop
重启:restart
状态:status
重载或重启:reload-or-restart
条件式重启:try-restart
禁止设定为开机自启:mask
取消禁止开机自启:unmask
自启:enable
禁止:disable
查看是否激活:is-active
查看已经激活的服务list-units --type service
查看所有服务开机自启状态:list-unit-files --type service

切换至紧急救援模式:rescue

切换至emergency模式:emergency

chkconfig

查看是否开机启动chkconfig --list name
设定服务自启动:chkconfig name on
禁止:chkconfig name off
查看所有服务开机自启状态chkconfig --list

其他systemd命令

Linux进程管理

进程优先级PRI:越接近100优先级越高,低于一百为实时优先级,高于为静态优先级

静态优先级内核不会主动修改,只能通过系统调用nice去修改

实时优先级只对实时进程有效

Nice值NI:(-20,19)值越低表示优先级越高,一般情况下子进程会继承父进程的nice值

各值详细解释

进程类型:

守护进程:系统引导过程中启动的进程,与终端无关

前台进程:跟终端有关,通过终端启动的进程

进程状态:

运行态:running

就绪态:ready

睡眠态:interruptable(可中断)
/uninterruptable(不可中断)

停止态:stopped暂停与内存,但不会被调度

僵死态:zombie

**Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

进程管理工具

pstree

ps

常用组合: aux\ef

aux:

u:以用户为中心组织进程状态关系显示

a:与终端相关的进程

x:与终端无关的进程

[root@localhost ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
用户 进程ID CPU占用 内存占用 
VSZ:Virtual memory SiZe 虚拟内存集 
RSS:ReSident Size 常驻内存集———其他的都可以放入交换内存中
STAT:进程状态 
R:running 
S:interruptable sleeping 
D:uninterruptable sleeping 
T:stopped 
Z:zombie 
+:前台进程 
l:多线程进程 
N:低优先级进程 
<:高优先级进程 
s:session leader 
START:启动时间 
TIME:运行占据cpu的累积时长 COMMAND:由哪个命令来启动的相关进程

ef
:
e:显示所有进程

f:显示完整格式程序信息

top

top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

-d:每隔几秒刷新一次,默认3s

-p指定特定的pid进程观察

top按键

?:输出可用命令

排序

P:以CPU使用资源进行排序

M:以内存使用资源排序

T:累积占据CPU时长

首部信息

uptime信息:l命令

task及cpu信息:t命令

cpu分别显示:1(数字)

memory信息:m命令

退出命令:q

修改刷新时间间隔:s

终止指定进程:k
T0CJ~I1ZB8Q{X~B66MS8([6.png

htop彩色版
![TR0J3VJ4D6FL)(CHZ]Y%21D.png][2]

kill

-l:显示可用信号

kill [-sign] PID

killall [-sign] program 终止名称下所有进程

常用信号

SIGHUP:无需关闭进程而让其重读配置文件 1

SIGINT:自动捕捉ctrl+c信号来种植正在运行的进程 2

SIGKILL:杀死进程 9

SIGTERM:终止进程 15 可以被阻塞、忽略、处理

nice/renice

进程优先级调整,进程默认启动时nice为0,优先级为120

Linux计划任务

at

at -f time job

time :

HH:MM[YY-mm-dd]

moon,midnight,tommorrow,now + #[min,hours,seconds]

例子

at now +1 minutes -f test1.txt

atq查看当前的任务队列

crond定时任务

Linux上非常多的计划任务使用crond方式,crond服务开机自启,用户可以用crontab来自定义计划

注意,使用date查看自己系统当前的时间是否一致,如不一致,可以使用date -s 进行修改,修改后使用clock -w保存

/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
分钟 小时 日 月 星期 用户 任务


使用*表示“每”

1: root用户在每天晚上9.30执行指定任务
30 21 * * * root echo "hello"

2:root用户在每周一周五晚上8点执行执行任务

0 20 * * mon,fri root echo "hello"

3:zhangsan用户在每个月1-9晚上8点执行任务

0 20 1-9 * * zhangsan echo "到点了"

使用/#表示指定步长

* */3 * * * zhangsan echo.sh         # 每3小时执行一次
crontab -e 创建新的计划
-r 移除任务
-l 列出任务列表
-u 指定执行用户


只保留7天内的日志(使用计划任务在每天0点删除7天前的日志即可)
* * * * * find /var/log/java/*.log -atime 7 -delete | -exec rm -rf {}\;

-exec rm -rf {} + 用于对搜索到的文件执行相应的操作,其中{}表示搜索到的文件路径。{}后面可以接空格加号或空格反斜线分号。

备份: 备份指定数据/mydata/
10 0 * * * tar -czxf /backup/mydata.zip.tar /mydata/ 

通配符

用于shell做路径匹配,一般配合find,ls,cp,mv等作文件名匹配

*:匹配任意多个字符
?:匹配一个
[list]:匹配list中任意单个字符
[c1-c2]:匹配c1-c2中任意单个字符
[^c1-c2]/[!c1-c2]:不匹配
{st1,st2....}:匹配任意单个字符串

shell元字符

字符说明
IFS 三者之一组成(我们常用 space )。
CR 产生。
=设定变量。
$作变量或运算替换
>重导向 stdout。
<重导向 stdin。
命令管线。
&重导向 file descriptor ,或将命令置于背境执行。
( )将其内的命令置于 nested subshell 执行,或用于运算或命令替换。
{ }将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
;在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
&&在前一个命令结束时,若返回值为 true,继续执行下一个命令(echo $?如果为0则上一条命令执行成功)
丨丨在前一个命令结束时,若返回值为 false,继续执行下一个命令。
!执行 history 列表中的命令。

转义

'':硬转义,里面所有的转义都会失效被当作字符串处理
"":软转义,转义会生效

正则

##字符匹配 
    .:匹配任意单个字符 
    []:匹配指定范围内任意单个字符 
    [^]:匹配指定范围外任意单个字符 
    [:alnum:]:字母与数字字符 
    [:alpha:]:字母 
    [:blank:]:空格或制表符 
    [:cntrl:]:ASCII控制字符 
    [:digit:]:数字 
    [:graph:]:非控制、非空格字符 
    [:lower:]:小写字母 
    [:print:]:可打印字符 
    [:punct:]:标点符号字符 
    [:space:]:空白字符,包括垂直制表符 
    [:upper:]:大写字母 
    [:xdigit:]:十六进制数字 

##匹配次数 
    *:匹配前面的字符任意次数 
    .*:匹配任意长度的字符 
    \?:匹配其前面字符0或1次,即前面的可有可无 
    \+:匹配其前面的字符至少1次 
    \{m\}:匹配前面的字符m次 
    \{m,n\}:匹配前面的字符至少m次,至多n次 
    \{0,n\}:匹配前面的字符至多n次 
    \{m,\}:匹配前面的字符至少m次 

##位置锚定 
    ^:行首锚定,用于模式的最左侧 
    $:行末锚定,用于模式的最右侧 
    ^PATTERN$:用于模式匹配整行; 
    ^$:空行 
    \< 或 \b:词首锚定,用于单词模式的左侧 
    \> 或 \b:词尾锚定,用于单词模式的右侧 
    \<PATTERN\>:匹配整个单词 


##分组
    \(\):将一个或多个字符捆绑在一起;当作一个字符
    \(xy\)*ab 
    Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命令 方式为:
        \1,\2,\3…… 
        \1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符; 
        \(ab\+\(xy\)*\): 
        \1:ab\+\(xy\)* 
        \2:xy

## 扩展

文本三剑客

find

通过遍历指定路径下文件来完成查找,实时精确,速度略慢

find [ ] [ path] [条件 处理]


find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

按文件名

-name:
-iname:忽略大小写

[root@server1 ~]# find / -iname ens*

按大小

-size +/-大小

[root@server1 ~]# find /etc -size +5M
/etc/udev/hwdb.bin

查找目录深度

-maxdepth n
-mindepth n

[root@server1 ~]# find /etc -maxdepth 3 -a -name *ens*
/etc/pki/tls/openssl.cnf
/etc/sysconfig/network-scripts/ifcfg-ens33

按时间

-mtime +/-n 单位为天
-atime
-ctime

[root@server1 ~]# find /root/ -mtime -3

按属主属组

-user
-group
-nouser:没有属主的文件
-nogroup

按权限

-perm [+/-]MODE

/MODE:任何一类对象的权限只要有一位能匹配即可(如/222)
-MODE:每一类对象都必须同时拥有规定的权限

按组合条件

-a:与
-o:或
-not:非

处理动作

-ls:ls -l
-delete:删除
-fls:查到的所有文件的长格式信息保存到指定文件中
-ok cmd {}\:对查到的每个文件执行cmd并交互确认
-exec cmd {} \:对查到的每一个文件执行cmd


[root@server1 ~]# find /etc -size +5M -ls
17243382 7760 -r--r--r--   1 root     root      7942570 1月 12 10:11 /etc/udev/hwdb.bin

find /etc -mtime -3 -exec cp -r {} test/ \;

grep(配合正则)

-E:扩展正则
-i:忽略大小写
-n:打印行号
-o:只打印匹配的内容
-c:只打印每个文件匹配的行数
-v:只打印不匹配的行
-B:--before--context=NUM:只打印匹配的前几行
-A:--after--context=NUM:打印匹配的后几行
-C:--context=NUM:打印匹配的前后几行

实例

[root@server1 test1]# cat t1
saxcs
#fasc
#fesads
#gfxsd
#234Rfa
2134
342fsd

sdf
hrl
casa

忽略大小写

[root@server1 test1]# grep -i 'r' t1
#234Rfa
hrl

过滤空行

[root@server1 test1]# grep -v "^$" t1
saxcs
#fasc
#fesads
#gfxsd
#234Rfa
2134
342fsd
sdf
hrl
casa

过滤以#开头的行

[root@server1 test1]# grep -v "^#" t1
saxcs
2134
342fsd

sdf
hrl
casa

过滤#开头的行和空行

[root@server1 test1]# grep -Ev "^$|^#" t1
saxcs
2134
342fsd
sdf
hrl
casa

打印包括sa的前两行

[root@server1 test1]# grep -B 2 'sa' t1
saxcs
#fasc
#fesads
--
sdf
hrl
casa

只打印sa

[root@server1 test1]# grep -o 'sa' t1
sa
sa
sa

打印包含sa的行

[root@server1 test1]# grep  'sa' t1
saxcs
#fesads
casa

打印且显示行数

[root@server1 test1]# grep  -n 'sa' t1
1:saxcs
3:#fesads
11:casa

正则

1.显示/proc/meminfo文件中以大小s开头的行
grep "^[Ss]" /proc/meminfo 
grep -i "^s" /proc/meminfo

2.显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v "/bin/bash$" /etc/passwd

3.如果root用户存在,显示其默认的shell程序  位置锚定
[root@test tmp]# id root > /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7

4.找出/etc/passwd中的两位或三位数
(贪婪)
[[:digit:]]\{2,3\}

(非贪婪)
grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd

5.寻找以字母开头,后面内容中存在数字
grep -i "^[[:alpha:]]\+.*[[:digit:]]\+" 2.txt

6.找出成功连接的
grep "\(200\)\?" 1.log

sed

sed是面向流的编辑器

语法

sed的命令格式: sed [option] 'sed command' filename 
sed的脚本格式:sed [option] -f 'sed script' filename 
常用选项: 
-n :只打印模式匹配的行 
-e :直接在命令行模式上进行sed动作编辑,默认选项 
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作 
-r :支持扩展表达式 
-i :直接修改文件内容 ,很危险不建议这样做

查询文本的方式 
使用行号和行号范围 
x:行号 
x,y:从x行到y行 
x,y!:x行到y行之外 
/pattern:查询包含模式的行 
/pattern/, /pattern/:查询包含两个模式的行 
/pattern/,x:x行内查询包含模式的行 
x,/pattern/:x行后查询匹配模式的行

动作

p:打印匹配的行(-n) 
=:显示文件行号 
a\:指定行号后添加新文本 
i\:指定行号前添加新文本 
d:删除定位行 
c\:用新文本替换定位文本 
w filename:写文本到一个文件 
r filename:从另一个文件读文本 
s///:替换 

替换标记: 
g:行内全局替换 
p:显示替换成功的行 
w:将替换成功的结果保存至指定文件 
q:第一个模式匹配后立即退出 
{}:在定位行执行的命令组,用逗号分隔 
g:将模式2粘贴到/pattern n/

实例

在第四行后添加一行

[root@server1 test1]# cat t1
one
two
three
four
five
six
[root@server1 test1]# sed 4a\test t1
one
two
three
four
test
five
six

列出passwd文件内容并打印序号,同时删除2-5行


[root@server1 test1]# nl /etc/passwd | sed 2,5d
     1  root:x:0:0:root:/root:/bin/bash
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15  dbus:x:81:81:System message bus:/:/sbin/nologin
    16  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19  chrony:x:998:996::/var/lib/chrony:/sbin/nologin

添加多行文字

[root@server1 test1]# nl t1 | sed '2a hello\
> nihao'
     1  one
     2  two
hello
nihao
     3  three
     4  four
     5  five
     6  six

替换文本

[root@server1 test1]# nl /etc/passwd | sed '2,5c you cant see that'
     1  root:x:0:0:root:/root:/bin/bash
you cant see that
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15  dbus:x:81:81:System message bus:/:/sbin/nologin
    16  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19  chrony:x:998:996::/var/lib/chrony:/sbin/nologin

只打印筛选出的行

[root@server1 test1]# nl t1 | sed -n 1,3p
     1  one
     2  two
     3  three

搜索

[root@server1 test1]# nl /etc/passwd | sed -n "/root/p"
     1  root:x:0:0:root:/root:/bin/bash
    10  operator:x:11:0:operator:/root:/sbin/nologin

删除查找到的内容并输出其他的

[root@server1 test1]# nl /etc/passwd | sed '/root/d'
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15  dbus:x:81:81:System message bus:/:/sbin/nologin
    16  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19  chrony:x:998:996::/var/lib/chrony:/sbin/nologin

查找后执行花括号里的命令,每个命令用分号分隔,先替换再输出

[root@server1 test1]# nl /etc/passwd | sed '/root/{s/bash/nologin/;p;q}'
     1  root:x:0:0:root:/root:/bin/nologin
     1  root:x:0:0:root:/root:/bin/nologin

取ip地址

[root@server1 test1]# ifconfig | sed -n '/netmask/p' | sed 's/^.*inet //g' | sed 's/ netmask.*$//g' | sed -n '1p'
192.168.226.148

多项命令

[root@server1 test1]# nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
     1  root:x:0:0:root:/root:/bin/blueshell
     2  bin:x:1:1:bin:/bin:/sbin/nologin

awk

awk能通过简单的脚本来处理文件,一般来说,awk以文件的一行为处理单位,每接收一行就执行相对应的命令.awk只能用单引号

awk '{pattern + action}' {filenames}

-F指定切割符号,不写默认为空格,$n代表分割后的每一个字段,$0代表一整行。一行就是一个记录,一个记录有若干个字段,NF为字段数量,NR为记录数量,RS为记录分隔符,默认为\n

[root@server1 test1]# awk -F: '{print $0}' t1
one:123:312
two:231:431
three:432:5r13
[root@server1 test1]# awk -F: '{print $1}' t1
one
two
three

常用内置变量

变量名属性
$0当前记录
$n当前记录的第n个字段
FS输入分隔符,默认为空格
RS输入记录分隔符。默认换行符
NF当前记录的字段个数
NR当前读出的记录数
OFS输出字段分隔符,默认空格
ORS输出记录分隔符,默认换行符

awk正则

awk '/REG/{action} ' file

布尔表达式awk '布尔表达式{action}' file

avatar

判断、循环、数组

awk提供了类似c语言的部分语句

if

{
        if ($1=="foo"){
                if($2=="foo"){
                        print "uno"
                }else{
                        print "one"
                }
        }elseif($1=="bar"){
                print "two"
        }else{
                print "three"
        }
}

while

{
    count=1do {
        print "I get printed at least once no matter what"
    } while ( count !=1 )
}

for

for ( initial assignment; comparison; increment ) {
    code block
}

数组

{
    cities[1]=”beijing”
    cities[2]=”shanghai”
    cities[“three”]=”guangzhou”
    for( c in cities) {
        print cities[c]
    }
    print cities[1]
    print cities[“1”]
    print cities[“three”]
}

实例

打印文件的20-30行

[root@server1 test1]# awk '{if(NR >=20 && NR <=30) print $1}' t1

从文本中过滤出姓名和id,以逗号和空格为分隔符,[ ,]+表示空格或者逗号至少出现一次

[root@server1 test1]# awk -F'[ ,]+' '{print $2" "$6}' t1
arisa 123654

统计passwd用户认数(当然此处也可以使用wc -l)

[root@server1 test1]# awk 'BEGIN{line=0}{line++}END{print line}' /etc/passwd
19
#BEGIN和END在开始和结束的时候会执行一次,中间的代码每取出一个记录会执行一次

统计目录下文件的总大小

[root@server1 test1]# ll /root
总用量 4
-rw-------. 1 root root 1241 1月  12 10:11 anaconda-ks.cfg
drwxr-xr-x. 3 root root   29 2月  18 19:48 test
[root@server1 test1]# ll | awk 'BEGIN{size=0}{size +=$5}END{print size} '
30

统计内存占有率大于0.1的进程,并把相关信息保存到文件当中

[root@server1 test1]# ps -aux| grep -v USER|awk '{if($4>0.1)print$2,$11}' > t1
[root@server1 test1]# cat t1
1 /usr/lib/systemd/systemd
3141 /usr/lib/systemd/systemd-journald
3169 /usr/lib/systemd/systemd-udevd
3170 /usr/sbin/lvmetad
6259 /usr/lib/polkit-1/polkitd
6262 /usr/bin/dbus-daemon
6269 /usr/sbin/NetworkManager
6558 /usr/sbin/sshd
6559 /usr/bin/python2
6561 /usr/sbin/rsyslogd
6644 /usr/libexec/postfix/master
6646 qmgr
6827 sshd:
6831 sshd:
6835 -bash
6850 /usr/libexec/openssh/sftp-server
9132 /sbin/dhclient
9315 pickup

取ip


[root@server1 test1]# ifconfig|awk '{if(NR==2)print$2}'

判断服务器上用户的类型

 awk -F: '{if($3==0) print"root"}{ if($3>0 && $3< 1000) print"系统用户"}{ if($3>=1000) print"普通用户"}' /etc/passwd

筛选出含有root的行

[root@server1 test1]# awk '/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

用户为root的行

[root@server1 test1]# awk -F: '$1=="root"{print$0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

统计/etc/fstab/文件中每个文件类型出现的次数

awk '/^UUID/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstab

与HTTP协作的Web服务器

一个Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率

用单台虚拟服务器实现多个域名

利用虚拟主机功能,HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点。

此时在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI

通信数据转发程序:代理、网关、隧道

HTTP通信时,除服务器和客户端以外,还有些用于通信数据转发的应用程序,如代理网关隧道,这些可以将请求转发给通信显露上的下一站服务器,并且能接受从那台服务器发送的响应再转发给客户端

代理

代理是一种具有转发功能的应用程序,它扮演了位于服务器和客户端中间人的角色,接受由客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端

代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器,代理不改变请求URI,会直接发送给持有资源实体的服务器,也就是源服务器,从源服务器返回的响应结果代理后再传给客户端

在通信过程中,可连接多态代理器,转发时需要发家Via首部字段以标出经过的主机信息

使用代理服务器可以利用缓存技术减少网络带宽流量、对特定网站的访问控制、获取访问日志等等。

代理的使用方法按照两种基准分类,一种是是否使用缓存,另一种是是否会修改报文

缓存代理

代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上,当代理再次接收到对应的请求时,可以将之前的缓存作为响应返回

透明代理

转发时,不对报文做任何加工

网关

网关是转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,他会像自己拥有资源的源服务器一样对请求进行处理

隧道

隧道是在相隔很远的服务器和客户端之间进行中转,保持双方通信连接的应用程序,届时使用SSL等加密手段进行通信,确保两者之间能进行安全的通信。隧道本身不会去解析HTTP请求,隧道在通信双方断开连接时结束

保存资源的缓存

缓存指代理服务器或客户端本地磁盘内保存的资源副本,利用缓存可坚守对源服务器的访问

缓存服务器会将从服务器返回的资源保存一份副本,利用缓存可避免多次从源服务器转发资源

缓存的有效期限

当源服务器上的资源更新时,缓存就变成旧资源了,即使存在存才,也会去想源服务器确认资源的有效性,如果判断缓存失效,缓存服务器会再次从源服务器上获取新资源

客户端缓存

缓存也可以存在在客户端浏览器当中,如果浏览器缓存有效,就可以直接从本地磁盘中读取