最近开始学习 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 中的

1
2
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

这两行前面的 # 号即可。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<VirtualHost *:80>
  ServerName node.js
  ServerAlias www.node.js
 
  ProxyRequests off
 
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
 
  <Location />
    ProxyPass http://localhost:8080/
    ProxyPassReverse http://localhost:8080/
  </Location>
</VirtualHost>

此处 node.js 和 www.node.js 为绑定的要访问 Node 服务的域名。http://localhost:8080/ 为服务器上访问 Node 的网址和端口号,这里以 8080 为例。

3. 打开你的 Node 服务,然后重启 Apache ,访问 node.js 这时候你就可以看到用 Node 提供服务的网站了。

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

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

此问题表现的现象为在 Windows 平台下,使用 Apache、Mysql 以及 PHP 的时候打不开本地的程序,即使是最基本的 HTML 页面也无法打开,所以怀疑网络问题,而且 CPU 占用 在 50% 左右,并且有两个 Apache 进程。

解决方法为:

1. 重置本地的 Winsock ,打开 CMD ,然后输入 netsh winsock reset 回车即可。 我就是用这种方法解决的。

2.网上邻居 - 本地连接 - 属性 - Internet 协议(TCP/IP) - 属性 - 高级 - wins 标签,然后取消掉 “启用LMhosts 查询” 前的勾,即可。

如果本地有开防火墙的话,那么下来,Windows 防火墙 - 高级 - 本地连接设置,在服务的标签里面勾选“安全 WEB 服务器(HTTPS)”,确定保存即可。

然后重启 Apache 服务即可。

一种方法有时候并不能解决问题,所以可以两种都试试,第二种我没有试过,所以不确定。但是第一种解决了我的问题。