环境:从应用程序服务器请求特定端口上的页面的 Web 服务器。
问题:如果在应用程序服务器上运行的某个Web应用程序重新启动期间页面请求进入应用程序服务器,则启动会被破坏。
问题:是否可以在启动 Web 应用程序的 shell 脚本的开头包含特定端口(或重定向)上的某种块?这必须“即时”工作,当然在 shell 脚本结束时反转,以便一旦应用程序启动并运行,请求就会正常流动。
答案1
在应用程序服务器计算机上:
启动应用程序之前:
iptables -I INPUT -d <app server ip> --dport <app server port> -j REJECT
启动完成后:
iptables -D INPUT -d <app server ip> --dport <app server port> -j REJECT
如果需要,您也可以将流量重定向到另一台显示“应用程序正在加载”的服务器。如果是这种情况,请更换:
-j REJECT
和
-j DNAT --to-destination <ip address of other machine>
在这两个命令上。请注意,如果这样做,您需要启用 IP 转发。需要配置:
net.ipv4.ip_forward = 1
在/etc/sysctl.conf
这将在下次启动时生效。要立即应用于正在运行的系统:
echo 1 > /proc/sys/net/ipv4/ip_forward
您可能还需要伪装从应用程序服务器流向服务器的流量,使接收服务器看起来像是源自该服务器(即重写源 IP 地址)。您可以通过以下方式做到这一点:
iptables -t nat -I POSTROUTING -o <interface traffic will get out> -j MASQUERADE
另一种选择是,如果您在与应用程序服务器相同的计算机上有另一台服务器,在不同的端口中,可以显示“应用程序正在加载页面”,您可以将流量重定向到该端口。同样的想法,只是代替 REJECT/DNAT:
-j REDIRECT --to-port <other local server port number>
此选项不需要将您的应用程序服务器转换为路由器:)(不需要 ip_forward)