我和一个朋友正在为我们做一些小型网站托管。目前所有页面都通过 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
通过阅读来做同样的事情这服务器故障问题。