nginx负载均衡/端口转发笔记

本文介绍了如何在Linux系统上安装并配置Nginx进行负载均衡,包括创建配置文件、设置代理转发、调整超时时间和最大连接数。在实际应用中,可能出现请求Host头导致404错误的问题,解决方案是固定Host值。此外,文章还讨论了在多层代理场景下Host头的传递可能引发的问题,并给出了相应解决策略。
摘要由CSDN通过智能技术生成

1.安装nginx

sudo su root

apt-get install nginx

2.创建配置文件:

touch /etc/nginx/conf.d/balance.conf

3.编辑配置文件:

vi /etc/nginx/conf.d/balance.conf

加入配置:

#负载均衡

upstream nginxBalance {

        #将同一回话定向到同一服务器

        #ip_hash;       

        server 10.39.xx.xx:9080;
        server 10.39.xx.xx:9080;
}
server{
        listen 80;
        server_name  10.39.xx.xx;
        
        location / {
                proxy_pass http://nginxBalance;
                proxy_set_header Host $proxy_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }       
        
}

server{
        listen 8080;
        server_name  10.39.xx.xx;
        
        location / {
                proxy_pass http://127.0.0.1:80;
                proxy_set_header Host $proxy_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }       
        
}

4.nginx命令

重启nginx: systemctl restart nginx

nginx -v

service start nginx

tail -fn 100 /var/log/nginx/access.log

检查nginx配置: nginx -t -c /etc/nginx/nginx.conf

彻底卸载nginx:apt-get --purge autoremove nginx

5.其他说明

        5.1 在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径

        5.2 修改超时时间

        http {

                keepalive_timeout 120;

        }

        5.3 修改最大连接数

         查看系统支持的最大连接数命令:ulimit -n

        一般结果为1024,说明server只允许同时打开1024个文件,处理1024个用户进程

         执行命令:limit -HSn 65535,修改linux进程支持的最大连接数为65535

        修改linux配置

        events {

                worker_connections 65535;

        }

        

        5.4 压测各节点产生大量连接导致失败

        原因:默认使用的是HTTP1.0去请求,不支持HTTP keep-alive,我们需要在Nginx上启用HTTP1.1的向后端发送请求,同时支持Keep-alive

修改为

upstream nginxBalance {
        server 10.39.xx.xx:9080;
        server 10.39.xx.xx:9080;
        keepalive 60;
}
server{
        listen 80;
        server_name  10.39.xx.xx;

        location / {
                proxy_pass http://nginxBalance;
                proxy_set_header Host $proxy_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
        }

}

配置说明:

proxy_set_header Host $host;
本案例因为不涉及到域名所以用不到$Host值,作用也比较好理解,就是nginx做代理时,把原http请求的Header中的Host字段也放到转发的请求里,如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你的请求的是哪个域名的资源的,

proxy_set_header X-Real-IP $remote_addr;
只能获取到与服务器本身直连的上层请求ip 写入到http请求头中

proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
定义客户端IP,如果多层代理都有配置这个值,离backent最近的会覆盖之前的值 所以一般只在连接客户端的代理上写添加这条值,这样backend就能获取到客户端的真实IP,单独使用无效

proxy_set_header X-Forwarded-For $http_x_forwarded_for;
把客户端IP写入到http请求头中,前提是之前有X-Real-IP $remote_addr定义过客户端IP,所以单独使用无效

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
相当于 $http_x_forwarded_for 和 $remote_addr和结合 获取上层IP和把客户端IP写入请求头中

问题:
nginx 负载均衡时:
请求入参中的header中带有host会出现404错误
原因:请求的地址和host的地址不一致,会出现这个问题
延伸:
当生产涉及多次转发nginx场景时,host的传递是否会出现问题
nginx 设置:
 proxy_set_header Host $proxy_host;# 默认配置 # 顾名思义,请求头设置的为代理后的域名。
 此时下一个nginx收到的host为nginxBalance,会出现404错误
解决方式:
1.写死Host
server {
  listen 80;
  server_name 10.38.xx.xx;
  location / {
    proxy_pass       http://main;
    proxy_set_header Host            10.38.xx.xx1;
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值