我正在尝试在 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 地址可能会导致问题。