nginx:proxy_bind 到范围内的随机 IP 地址

nginx:proxy_bind 到范围内的随机 IP 地址

我正在尝试在 nginx 中配置一个代理,将所有代理请求绑定到特定范围内的随机 IP 地址。每个代理请求都将来自不同的 IP 地址。

我目前已将配置发布如下。然而,由于某种原因,尽管配置加载正常,但 nginx 并未监听端口 80。当我尝试访问服务器时,连接被拒绝。

我的做法错了吗?

server {
  listen 80;
  listen [::]:80;

  server_name my.server.name;

  location / {
    # proxy all requests to destination
    proxy_pass https://destination;

    # generate random IPv6 between IPv6Prefix::0 and IPv6Prefix::13
    set_by_lua_block $ip { return 'IPv6Prefix::' .. string.format('%x', math.random(0, 19)) }
    proxy_bind $ip;

    # keep connections alive
    proxy_http_version 1.1;
    proxy_set_header Connection '';
  }
}

答案1

要测试 Nginx 是否在监听 80 端口,在同一台服务器上,您可以运行:

sudo netstat -nlp | grep nginx

您应该会得到与 Nginx 匹配的结果,报告它正在监听端口 80。如果有效,下一个测试是通过 HTTP 从服务器内部访问 Nginx:

curl http://127.0.0.1

如果成功,则问题出在防火墙或其他网络问题上。如果您正在运行防火墙,请检查服务器上的防火墙是否允许传入 HTTP。如果您处于 AWS 之类的环境中,您可能还需要检查我们的安全组规则是否也允许传入主机的 HTTP 请求。

关于您的代理代码,请注意代理绑定用于绑定到当地的IP 地址。即已分配给机器的 IP 地址。要实现此功能,似乎需要在 Nginx 启动之前运行一些额外的代码,这会将目标范围内的每个 IP 地址分配给您的机器(假设您的操作系统和网络硬件支持此功能)。

为了确保操作安全,所有 IP 地址也必须是未使用的,因为两台机器广播具有相同的 IP 地址可能会导致问题。

相关内容