我正在尝试设置 OpenVPN 来监听我的 Asustor NAS 上的端口 443,然后通过使用基于以下内容的端口共享选项将所有 HTTPS 流量传递给 Apache: OpenVPN 与 Apache/SSL 端口共享
但是我没能让它工作。我认为问题在于端口 443 似乎正在监听进程 myhttp。当我运行# netstat -tulpn | grep LISTEN命令,我将得到这个结果:
tcp 0 0 0.0.0.0:443 0.0.0.0:* 监听 4475/myhttpd
当我将 OpenVPN 上的端口更改为 444 并运行# netstat -tulpn | grep LISTEN再次命令,我将得到下一个结果:
tcp 0 0 0.0.0.0:443 0.0.0.0:* 监听 4475/myhttpd
tcp 0 0 0.0.0.0:444 0.0.0.0:* 侦听 1507/openvpn
tcp 0 0 127.0.0.1:1195 0.0.0.0:* 侦听 1507/openvpn
我不知道如何解决这个问题。有人有什么建议吗?
答案1
问题是您的 Apache 正在监听0.0.0.0:443
,而您需要将其设置为监听localhost:443
。这样您就不会遇到服务器端口冲突的问题。
答案2
NAS 上的服务按数字和字母顺序依次排列,VPN 服务/usr/builtin/etc/init.d/
位于S83vpnconnect
。
我最终为自己做的是创建一个启动脚本,该脚本在需要它们的脚本之前终止使用我想要的端口的所有内容:
S49killmyhttpd -> /usr/local/AppCentral/killmyhttpd/CONTROL/start-stop.sh
在你的情况下,你可能希望将其链接为S83killmyhttpd
,并且脚本将是:
#! /bin/sh
case $1 in
start)
PID1="$(fuser 80/tcp)"
PID2="$(fuser 443/tcp)"
echo "Killing useless port 80 hog, PID=${PID1}"
kill -9 ${PID1}
echo "Killing useless port 443 hog, PID=${PID2}"
kill -9 ${PID2}
;;
stop)
echo "myhttpdkiller can't bring back what it killed"
;;
reload)
PID1="$(fuser 80/tcp)"
PID2="$(fuser 443/tcp)"
echo "Killing useless port 80 hog, PID=${PID1}"
kill -9 ${PID1}
echo "Killing useless port 443 hog, PID=${PID2}"
kill -9 ${PID2}
;;
*)
echo "usage: $0 {start|stop|reload}"
exit 1
;;
esac
exit 0
您可能需要也可能不需要该重新加载部分。对我来说,这是关于此 NAS 最令人沮丧的事情之一 - Web GUI 界面会在端口 80 或 443 释放后立即启动 myhttpd,其目的只是将它们重定向到 8000 和 8001。
对于我自己来说,上面的脚本不能很好地工作,因此我将 kill 块放在 docker init 脚本中,以确保我的容器在其他任何脚本执行之前捕获端口。