编程技术分享平台

网站首页 > 技术教程 正文

Nginx 反向代理按照权重负载均衡实现方法

xnh888 2024-10-16 17:39:52 技术教程 17 ℃ 0 评论

Nginx是一个开源软件,传统上用于网络服务、服务器端反向代理、负载平衡、服务器端加密、多媒体服务等。在这个演示中,我将重点介绍网络服务和反向代理,以及负载平衡。

课题

  1. 设置和安装
  2. Nginx网络服务
  3. Nginx反向代理
  4. Nginx的负载平衡

请注意。我选择了ubuntu操作系统,并在其中部署了Nginx服务器,因为大多数服务器都使用ubuntu(Linux发行版)作为云计算的服务器。

设置和安装

第1步:更新我们的本地软件包索引并在我们的机器上安装nginx

$ sudo apt update
$ sudo apt install nginx

第2步:调整防火墙 ,需要调整防火墙软件以允许访问该服务

$ sudo ufw app list


Nginx HTTP:如果你想使用任何这些主要的 "nginx HTTP",它将使用默认的端口 "80",因为你将使用nginx的本地主机和正常使用,建议使用 "Nginx HTTP"

Nginx HTTPS:如果你正在处理实时托管的网络应用和TLS/SSL加密的流量,建议使用Nginx HTTPS,它将打开 "443 "端口。

Nginx Full:Nginx Full将同时开放80和443端口,可以利用HTTP、HTTPS流量。

你可以通过键入来启用其中任何一项。

$ sudo ufw allow 'Nginx HTTP'

第4步:启动Nginx服务

启用一个服务不仅可以启动该服务,还可以让systemctl在机器重启时重新启动。

$ sudo systemctl enable nginx

如果在安装和设置过程中出现任何问题,请键入以下命令,并验证该服务是否运行正常

$ systemctl status nginx

应该看到:

● nginx.service - A high performance web server and a reverse proxy server
 Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: e>
                  Active: active (running) since Mon 2023–02–06 21:16:48 IST; 47s ago
  Docs: man:nginx(8)
 Main PID: 70620 (nginx)
 Tasks: 3 (limit: 8378)
 Memory: 4.8M
  CPU: 64ms
   CGroup: /system.slice/nginx.service
 ├─70620 "nginx: master process /usr/sbin/nginx -g daemon on; master_>
 ├─70623 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" >
    └─70624 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" ""

第5步:在浏览器中打开一个窗口,输入你的IP地址或 "http://localhost:80"

2. Nginx网络服务

Nginx的主配置文件位于/etc/nginx/nginx.conf。你可以编辑这个文件,按照自己的喜好配置Nginx。

要建立一个基本的网站,你需要在Nginx配置中创建一个服务器块。一个服务器块是一个虚拟主机,指定服务器对一个特定域的设置。

下面是一个基本服务器块的例子。

第1步:在你的机器上添加/var/www/index.html文件。

<html>
   <head>
   <title>demo web site</title>
 </head>
 <body>
      <h1>Success! Hello World.</h1>
 </body>
</html>

第2步:在nginx.conf文件的http块内添加以下代码块

server {
  listen 7070;
  server_name -;
  root/var/www; #your path to the HTML file
  index index.html; #inside your project index.html must present
  location / {
    try_files $uri $uri/ =404;
  }
}

在添加了服务器块后,nginx.conf文件的结构看起来像这样

http {
    Server {
          …
    }
    …
      …
}

第3步:打开你的浏览器,输入localhost:7070

注:- 现在你已经使用nginx网络服务在你的机器上部署了你的网站。

反向代理

反向代理充当了客户向服务器请求资源的中介。客户端连接到反向代理,然后代表客户端向服务器发出请求。反向代理将资源返回给客户,看起来就像客户直接连接到服务器一样。

我们将使用vuejs构建网络应用,在你的Linux机器上使用nginx反向代理提供服务。

按照以下步骤配置nginx反向代理。

第1步:打开Nginx配置文件。

sudo nano /etc/nginx/sites-available/default

第2步:在文件中添加以下反向代理配置。

server {
  Server_name example.com;# add Your Domain Here
  root /home/shivam/DemoVueProject/dist;# Your path to web app build
  index index.html;
  location / {
    try_files $uri $uri /index.html;
    proxy_buffering off;
  }
  error_log off;
  access_log off;
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

在这个配置中,Nginx被用来为一个位于/home/shivam/DemoVueProject/dist、域名为example.com的单页应用程序提供内容。

server_name指令设置了Nginx将响应的域名。root指令设置服务器的根目录,也就是应用程序的位置。index指令设置默认的索引文件为index.html。

location / 块设置了对根 URL / 的传入请求的行为。try_files 指令尝试提供所请求的文件,如果它存在的话。如果该文件不存在,它就提供index.html文件。proxy_buffering指令关闭了代理的缓冲功能。

listen指令设置了Nginx对传入连接的监听端口。在本例中,它是通过SSL加密监听443端口。ssl_certificate、ssl_certificate_key、include和ssl_dhparam指令设置了服务器的SSL/TLS加密功能。这些文件由Certbot管理,它是一个自动获取和更新SSL证书的工具。

最后,error_log和access_log指令可以关闭错误和访问日志。

Nginx负载平衡

第1步:打开Nginx配置文件。

sudo nano /etc/nginx/sites-available/default

第2步:在文件中添加以下负载平衡配置。

upstream blog_backend {
  server 127.0.0.1:8081 weight=5;
  server 127.0.0.2:8092 weight=3;
  server 127.0.0.3:8093;
}
server {
  listen 80;
  root /home/shivam/DemoVueProject/dist;# Your path to web app build
  index index.html;
  location / {
    proxy_pass http://blog_backend;
    proxy_buffering off;
    proxy_set_header X-Real-IP $remote_addr;
  }
  error_log off;
  access_log off;
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

在这个配置中,Nginx被设置为一个有多个后端服务器的博客的负载平衡器。上游块定义了后端服务器,每个服务器都有一个主机名,即(ip和端口)和一个权重。权重决定了每个服务器应该收到的请求的相对比例。

服务器块设置了Nginx在80端口监听对example.com域名的请求。location块设置了对根URL/的传入请求的行为。 proxy_pass指令告诉Nginx将传入的请求转发给blog_backend上游块中定义的后端服务器。proxy_set_header指令为发送到后端服务器的请求设置Host和X-Real-IP头信息的值。

在这种配置下,Nginx将按照5:3:1的比例将传入的请求分配给后端服务器,这是由后端服务器的权重决定的。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表