我有一个Linode VPS,目前正在运行lighttpd来提供我的PHP网站并在端口80上进行监听。
我也在运行Node.js,它侦听端口81,并使用websockets和HTTP与客户端进行交互。
我想指出这个服务器有几个不同的域名。理想情况下,我希望托管PHP站点的域都与同一个lighttpd服务器通信,并且使用node.js的站点会以某种方式重定向到端口node.js正在侦听客户端(例如没有30x重定向) )。
example-php1.com:80 -> linodebox:80 lighttpd /var/www/example1
example-php2.com:80 -> linodebox:80 lighttpd /var/www/example2
example-node.com:80 -> linodebox:81 node.js
有没有办法通过设置DNS条目或调整iptables来做到这一点? lighttpd是否需要成为node.js的代理? websockets功能需要在没有任何回退的情况下工作,并且访问非节点域,例如, example-php1.com:81
,不应公开节点应用程序。
我觉得完美的解决方案不需要更改现有的应用程序代码,也不需要在软件Web服务器之间进行代理,但我可能错了。
答案 0 :(得分:1)
汤姆怎么了??
我推荐HA-Proxy,它是那里最高性能的代理之一,应该完成你在那里尝试做的事情。
我正在做类似nginx充当代理的事情,它很容易但不是最快的。
HA-Proxy的网站在http://haproxy.1wt.eu
如果你想要一个'纯'解决方案,你可能会从ha-proxy的源代码中得到答案。你不能用iptables真正做到这一点。有些东西必须读取HTTP标头以确定请求来自本地路由的位置。
答案 1 :(得分:0)
我基本上遇到了同样的问题,最后我使用了node-http-proxy(也在npm中以http-proxy
的形式提供)。
您只需要一个简单的配置文件:
{ router: { 'example-php1.com': 'linodebox:80', 'example-php2.com': 'linodebox:80', 'example-node.com': 'linodebox:81 } }
然后只需运行node-http-proxy --config options.json
就可以了。如果你想在同一台机器上运行lighttpd和节点,你必须在另一个端口上启动lighttpd(我使用81表示php,3000表示节点 - 调整配置很容易)。我还使用forever来管理我的节点实例。
答案 2 :(得分:0)
你会恨我...
我最后使用第二个IP地址,然后按Linode tutorial设置多个静态IP。然后,我将lighttpd配置为绑定到一个IP地址,并将Node.js绑定到另一个IP地址。
这不是一个很好的解决方案,因为它不能扩展。