互联网服务ApacheNginx

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

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

参与12

2同行回答

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...显示全部

你的需求是可以实现的。
需求示例:
当用户请求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
张颖颖张颖颖系统运维工程师某公司
用了ngx_stream_geo_module模块---nginx默认开启似乎可以解决显示全部

用了ngx_stream_geo_module模块---nginx默认开启
似乎可以解决

收起
互联网服务 · 2020-07-03
浏览3487

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-06-30
  • 关注会员:2 人
  • 问题浏览:5643
  • 最近回答:2020-07-03
  • X社区推广