nginx 如何配置 upstream 代理?

2023-02-1509:20:49服务器及运维Comments1,157 views字数 1836阅读模式
作者:数据龛
来源:知乎文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

简单的示例,演示如何使用 Nginxupstream 模块配置代理服务器池,将客户端的请求转发到多个后端服务器上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

首先,我们需要安装 Nginx 服务器和 Python 环境:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

sudo apt-get update
sudo apt-get install nginx
sudo apt-get install python3 python3-pip

接着,我们创建一个 Python 脚本 app.py,用于模拟后端服务器:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

在当前目录下执行 python3 app.py,即可启动一个简单的 Web 服务器,监听本地的 5000 端口,用于接收客户端的请求。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

然后,我们创建一个 Nginx 配置文件 /etc/nginx/sites-available/example.com,并添加以下内容:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

upstream app_servers {
    server 127.0.0.1:5000;
    server 127.0.0.1:5001;
    server 127.0.0.1:5002;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://app_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

在上面的配置中,我们创建了一个 upstream 块,其中包含三个后端服务器的 IP 地址和端口号。然后,我们在 server 块中的 location 段中配置了一个代理服务器,将客户端的请求转发到 upstream 代理服务器池中的多个后端服务器上。注意,在 proxy_set_header 段中,我们设置了客户端的请求头,以便后端服务器可以获取客户端的真实 IP 地址和域名。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

最后,我们需要创建一个符号链接,将 Nginx 的配置文件链接到 sites-enabled 目录下,以便 Nginx 可以读取该配置文件:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

最后,重启 Nginx 服务即可:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

sudo systemctl restart nginx

现在,我们可以在浏览器中输入 http://example.com 来访问 Nginx 服务器,Nginx 服务器将会将请求转发到三个后端服务器中的一个,并将响应返回给客户端。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

upstream 代理是一种常用的负载均衡技术,通常用于将客户端的请求转发到后端的多个服务器中,从而分担单台服务器的压力,提高服务的可用性和性能。下面我们来详细解释一下 upstream 代理的网络原理。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

首先,当客户端发起请求时,请求会经过多个网络节点,包括本地主机、本地路由器、ISP 路由器等,最终到达 Nginx 服务器。Nginx 服务器收到请求后,会根据请求的地址和其他条件进行匹配,确定该请求应该由哪个 upstream 代理来处理。然后,Nginx 会将请求转发到代理服务器池中的一个或多个后端服务器上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

当 Nginx 将请求转发到后端服务器时,会将请求的内容和相关信息通过 TCP/IP 协议发送到后端服务器的 IP 地址和端口号。后端服务器收到请求后,会进行处理,然后将处理结果通过 TCP/IP 协议返回到 Nginx 服务器。Nginx 服务器收到后端服务器返回的结果后,会再将结果返回给客户端。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

在整个 upstream 代理的过程中,Nginx 服务器扮演了转发请求的中间人的角色,它通过代理服务器池将请求转发到多个后端服务器上,从而实现负载均衡和高可用性。根据不同的负载均衡算法,Nginx 可以将请求平均分配到每个后端服务器上,或者将请求转发到连接数最少的服务器上,或者将请求转发到性能最好的服务器上等等,以便更好地满足客户端的需求。同时,由于后端服务器之间可以相互通信,因此可以在多个服务器之间共享资源,例如数据库、缓存、文件系统等,从而提高系统的整体性能和可靠性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

总之,upstream 代理是一种非常实用的负载均衡技术,可以为服务提供高可用性和性能,并且可以根据不同的负载均衡算法和后端服务器的情况进行灵活的配置和调整。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/30863.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/30863.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定