通过 Apache 代理访问 NodeJS 服务,apachenodejs


最近开始学习 Nodejs ,但是机子上已经有了 apache ,所以为了跑 Node ,要不就是停用 Apache 以使 Node 可以使用 80 端口,要不就是给 Node 使用另外的端口号,例如:8080,虽然,在本机上可以这么访问,但是如果放在公网上,让用户可以访问的话,如果不使用 80 端口,看起来总是不像一个可以实际使用的网站。可是如果 Node 使用 80 端口的话,就只能停掉 Apache 的网站,两者不能兼顾。那么有没有方法可以使 Node 和 Apache 在一个服务器上同时提供服务,并且都只使用域名而不用加端口号访问呢?答案是肯定的!

那么就来看,如何实现:

  1. 首先,在 Apache 的配置文件中,打开 mod_proxy 和 mod_proxy_http 至于其他的自己看着打开就好,例如需要 FTP 的话就打开相应的 FTP 选项。即:去掉 httpd.conf 中的

LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so

这两行前面的 # 号即可。

  1. 配置虚拟主机,增加下面的代码:

    # 2017-06-21t
    <VirtualHost *:80>
       ServerName wxapi.aerchi.com
       ServerAlias wxapi.aerchi.com
       ProxyRequests off
    
       <Proxy *>
         Order deny,allow
         Allow from all
       </Proxy>
    
       <Location />
         ProxyPass https://localhost:3389/
         ProxyPassReverse https://localhost:3389/
       </Location>
    </VirtualHost>
  2. 此处 aerchi.comwxapi.aerchi.com 为绑定的要访问 Node 服务的域名。http://localhost:3389/ 为服务器上访问 Node 的网址和端口号,这里以 3389 为例

  3. (乐意黎注:阿里云ECS 测试只有通过3389 端口访问, 《VitrualHost》里设置的ServerName (域名)后面不要加 / )

<VirtualHost *:80>  
ServerName domain1.net  
ServerAlias www.domain1.net  
  
ProxyRequests off  
  
<Proxy *>  
Order deny,allow  
Allow from all  
</Proxy>  
  
<Location />  
ProxyPass http://localhost:3000/  
ProxyPassReverse http://localhost:3000/  
</Location>  
</VirtualHost>  
  
<VirtualHost *:80>  
ServerName abc.net  
ServerAlias www.abc.net  
  
ProxyRequests off  
  
<Proxy *>  
Order deny,allow  
Allow from all  
</Proxy>  
  
<Location />  
ProxyPass http://localhost:3001/  
ProxyPassReverse http://localhost:3001/  
</Location>  
</VirtualHost>  
  
<VirtualHost *:80>  
ServerName node.abc.net  
  
ProxyRequests off  
  
<Proxy *>  
Order deny,allow  
Allow from all  
</Proxy>  
  
<Location />  
ProxyPass http://localhost:3010/  
ProxyPassReverse http://localhost:3010/  
</Location>  
</VirtualHost>  


  1. 打开你的 Node 服务 (定位到工程下, 使用 node xxx.js 或 forever start xxx.js),然后重启 Apache (apachectl start),

  2. 访问 node.js 这时候你就可以看到用 Node 提供服务的网站了。

其实原理就是使用 Apache 做代理服务器而已。

如果使用的是 Nignx 的话,也可以用同样的原理来实现,但是我只用了 Apache ,就没有尝试着去做 Nignx。当然了,其他服务器也一样。


相关内容

    暂无相关文章