Nginx系列——websocket反向代理与资源压缩

5 篇文章 0 订阅
4 篇文章 1 订阅

Nginx系列

  1. 入门——Nginx系列——配置详解
  2. 进阶——Nginx系列——负载均衡配置
  3. 进阶——Nginx系列——解决跨域与接口可用性探测
  4. 进阶——Nginx系列——缓存解决接口性能问题
  5. 进阶——Nginx系列——accessLog日志挖掘与恶意IP封禁
  6. 进阶——Nginx系列——websocket反向代理与资源压缩

一、Nginx配置WebSocket反向代理

1、什么是WebSocket

      WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯,直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容,它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的基础设施。

2、WebSocket如何安装和启动我这边就不多说了直接上配置

配置

$ vim /usr/local/nginx/conf/nginx.conf

# 在http上下文中增加如下配置,确保Nginx能处理正常http请求。

http {

  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''   close;
  }

  upstream websocket {
    #ip_hash;
    server localhost:8010;  
    server localhost:8011;
  }

# 以下配置是在server上下文中添加,location指用于websocket连接的path。

  server {
    listen       80;
    server_name localhost;
    access_log /var/log/nginx/yourdomain.log;

    location / {
      proxy_pass http://websocket;
      proxy_read_timeout 300s;

      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
		}
	}
}

核心是下面的配置 其他和普通反向代理没区别, 表示请求服务器升级协议为WebSocket

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

这里面的关键部分在于HTTP的请求中多了如下头部:

Upgrade: websocket
Connection: Upgrade

这两个字段表示请求服务器升级协议为WebSocket。服务器处理完请求后,响应如下报文:

# 状态码为101
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade

       告诉客户端已成功切换协议,升级为Websocket协议。握手成功之后,服务器端和客户端便角色对等,就像普通的Socket一样,能够双向通信。不再进行HTTP的交互,而是开始WebSocket的数据帧协议实现数据交换。

       这里使用map指令可以将变量组合成为新的变量,会根据客户端传来的连接中是否带有Upgrade头来决定是否给源站传递Connection头,这样做的方法比直接全部传递upgrade更加优雅。

       默认情况下,连接将会在无数据传输60秒后关闭,proxy_read_timeout参数可以延长这个时间或者源站通过定期发送ping帧以保持连接并确认连接是否还在使用。

二、Nginx资源压缩

1、资源压缩的作用

  • 降低带宽占用
  • 减少报文的传输大小从而加快响应速度

对文本、js和css文件等进行压缩,一般是压缩后的大小是原始大小的25%

2、配置

#开启gzip,减少我们发送的数据量
gzip on;
gzip_min_length 1k;
​
#4个单位为16k的内存作为压缩结果流缓存
gzip_buffers 4 16k;
​
#gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU
gzip_comp_level 4;
​
#压缩的类型
gzip_types application/javascript text/plain text/css application/json application/xml text/javascript; 
​
#给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_vary on;
​
#禁用IE6以下的gzip压缩,IE某些版本对gzip的压缩支持很不好
gzip_disable "MSIE [1-6].";

3、面试题:压缩是时间换空间,还是空间换时间?

       在服务端是时间换空间的策略,服务端需要牺牲时间进行压缩以减小响应数据大小压缩后的内容可以获得更快的网络传输速度,时间是得到了优化所以是双向的


                                      《Nginx系列完结》——感谢支持

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值