根据域转发每个端口

根据域转发每个端口

我和一个朋友正在为我们做一些小型网站托管。目前所有页面都通过 Apache2 的虚拟主机在一台服务器上运行。我们想为每个站点创建一个服务器,包括 ssh 访问、ftp 服务器和其他一些东西。

我尝试了一下,发现 ProxyPass 如下例所示:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ServerName example.com
        ServerAlias www.example.com

        ProxyRequests Off
        ProxyPass / http://192.168.2.141/
        ProxyPassReverse / http://192.168.2.141/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

它似乎工作得很好,但它只适用于 http 协议。我还希望它转发 ssh、ftp 等。

有人有什么想法吗?

答案1

不幸的是,您正在使用基于名称的虚拟主机这是有效的,因为apache读取客户端主机名的 HTTP 标头并<VirtualHost>根据该值决定使用哪个块。您的块告诉它将请求代理到另一台服务器。

ssh或中没有类似的设施ftp

您可以获得的最接近的方法是用于iptables将数据包从端口转发到不同的服务器:

# iptables - nat -A PREROUTING -p tcp --dport 1022 -j DNAT --to-destination 192.168.2.141:22
# sysctl -w net.ipv4.ip_forward=1

这将侦听服务器的端口 1022,并将流量转发到 192.168.2.141 的端口 22。然后,您(或您的朋友)将需要ssh [username@]192.168.2.141 -p 1022访问该服务器。

您可以添加另一iptables行将端口 1023 传输到另一台服务器的端口 22,依此类推。你也许可以ftp通过阅读来做同样的事情服务器故障问题。

相关内容