通过 Apache 代理访问 Node
发布于 11 年前 作者 yimity 25006 次浏览 最后一次编辑是 8 年前

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

<pre class=“prettyprint”> LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so </pre>

这两行前面的 # 号即可。

  1. 配置虚拟主机,增加下面的代码: <pre class=“prettyprint”> <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> </pre> 此处 node.js 和 www.node.js 为绑定的要访问 Node 服务的域名。http://localhost:8080/ 为服务器上访问 Node 的网址和端口号,这里以 8080 为例。

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

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

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

来自:http://yimity.com

9 回复

nginx 也可

http {

    # ....

    server {
        listen 80;
        server_name node.js www.node.js;
        location / {
            proxy_pass http://127.0.0.1:8888;
        }
    }

    # ....

如果应用跑在 8888 端口下的话.

话说这些服务器配置跟具体跑的什么应用没关系, 只看域名到端口映射就好了.

mark 学习了

请问设置为node.js是什么意思呢? 我的外网机器是一台centos linux,没有域名,有公网ip地址。 现在也是面临楼主类似的问题,80端口被apache使用了,同时呢要弄一个nodejs server端,所以要做一个反向代理。 按照 Apache配置 httpd-vhosts.conf,配置无效。虽然httpd /S校验都通过了(几个module都重新编译过已经安装完毕)

NameVirtualHost *:80

<VirtualHost *:80>

ProxyRequests off

<Proxy *> Order deny,allow Allow from all </Proxy>

ProxyPass  /wx  http://localhost:3010/
ProxyPassReverse  /wx  http://localhost:3010/

</VirtualHost>

@ghjan 你需要在系统的配置文件中配置127.0.0.1 www.node.js,即在hosts文件中如此即可访问了

mark 收藏了,将要用到

mark一下,这个值得借鉴,马上就会用到了

LZ请问,我的apache是localhost,我的node是localhost:8080,我想让apache在localhost/node时访问localhost:8080,这样可以吗?

<pre class=“prettyprint”> </pre> apache会报错

回到顶部