我有一个 ubuntu VPS,用于托管我的基于 Java 的应用程序。它在端口 8080 上安装了 tomcat。
我使用下面的 iptable 命令将流量从端口 80 路由到 8080。老实说,我不是这方面的专家。我只是从某个网页复制了这个命令,它运行良好
sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
现在的问题是,我不知道为什么,但这个路由突然停止工作。没有任何规律。这是突然发生的。所以,我必须通过 SSH 连接到机器并再次运行此命令。所以一切又开始正常工作了
有人能帮助我吗
- 要么永久地解决这个问题。这样它就永远不会停止路由。
- 或者建议我一种自动化的方法。即始终检查此路由是否正常工作,如果不起作用,请运行命令
答案1
首先要声明:以下是错误的做法。以下解决方案只是治标不治本。无论如何:
我们需要两个东西来实现自动化。一个用于检查和修复重定向的脚本和一个用于运行该脚本的调度程序。
首先是脚本。将以下内容作为脚本放入/usr/local/sbin/check_80_redirections.sh
,为简单起见,使其可执行并可供所有人阅读chmod a+rx /usr/local/sbin/check_80_redirections.sh
。实际脚本:
/bin/sh #!/bin/sh 复制代码 REDIR_TAG="端口 80_redir_on" /sbin/iptables -t nat -n -L | grep "$REDIR_TAG" > /dev/null 如果 [ “$?” -ne 0 ]; 然后 # 0 表示匹配,因此 -ne 0 表示不匹配 => 重做 iptables /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 -m comment --comment "$REDIR_TAG" 菲
接下来是调度程序部分。我们可以使用发行版的 cron 子系统。编辑/etc/crontab
并将以下内容作为最后一行:
*/5 * * * * root /usr/local/sbin/check_80_redirections.sh
我在 Ubuntu 20.04 虚拟机上检查了这一点。我添加了脚本和 crontab 修改。我可以看到规则生效了。如果我手动删除规则,几分钟后它就会恢复。
我仍然强烈建议您找出需要此解决方法的根本原因。
答案2
通过将以下脚本添加到 /opt/shellscripts/curl.sh 解决了这个问题。此脚本访问我的应用程序 URL 并检查是否收到 200 响应。
status=$(curl -Is http://www.***.in/customer | head -n 1)
echo $status
if [[ ${status} != "HTTP/1.1 200 OK" ]]
then
echo "executing command"
eval $(sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080)
fi
然后将以下条目添加到 crontab
* * * * * /opt/shellscripts/curl.sh