互联网服务ApacheNginx

nginx/tengine 四层转发,根据源ip转发到指定ip端口?

请问大佬们,nginx/tengine 四层转发规则,能不能根据不同源ip转发到指定ip端口?七层可以根据 if ($remote_addr ~)语句来实现,那么四层可以用什么来实现呀?显示全部

请问大佬们,nginx/tengine 四层转发规则,能不能根据不同源ip转发到指定ip端口?七层可以根据 if ($remote_addr ~)语句来实现,那么四层可以用什么来实现呀?

收起
参与12

查看其它 1 个回答youki2008的回答

youki2008youki2008系统架构师DDT

你的需求是可以实现的。
需求示例:
当用户请求IP为192.168.2.11时把后端请求转发到192.168.2.11服务器的8080端口
当用户请求IP为192.168.2.12时把后端请求转发到192.168.2.12服务器的8080端口
当请求的IP不是192.168.2.11和192.168.2.12时,将请求全部转发到192.168.2.66的8080端口

通过nginx实现,nginx配置如下
server {
listen 80;
access_log /var/log/nginx/a.log;

location / {
proxy_ignore_client_abort on;
proxy_read_timeout 200s;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 1000m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

if ($remote_addr ~ "192.168.2.11")
{

proxy_pass http://ip11;
break;
}

if ($remote_addr ~ "192.168.2.12")
{

proxy_pass http://ip12;
break;
}

proxy_pass http://ip66;

}

}

upstream ip11 {
server 192.168.2.11:8080 max_fails=5 fail_timeout=10;
}

upstream ip12 {
server 192.168.2.12:8080 max_fails=5 fail_timeout=10;
}

upstream ip66 {
server 192.168.2.66:8080 max_fails=5 fail_timeout=10;
}

互联网服务 · 2020-06-30
  • 您这个是在七层上可以这样配置,但是四层stream这样配置不支持if语句
    2020-07-01
  • 请问是什么需求一定要在4层做转发呢。换一个思路,你已经通过proxy_set_header X-Real-IP $remote_addr;和 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 都可以获得源IP。 试试写lua脚本实现
    2020-07-03
  • 因为是socket,只支持四层转发,所以。。。
    2020-07-03
  • cpy  cpy回复 张颖颖
    老师您好,我们也遇到了这个问题,有这方面的需求,请问最后能实现吗,怎么配置的
    2023-10-10

回答者

youki2008
系统架构师DDT
擅长领域: 服务器云计算数据库

youki2008 最近回答过的问题

回答状态

  • 发布时间:2020-06-30
  • 关注会员:2 人
  • 回答浏览:3938
  • X社区推广