Nginx反向代理与负载均衡

本文详细介绍如何使用Nginx进行反向代理和负载均衡,包括配置upstream、选择负载策略及具体实践步骤。通过实例展示如何将请求分发至多个后端服务器,实现高效稳定的服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍一下使用Nginx反向代理来做负载均衡,只需要配置upstream并选择负载均衡策略,再配置server反向代理功能就全部搞定了。

1.架设Nginx服务

直接使用Docker启动一台虚拟Nginx服务器。

$ sudo docker run --net=pub_net --ip=192.168.1.13 --name macvlan_ngx1 --restart always -d nginx

 

2.配置Nginx服务——反向代理与负载均衡

Nginx的主配置文件位于/etc/nginx/nginx.conf中。默认内容如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

 

3.

以下给出一份配置文件,主要用于NginxTomcat转发的负载均衡。我在Docker中虚拟出了5台Tomcat服务器(192.168.1.[19-23])。其中,由两台Tomcat服务器组成了Web Server 1服务器组(采用ip_hash算法,就是根据ip做转发)。用3台Tomcat组成了Web Server 2服务器组(设置服务器转发权重)。
e.g.

upstream webserver1 {
    ip_hash;
    server 192.168.1.19:8080;
    server 192.168.1.20:8080;
}

upstream webserver2 {
    server 192.168.1.21:8080 weight=5;
    server 192.168.1.22:8080 weight=3;
    server 192.168.1.23:8080 weight=2;
}

server {
    listen 80;
    server_name tomcat1.com tomcat2.com;

    location / {
        proxy_pass http://webserver1;
    }
    location /hello {
        proxy_pass http://webserver1/hello;
    }
}

server {
    listen 80;
    server_name tomcat3.com tomcat4.com tomcat5.com;

    location / {
        proxy_pass http://webserver2;
    }
    location /world {
        proxy_pass http://webserver2/world;
    }
}

server {
    listen 80;
    server_name pc.com;

    location / {
		proxy_pass https://www.baidu.com/;
    }
}

 

可以很明显的看到/etc/nginx/conf.d/*.conf中的所有.conf后缀的都会被自动加载作为配置文件。为此,自定义配置文件时,直接在conf.d目录下新建后缀为.conf的文件即可。

4.

一些注意事项

有几点需要注意的,Nginx收到请求之后,会获取请求的Host字段,然后根据Host内容匹配server_name然后转发给不同的server。转发时直接使用proxy_pass指令即可,路径中可以写upstream以实现负载均衡。

5.

配置hosts文件

由于,这里只启动了一台IP为192.168.1.13的Nginx服务器,那么在我的开发机(Windows 10,192.168.1.2)上的C:\Windows\System32\drivers\etc\hosts文件中可以做以下映射。

192.168.1.13 tomcat1.com
192.168.1.13 tomcat2.com
192.168.1.13 tomcat3.com
192.168.1.13 tomcat4.com
192.168.1.13 tomcat5.com
192.168.1.13 pc.com

6.

浏览器访问Nginx服务器

好了,测试Nginx配置文件的有效性(这里-t后不需要添加任何内容,不要写成nginx -t /etc/nginx/nginx.conf):

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新载入Nginx

# nginx -s reload
2018/10/28 14:18:44 [notice] 24#24: signal process started

此时,就可以在开发机的浏览器中访问Nginx服务器,查看具体的反向代理与负载均衡效果了:

http://tomcat1.com/
http://tomcat2.com/hello
http://tomcat3.com/world
http://pc.com/

 

小结:

正向代理隐藏真实客户端,反向代理隐藏真实服务端。

nginx 的配置

常用三个命令 
start nginx 
nginx -s reload #修改配置后载入新的配置 
nginx -s stop

1.单域名映射到多服务

server {
        listen       80;
        server_name  www.demo.com;
        location /sewage/ {
            proxy_pass http://192.168.0.66:32322/;
        }
        location /sewageserver/ {
            proxy_pass http://192.168.0.66:32321/;
        } 
        location /abc/ {
            proxy_pass http://192.168.0.66:9004/;
        }
        location / {
            proxy_pass http://192.168.0.66:9000/;
        }       
    }
 

2.多域名映射到多服务

 server {
        listen       80;
        server_name  pro.letv.com;

        location / {
            proxy_pass http://192.168.0.66:9000/;
        }     
    }
    server {
        listen       80;
        server_name  vid.atm.youku.com;

        location / {
            proxy_pass http://192.168.0.66:9999/;
        }     
    }
 

资源下载链接为: https://pan.quark.cn/s/9648a1f24758 这个HTML文件是一个专门设计的网页,适合在告白或纪念日这样的特殊时刻送给女朋友,给她带来惊喜。它通过HTML技术,将普通文字转化为富有情感和创意的表达方式,让数字媒体也能传递深情。HTML(HyperText Markup Language)是构建网页的基础语言,通过标签描述网页结构和内容,让浏览器正确展示页面。在这个特效网页中,开发者可能使用了HTML5的新特性,比如音频、视频、Canvas画布或WebGL图形,来提升视觉效果和交互体验。 原本这个文件可能是基于ASP.NET技术构建的,其扩展名是“.aspx”。ASP.NET是微软开发的一个服务器端Web应用程序框架,支持多种编程语言(如C#或VB.NET)来编写动态网页。但为了在本地直接运行,不依赖服务器,开发者将其转换为纯静态的HTML格式,只需浏览器即可打开查看。 在使用这个HTML特效页时,建议使用Internet Explorer(IE)浏览器,因为一些老的或特定的网页特效可能只在IE上表现正常,尤其是那些依赖ActiveX控件或IE特有功能的页面。不过,由于IE逐渐被淘汰,现代网页可能不再对其进行优化,因此在其他现代浏览器上运行可能会出现问题。 压缩包内的文件“yangyisen0713-7561403-biaobai(html版本)_1598430618”是经过压缩的HTML文件,可能包含图片、CSS样式表和JavaScript脚本等资源。用户需要先解压,然后在浏览器中打开HTML文件,就能看到预设的告白或纪念日特效。 这个项目展示了HTML作为动态和互动内容载体的强大能力,也提醒我们,尽管技术在进步,但有时复古的方式(如使用IE浏览器)仍能唤起怀旧之情。在准备类似的个性化礼物时,掌握基本的HTML和网页制作技巧非常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值