通过 Apache 代理访问 Nodejs
通过 Apache 代理访问 Nodejs
最近开始学习 Nodejs ,但是机子上已经有了 apache ,所以为了跑 Node ,要不就是停用 Apache 以使 Node 可以使用 80 端口,要不就是给 Node 使用另外的端口号,例如:8080,虽然,在本机上可以这么访问,但是如果放在公网上,让用户可以访问的话,如果不使用 80 端口,看起来总是不像一个可以实际使用的网站。可是如果 Node 使用 80 端口的话,就只能停掉 Apache 的网站,两者不能兼顾。那么有没有方法可以使 Node 和 Apache 在一个服务器上同时提供服务,并且都只使用域名而不用加端口号访问呢?答案是肯定的!
那么就来看,如何实现:
- 首先,在 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>
这两行前面的 # 号即可。
-
配置虚拟主机,增加下面的代码: <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 为例。
-
打开你的 Node 服务,然后重启 Apache ,访问 node.js 这时候你就可以看到用 Node 提供服务的网站了。
其实原理就是使用 Apache 做代理服务器而已。
如果使用的是 Nignx 的话,也可以用同样的原理来实现,但是我只用了 Apache ,就没有尝试着去做 Nignx。当然了,其他服务器也一样。
通过 Apache 代理访问 Node.js
背景介绍
最近开始学习 Node.js,但我的服务器上已经有 Apache 正在运行。由于 Node.js 通常会监听一个特定的端口(如 8080),而 Apache 默认也在 80 端口上运行,这会导致冲突。为了避免停用 Apache 或者更改 Node.js 的端口,我们可以通过 Apache 来代理请求,使得 Node.js 服务能够通过 80 端口访问。
实现步骤
-
启用 Apache 模块 首先,我们需要确保 Apache 已经启用了
mod_proxy
和mod_proxy_http
模块。这些模块允许 Apache 转发请求到其他服务器或服务。在 Apache 的配置文件(通常是httpd.conf
)中,找到以下两行并取消注释:LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
-
配置虚拟主机 接下来,我们需要配置 Apache 的虚拟主机,将请求转发到 Node.js 服务。假设我们的 Node.js 应用正在本地的 8080 端口运行,可以在 Apache 的配置文件中添加如下配置:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ProxyPass http://localhost:8080/ ProxyPassReverse http://localhost:8080/ </Location> </VirtualHost>
这里
example.com
和www.example.com
是你要绑定的域名,http://localhost:8080/
是 Node.js 服务的地址。 -
重启 Apache 修改完配置后,重启 Apache 服务以应用新的配置:
sudo systemctl restart apache2
-
启动 Node.js 服务 最后,确保 Node.js 服务已经在 8080 端口上运行。你可以使用如下命令启动一个简单的 Node.js HTTP 服务器:
const http = require('http'); const hostname = '127.0.0.1'; const port = 8080; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
总结
通过上述步骤,我们实现了通过 Apache 代理访问 Node.js 服务的功能。这样,用户可以通过 example.com
访问 Node.js 应用,而不需要关心具体的端口号。这种方法不仅解决了端口冲突问题,还保持了应用的简洁性和易用性。
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>
mark一下
mark 收藏了,将要用到
mark一下,这个值得借鉴,马上就会用到了
LZ请问,我的apache是localhost,我的node是localhost:8080,我想让apache在localhost/node时访问localhost:8080,这样可以吗?
<pre class=“prettyprint”> </pre> apache会报错
要在Apache中配置代理,以便通过Apache代理访问Node.js应用,你可以按照以下步骤进行操作:
-
启用Apache模块:确保Apache的
mod_proxy
和mod_proxy_http
模块已启用。编辑httpd.conf
或相应配置文件,取消以下两行前的注释符号(#):LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
-
配置虚拟主机:在Apache配置文件中添加一个虚拟主机配置,将请求转发到Node.js应用。假设你的Node.js应用运行在
localhost:8080
上,你可以添加如下配置:<VirtualHost *:80> ServerName yourdomain.com ServerAlias www.yourdomain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ProxyPass http://localhost:8080/ ProxyPassReverse http://localhost:8080/ </Location> </VirtualHost>
将
yourdomain.com
替换为你的实际域名。 -
启动Node.js应用:确保你的Node.js应用正在监听
localhost:8080
。例如,如果你的应用文件名为app.js
,可以通过以下命令启动:node app.js
-
重启Apache:保存配置文件后,重启Apache以使更改生效:
sudo systemctl restart apache2
完成以上步骤后,用户只需通过域名yourdomain.com
即可访问你的Node.js应用,而不需要指定端口号。