Nginx基础之Proxy代理/Up stream负载均衡/会话保持

8、nginx Proxy 代理

1、代理原理

  • 反向代理产生的背景:

    在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。

  • 反向代理服务的实现:
    需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到空闲的服务器上。
    服务器返回自己的服务到负载均衡设备。
    负载均衡设备将服务器的服务返回用户。
    在这里插入图片描述
    在这里插入图片描述

2、正/反向代理的区别

那么问题来了,很多人这时会问什么是反向代理?为什么叫反向代理?什么是正向代理?我们来举例说明

  • 正向代理:

    举例:贷款

    正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;比如我们要访问youtube,可是不能访问,只能先安装个FQ软件代你去访问,通过FQ软件才能访问,FQ软件就叫作正向代理。
    在这里插入图片描述
    FQ软件就是正向代理
    在这里插入图片描述
    正向代理中,proxy和client同属一个LAN

反向代理:

反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;我们请求www.baidu.com时这www.baidu.com就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
访问www.baidu.com是正向代理的过程

在这里插入图片描述

反向代理中,proxy和server同属一个LAN
在这里插入图片描述

正向代理和反向代理对比示意图
两者的区别在于代理的对象不一样:
正向代理中代理的对象是客户端,proxy和client同属一个LAN,对server透明;
反向代理中代理的对象是服务端,proxy和server同属一个LAN,对client透明。
在这里插入图片描述

3、知识扩展1

  1. 没有使用LVS时,客户端请求直接到反向代理Nginx,Nginx分发到各个服务器,服务端响应再由Ngnix返回给客户端,这样请求和响应都经过Ngnix的模式使其性能降低,这时用LVS+Nginx解决。
  2. LVS+Nginx,客户端请求先由LVS接收,分发给Nginx,再由Nginx转发给服务器,LVS有三种方式:NAT模式(Network Address Translation)网络地址转换,DR模式(直接路由模式),IP隧道模式,路由方式使服务器响应不经过LVS,由Nginx直接返回给客户端。

在这里插入图片描述
在这里插入图片描述

4、知识扩展2

  1. HTTP Server和Application Server的区别和联系

    Apache/nignx是静态服务器(HTTP Server):

    Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache;

    Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。

    HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能

    HTTP Server(Nginx/Apache)常用做静态内容服务和代理服务器,将外来请求转发给后面的应用服务(tomcat,jboss,jetty等)。

    应用服务器(tomcat/jboss/jetty)是动态服务器(Application Server):

    应用服务器Application Server,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java,若是Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。

  2. 但是事无绝对,为了方便,应用服务器(如tomcat)往往也会集成 HTTP Server 的功能,nginx也可以通过模块开发来提供应用功能,只是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。

  3. 常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat

    常用商业集群硬件有:F5, Netscaler,Radware,A10等

5.nginx Proxy 配置

1、代理模块

ngx_http_proxy_module

2、代理配置

代理
Syntax: 	proxy_pass URL;				   #代理的后端服务器URL
Default: 	—
Context: 	location, if in location, limit_except
缓冲区
Syntax:     proxy_buffering on | off;
Default:    proxy_buffering on;			   #缓冲开关
Context: 	http, server, location
proxy_buffering开启的情况下,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端
(边收边传,不是全部接收完再传给客户端)。

Syntax:   	proxy_buffer_size size;
Default: 	proxy_buffer_size 4k|8k;	   #缓冲区大小
Context: 	http, server, location

Syntax: 	proxy_buffers number size;
Default: 	proxy_buffers 8 4k<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,您可以使用 Nginx 作为代理来处理 WebSocket 请求。但是,由于 WebSocket 是基于 HTTP 协议的,因此需要在 Nginx 配置文件中添加一些特殊的指令来支持 WebSocket 协议。 以下是一个基本的 Nginx 配置文件示例,可用于代理 Socket.io/WebSocket: ``` http { upstream websocket { # 定义负载均衡策略,这里使用轮询 # 如果您有多个 WebSocket 服务器,可以将它们添加到这个 upstream 块中 server server1:3000; server server2:3000; server server3:3000; } server { listen 80; # 这里添加一些常规的 Nginx 配置指令,例如 server_name、access_log 等 location /socket.io/ { # WebSocket 协议需要使用 HTTP/1.1 协议 proxy_http_version 1.1; # 开启长连接 proxy_set_header Connection "Upgrade"; # 开启协议升级模式 proxy_set_header Upgrade $http_upgrade; # 负载均衡 proxy_pass http://websocket; proxy_redirect off; proxy_read_timeout 60s; } # 其他 location 配置指令 } } ``` 在上面的配置中,我们使用 upstream 块来定义 WebSocket 服务器。这里使用轮询策略,将请求分发到三个服务器上。在 location 块中,我们使用 proxy_http_version、proxy_set_header 和其他一些指令来启用 WebSocket 协议和负载均衡。在 proxy_pass 指令中,我们将请求转发到定义的 upstream 服务器。 请注意,在使用 Nginx 代理 WebSocket 时,必须确保负载均衡服务器和 WebSocket 服务器之间的连接是长连接。否则,WebSocket 连接可能会因为连接关闭而中断。 希望这个回答可以帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值