当前位置:嗨网首页>书籍在线阅读

04-使用Apache来代理Node服务器

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

[toc]

5.3 使用Apache来代理Node服务器

**使用端口来访问网站** 使用代理并不会阻止我们使用显式的端口来访问网站。你可以通过设置来阻止这种访问,但是需要在服务器进行额外的配置。比如,在我的Ubuntu服务器上,可以修改 `iptables` : 但是这种做法需要一些服务器管理方面的知识。

我觉得应该没有人认为Node会在不久的将来取代现有的Web服务器,比如Apache。但是让Node和服务器分别处理不同的请求,也是一个可行的方案。Apache仍然是最流行的服务器,我们这一节就来介绍它。

问题是,我们如何能同时运行Node服务和其他像Apache这样的服务器,而不强制用户在URL中加入端口号?因为同一时间只有一个服务器可以监听默认的80端口。事实上我们从浏览器中访问API时,端口号确实会被隐藏。但是如何在避免端口冲突的情况下,同时使用Node和Apache呢?

**其他的产品环境问题** 保持Node一直运行,并且从宕机中恢复,是另外一个问题,我们会在11章讲到。
iptables -A input -i eth0 -p tcp --dport 2368 -j DROP

最简单的办法是使用Apache来_代理_Node服务的请求。这意味着所有去往Node服务的请求都会先经过Apache。

这种解决方案有好处,也有坏处。好处是它非常简单,而且我们有一个非常知名且稳定的Web服务器,它能在Node服务接收到请求之前,对请求进行一定的处理。Apache提供了一些在Node中非常难以实现的功能,比如安全性功能。而坏处在于Apache对于每一个请求都会生成一个新的线程来处理,而总线程数是有限制的。

尽管如此,很多网站还是基于Apache的,而且并不慢。除非你的要求比较高,否则Apache是一个不错的选择。

要配置Node使用Apache作为代理,你首先要打开Apache的代理功能。在命令行中执行下面的命令:

a2enmod proxy
a2enmod proxy_http

然后,在子域名中添加代理配置。比如,在我的服务器上,我将shelleystoybox.com作为Node服务的主机名。

<VirtualHost ipaddress:80>
    ServerAdmin [email protected]
    ServerName shelleystoybox.com
    ErrorLog path-to-logs/error.log
    CustomLog path-to-logs/access.log combined
    ProxyRequests off
    <Location />
            ProxyPass http://ipaddress:2368/
            ProxyPassReverse http://ipaddress:2368/
    </Location>
</VirtualHost>

将子域名、管理员邮箱、端口和IP地址改为你的环境配置。下面要做的就是加载新的子域名了:

a2ensite shelleystoybox.com
service apache2 reload

同样的,将子域名改为你的子域名。