将默认 HTTP 端口重定向到应用程序

将默认 HTTP 端口重定向到应用程序

在我的 CentOS 服务器上mydomain.com,我有一个 svn Web 应用程序在端口 8880 上运行。我想隐藏该端口:此时,如果有人想要访问,他们需要通过 访问http://thisdomain.com:8880/svn。我想让该应用程序可在 访问http://thisdomain.com/

答案1

选项 1:NAT 端口转发

如果您在这里需要做的就是将外部端口 80 上的请求重定向到端口 8880 上运行的内部程序,您可以使用iptables转发端口为了这:

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to 127.0.0.1:8880

这里有几点需要理解:

  1. 我猜你正在运行某种虚拟专用服务器,所以eth0可能不是正确的接口名称。如果是这样,您将必须更换它。

    顺便说一句,如果您使用共享主机或您的 VPS 不允许iptables,请跳到下一个选项。

  2. 如上所述,该规则假设您已将此内部程序配置为仅侦听本地主机接口127.0.0.1。这让你得到了你所要求的“隐藏”行为。

  3. 您先前存在的防火墙规则可能会干扰当前编写的此规则。在修改当前规则之前,没有什么可以替代iptables它们,但如果它不起作用,您可以盲目地尝试添加另一个规则,如下所示:

    # iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
    

    FORWARD如果你的默认链规则是DENY,那么就需要这样的东西。

  4. 您需要确保这些规则在启动时出现。

    如果您足够小心,您可以/etc/sysconfig/iptables在 CentOS 上进行编辑来完成此操作。该文件使用类似于命令行语言的语法,但不完全相同iptables。您可能应该在本地虚拟机上对此进行测试,以减少意外将自己锁定在公共服务器之外的可能性。

    将命令放入 中会更安全/etc/rc.local,但请注意,如果您重新启动iptables服务(例如service iptables reload),您的自定义规则将被删除(如果它们不在 中)/etc/sysconfig/iptables

如果您已阅读完所有内容并想知道为什么我将其设为选项 1,而下面的选项 2 更简单,那是因为它效率更高。一旦您设置了端口转发,就资源而言基本上是“免费”的。

选项 2:HTTP 代理

另一种方法是使用某种HTTP代理。我用过小代理对于这种事情。它比 NAT 端口转发更灵活,并且不需要您破坏操作系统的防火墙。

它针对 CentOS 打包在EPEL,这样一旦您启用了 EPEL 存储库,您只需说yum install tinyproxy

在库存文件中进行以下更改/etc/tinyproxy/tinyproxy.conf

Port 80
Upstream localhost:8880

另外,注释掉该Allow行,以便 Tinyproxy 接受来自外部 IP 的连接:

# Allow 127.0.0.1

service httpd stop当您尝试启动此 ( ) 时,您需要确保 Apache 没有运行 ( ) service tinyproxy start,因为它将接管端口 80。

Tinyproxy 的文档只是一个简洁的参考,所以我不确定这种使用是否Upstream是一个更好的替代使用 Tinyproxy 的 hack反向代理特征。不过,它对我有用,而且对配置文件的更改较少,所以这就是我的做法。

如果您想知道为什么我不从一开始就使用 Apache 来实现此目的,原因很简单,它更复杂并且需要更多资源。Apache确实有代理功能。不过,除非您需要 Apache 的全部功能,否则我认为没有理由采用 Tinyproxy。

与 NAT 端口转发不同,运行 Tinyproxy 确实需要一些系统资源。它需要一些 RAM,如果您的流量水平足够高,它可能会变成I/O 限制。但是,如果您的服务器不是特别繁忙,您可能甚至不会注意到它正在运行。

答案2

这将在您的 httpd.conf 文件中作为虚拟主机完成。它看起来像:

<VirtualHost thisdomain.com:8880>
DocumentRoot /www/docs/svn/myapp
ServerName thisdomain.com
</VirtualHost

确保 apache 正在侦听正确的端口。找到所说的位置listen 80并包括 listen 8880

相关内容