NGINX正向代理及简单负载均衡的实现

本文详细介绍了如何在LNMP环境中配置Nginx的正向代理功能,包括基于IP和用户访问控制,以及实现简单负载均衡,涉及正则表达式、权重分配和不同类型的负载均衡方法。

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

这篇博客是在lnmp的环境下进行实验,关于lnmp环境的搭建,可以参考我的这篇博客LNMP服务部署

NGINX模块和正向代理

简介

正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

对虚拟主机配置文件的分析

server
    {
        listen 80;//指定虚拟主机的服务端口
        #listen [::]:80;
        server_name test.com ;//指定IP地址或者域名,多个域名之间用空格分开
        index index.html index.htm index.php default.html default.htm default.php;//设定访问的默认首页地址
        root  /home/wwwroot/test.com;//指定虚拟主机的网页根目录

        include rewrite/none.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;
        # 基于IP的访问控制
        # location /{
        #     # 拒绝192.168.47.1访问
        #     deny 192.168.47.1;
        #     # 允许所有的访问
        #     allow all;
        # }
        # 基于用户的访问控制
        # location /{
        #     # 如果认证没有通过则关闭网站
        #     auth_basic "closed site";
        #     # 用于认证的用户名密码文件的位置
        #     auth_basic_user_file /usr/local/nginx/conf/htpasswd;
        # }
        # 正向代理
        location /try/{
            proxy_pass http://www.baidu.com/;
        }
        # 以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理
        # 而expires用来指定静态文件的过期时间,这里是30天。
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }
        # 所有扩展名以js、css结尾的静态文件都交给nginx处理
        # 而expires用来指定静态文件的过期时间,这里是12小时。
        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
        # 除符合正则表达式[/.well-known]之外的URL,全部拒绝访问
        location ~ /.well-known {
            allow all;
        }
        # 满足正则表达式[/\.]的URL,全部拒绝访问
        location ~ /\.
        {
            deny all;
        }

        access_log off;//指定虚拟主机的访问日志存放路径,这里是关闭的
    }

URL地址匹配是进行Nginx配置中最灵活的部分。location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。

一些正则表达式规则

  • ~ 区分大小写匹配
  • ~* 不区分大小写匹配
  • ^ 以什么开头的匹配
  • $ 以什么结尾的匹配
  • 转义字符。可以转. * ?等

基于ip访问的控制

在虚拟主机配置文件中加入下列语句,虚拟主机配置文件位置为

/usr/local/nginx/conf/vhost/test.com.conf
location /{

            # 拒绝192.168.47.1访问
            deny 192.168.47.1;
            # 允许所有的访问
            allow all;
        }

然后重启nginx服务

nginx -s reload

或重启整个lnmp服务

lnmp restart

再访问test.com出现403即为成功

基于用户的访问控制

在虚拟主机的配置文件中加入下列语句

location /{
            # 如果认证没有通过则关闭网站
            auth_basic "closed site";
            # 用于认证的用户名密码文件的位置
            auth_basic_user_file /usr/local/nginx/conf/htpasswd;
        }

接着安装工具

yum -y install httpd-tools
yum provides htpasswd
  • 因为接下来需要用到一个命令行工具htpasswd(用来生成访问密码)。此命令是httpd-tools包的一部分,所以要先安装这个工具包
  • yum provides反查询文件在什么包中

然后就可以用命令添加用户名和密码到文件中,可以顺便修改一下文件的权限

htpasswd -bc /usr/local/nginx/conf/htpasswd admin 123456
chmod 600 htpasswd

打开这个用户名密码文件可以发现这个密码是被加密过的

接着重启nginx服务,然后去访问该网站就会出现输入用户名和密码的界面

正向代理

在虚拟主机的配置文件中加入下列语句

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

这时候重启nginx服务再去访问test.com就会跳转到百度的页面,并且点浏览器的返回也会不到test.com

接着可以更进一步,修改配置文件为

location /try/{
            proxy_pass http://www.baidu.com/;
        }

记着这个时候需要去网站目录下新建一个try文件,不然访问时会出错

然后重启nginx服务并去访问test.com会发现就是原页面

这时访问test.com/try/会发现访问了百度,接着可以仿造百度搜索时的情况在后面加参数,比如

证明我们正向代理配置成功

NGINX简单负载均衡实现

简介

  • 负载均衡:分摊到多个操作单元上进行执行。就是我们需要一个调度者,调整各个服务器的负载,从而保持服务器集群的整体性能最优,这就是负载均衡。
  • 负载均衡有很多算法,比如原地址哈希法、轮询法、随机法等,这里不讨论他们的算法原理,只采用加权轮询法来实现简单的负载均衡
  • 加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,按照权值的不同分配负载。比如ABC三个服务器的权值分别是1、2、5,那么分配会按照10%、20%、50%的权重将负载分配给他们。
  • 负载均衡分为四层和七层,其区别在于,四层交换在osi第四层工作,这种负载均衡器不理解应用协议。七层交换在osi最高层工作,这种负载均衡器可以理解应用协议。
  • 因为环境原因,只能实现负载均衡,无法体现出负载均衡的效果,并且由于我自己理解的也不是很深入,所以并没有进行深入的解释,只是给出了一个实现的方法。

nginx七层负载均衡

这里需要对nginx虚拟主机的配置文件进行修改,虚拟主机配置文件的路径是

/usr/local/nginx/conf/vhost/test.com.conf

,修改的内容如下

# 因为没有这么多机器,所以以下只是举例,没法测试
        upstream upload_blancer{
            server 192.168.47.144 weight=5;//weight表示权重的值
            server 192.168.47.150 weight=5;
            server 192.168.47.148 down;//down表示该server临时不参与负载均衡
            server 192.168.47.149 backup;//当其他的机器down或者忙的时候,请求backup机器
        }
        # 配置完负载均衡一定要在这里做代理
        location /{
            proxy_pass http://upload_blancer;
        }
  • nginx的upstream模块提供数据转发功能,将使nginx跨越单机的限制,完成网络数据的接收、处理和转发。
  • 数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。
  • 使用upstream模块定义集群名称和节点地址,定义在server字段之外httpd字段之内

nginx四层负载均衡

这里需要对nginx的配置文件进行修改,nginx配置文件的位置是

/usr/local/nginx/conf/nginx.conf

修改的内如下

stream{
    # 利用upstream模块配置数据转发
    upstream sshers{
        server 192.168.47.144:22;
        server 192.168.47.137:22;
    }
    server{
        listen 192.168.47.144:9000;//设置监听端口
        proxy sshers;//设置代理
    }
}

nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值