正向代理和反向代理

经常会听到正向代理和反向代理的说法,那么具体怎么区分呢?

正向代理

正向代理,是在用户端的。

比如需要访问某些国外网站,我们可能需要购买vpn。并且vpn是在我们的用户浏览器端设置的(并不是在远端的服务器设置)。浏览器先访问vpn地址,vpn地址转发请求,并最后将请求结果原路返回来。

正向代理示意图

反向代理

有正向代理,就有反向代理,反向代理是作用在服务器端的,是一个虚拟ip(VIP)。对于用户的一个请求,会转发到多个后端处理器中的一台来处理该具体请求。

反向代理

区别

  • 正向代理:客户端 <一> 代理 一>服务端
  • 反向代理:客户端 一>代理 <一> 服务端

正向代理和反向代理的区别在于 代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端

参考资料

nginx开启gzip

前几天看到一个nginx的文章,突然想到我还没有为我的博客的nginx开启gzip压缩呢。所以今天就弄了一下。

下面是我在nginx配置中增加的开启gzip相关的配置:

nginx增加gzip配置

1
2
3
4
5
6
7
8
#gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";

然后重新使得nginx加载配置:

1
/usr/sbin/nginx -s reload

gzip指令描述

  • gzip on 这个指令用来控制开启或者关闭gzip模块,默认值为gzip off代表默认不开启gzip压缩
  • gzip_min_length 1k 置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值: 0 ,不管页面多大都压缩
  • gzip_buffers 4 32k 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存默认值: gzip_buffers 4 4k/8k 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
  • gzip_comp_level 4 gzip压缩级别,压缩级别 1-9,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)。默认值:1
  • gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css 压缩类型,匹配MIME类型进行压缩.默认值: gzip_types text/html 也就是默认不对js/css文件进行压缩。需要注意的是此处不能使用通配符,比如:text/*,无论是否指定text/html, 这种类型的都会被压缩。
  • gzip_vary on 和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
  • gzip_disable "MSIE [1-6]\." 禁用IE6的gzip压缩,为了确保其它的IE6版本不出问题,所以建议加上gzip_disable的设置
  • gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ... 我没有配置这个选项。这个指令一般是Nginx作为反向代理的时候启用,根据某些请求和应答来决定是否在对代理请求的应答启用gzip压缩,是否压缩取决于请求头中的Via字段,指令中可以同时指定多个不同的参数,意义如下:
    • expired - 启用压缩,如果header头中包含 “Expires” 头信息
    • no-cache - 启用压缩,如果header头中包含 “Cache-Control:no-cache” 头信息
    • no-store - 启用压缩,如果header头中包含 “Cache-Control:no-store” 头信息
    • private - 启用压缩,如果header头中包含 “Cache-Control:private” 头信息
    • no_last_modified - 启用压缩,如果header头中不包含 “Last-Modified” 头信息
    • no_etag - 启用压缩 ,如果header头中不包含 “ETag” 头信息
    • auth - 启用压缩 , 如果header头中包含 “Authorization” 头信息
    • any - 无条件启用压缩

检测是否gzip生效

可以使用chrome的开发者试图中的network窗口看具体资源的请求,检查其中的response中的Content-Encoding

或者使用curl命令来检测,一个样例:

1
2
3
4
5
6
7
8
9
10
11
12
~ » curl -I -H "Accept-Encoding: gzip, deflate" https://wenchao.ren
HTTP/1.1 200 Connection established

HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Wed, 27 Feb 2019 02:59:36 GMT
Content-Type: text/html
Last-Modified: Fri, 22 Feb 2019 12:58:41 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/"5c6ff201-1cf51"
Content-Encoding: gzip

参考资料

使用Let's Encrypt配置nginx证书

Automatically enable HTTPS on your website with EFF’s Certbot, deploying Let’s Encrypt certificates

主要参考:https://certbot.eff.org/lets-encrypt/centosrhel7-nginx

操作起来很简单,主要用到了下面的命令:

1
2
3
4
sudo yum install nginx
sudo certbot --nginx
sudo certbot renew --dry-run
0 0 1 * * certbot renew --post-hook "/usr/sbin/nginx -s reload"
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×