NodeJS HTTP - 侦听 80 以外的其他端口

2023-11-26

我在 Windows 上运行 XAMPP 以在端口 80 上托管 Apache 服务器。现在我尝试在后台运行 NodeJS 脚本,但问题是它只能侦听端口 80。如果确实如此,一切都会正常运行应该,但我不能同时运行 Apache,因为 Apache 优先并只为我的网站提供服务。 NodeJS 脚本甚至无法监听。

我的问题是:如何切换 NodeJS 脚本的监听端口(具体端口实际上并不重要),以便 Apache 仍然可以在端口 80 上运行,并且我可以从世界各地访问 NodeJS 脚本。

NodeJS部分代码:

const http = require('http');

const port = 8080;
const host = '0.0.0.0';




server = http.createServer( function(req, res) {
    if (req.method == 'POST') {
        var body = '';
        req.on('data', function (data) {
            body += data;
            doStuff(body);
        });
        res.writeHead(200, {'Content-Type': 'text'});
        res.end('received request successfully');
    }
    else {
        res.writeHead(405, {'Content-Type': 'text'});
        res.end('not allowed method ' + req.method + ', try again with GET or POST');
    }

})

server.listen(port, null, function(error){
  if(!!error){
    console.log("\x1b[41m%s\x1b[0m", "error while initializing listener on port " + port + ": " + error);
   }
   else{
    console.log("\x1b[32m%s\x1b[0m", "started listener at 'http://" + host + ':' + port + "'");}
 });

其他信息在我的另一个问题中,该问题被标记为重复。


看着你的其他问题,它被标记为与此重复,您在那里获得了一些附加信息,可能有助于阐明您需要什么。具体来说,您提到以下内容:

我想用 NodeJS 托管多个 http 服务器,所有服务器都获取和发送 http 请求。同时我想让 Apache 运行,它占用端口 80。如果我禁用 Apache 并让 NodeJS 在端口 80 上运行,它会工作,但我不能让它们同时运行。

该脚本将在端口 8081 本地运行并接收请求,但我似乎无法通过 Internet 向它发送 AJAX 请求,即使在使用路由器转发端口之后也是如此:

我认为 @ankit-agarwal 可能是正确的,因为您需要反向代理设置来将流量转发到不同的后端。假设您有一个面向外部的 IP 地址,您应该能够使用每个后端正在侦听的端口来访问它们。例如,如果您的计算机公开的公共 IP 地址是 100.120.110.43:

+---------+------+-------------------------------------+
| Backend | Port |             Web Address             |
+=========+======+=====================================+
| Apache  |   80 | 100.120.110.43 or 100.120.110.43:80 |
| Node1   | 8080 | 100.120.110.43:8080                 |
| Node2   | 8081 | 100.120.110.43:8081                 |
+---------+------+-------------------------------------+

如果您想在不指定端口的情况下访问每个后端,则必须有某种方法来告诉您的内部网络根据请求提供服务的后端。实现此目的的一种方法是使用基于路径的路由,您可以在其中设置反向代理,根据 url 中的路径将流量路由到不同的后端。您没有发布您的 Apache 配置,但您可以使用当前的 Apache 服务器来处理此问题代理通行证 and 反向代理通行证类似于下面的指令:

ProxyPass "/node1"  "http://100.120.110.43:8080/"
ProxyPassReverse "/node1"  "http://100.120.110.43:8080/"

ProxyPass "/node2"  "http://100.120.110.43:8081/"
ProxyPassReverse "/node2"  "http://100.120.110.43:8081/"

使用反向代理的一个很酷的事情是您不必向公众公开您的节点后端。假设您没有,并且只能从内部网络的 0.0.0.0:port 访问它们。

Listen 80
<VirtualHost *:80>
    DocumentRoot /www/apache
    ServerName www.apachefrontend.com
    ProxyRequests off
    ProxyPass /node1  http://0.0.0.0:8080/
    ProxyPassReverse /node1  http://0.0.0.0:8080/
    ProxyPass /node2  http://0.0.0.0:8081/
    ProxyPassReverse /node2  http://0.0.0.0:8081/
</VirtualHost>

您还可以指向只有您有权访问的不同主机/IP。

最后,如果您有不同的 DNS 记录指向不同的后端,您还可以使用 VirtualHost 和 ServerName。

Listen 80
<VirtualHost *:80>
    DocumentRoot /www/apache
    ServerName www.apachefrontend.com
</VirtualHost>
<VirtualHost *:80>
    ServerName www.nodebackend1.com
    ProxyRequests off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    <Location />
        ProxyPass /  http://0.0.0.0:8080/
        ProxyPassReverse /  http://0.0.0.0:8080/
    </Location>
</VirtualHost>
<VirtualHost *:80>
    ServerName www.nodebackend2.com
    ProxyRequests off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    <Location />
        ProxyPass /  http://0.0.0.0:8081/
        ProxyPassReverse /  http://0.0.0.0:8081/
    </Location>
</VirtualHost>

为了使上述任何一个工作,你需要有mod_proxy and mod_proxy_http在阿帕奇中启用。

这些可能不是最可靠的示例,我还没有测试它们,但它们应该演示这个想法。您可以了解更多here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS HTTP - 侦听 80 以外的其他端口 的相关文章

  • node-postgres 不会插入数据,但也不会抛出错误

    我正在使用节点 postgres https github com brianc node postgresnode js 的模块 我在插入数据时遇到问题 功能 function addItems listId listItems hand
  • 将 JSON var 从路由传递到 ejs

    我在express EJS中有一些代码 1 在 app js 中 创建 mongo 集合对象 app locals userCollection db get userData 2 在user js快速路由文件中 我从这个数据库连接获取数据
  • 发送压缩文件 Spring

    我想通过我的 spring 控制器发送一个已经存在的压缩文件 但我不断收到这些错误消息org springframework web HttpMediaTypeNotAcceptableException Could not find ac
  • 如何将 POST 请求内容保存为 .NET 中的文件 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个客户端应用程序POST请求a
  • 可以模拟多个并发连接来测试 Nodejs 应用程序

    我有一个简单的node js socket io websockets 应用程序运行 localhost 我想看看它可以处理多少并发连接 是否可以在本地主机本身上模拟多个并发用户 这是我使用 socket io client 的半生尝试 f
  • 为什么 docker build 中的 COPY 未检测到更新

    我在节点应用程序上运行构建 然后使用工件构建 Docker 映像 将源代码移动到位的 COPY 命令没有检测到构建后源文件的更改 它只是使用缓存 Step 9 12 COPY server home nodejs app server gt
  • XAMPP 中的根路径

    我遇到这个问题已经有一段时间了 并且广泛寻找答案但没有成功 img src images test jpg 从 根路径 在我的例子中是在 LAMP 中的生产中 获取图像 htdocs images test jpg 无论是从 htdocs
  • Mocha / Chai Expect.to.throw 未捕获抛出的错误

    我在获取 Chai 时遇到问题expect to throw测试我的 node js 应用程序 测试在抛出的错误上不断失败 但是如果我将测试用例包装在 try 和 catch 中 并对捕获的错误进行断言 它就会起作用 Does expect
  • Node.JS Web 服务器中的安全性

    所以 我正在学习 Node JS 到目前为止我很喜欢它 我已经有几个项目在工作了 我想我可以在其中使用nodejs 不过 我担心安全问题 如果我使用 Node JS http 模块编写自定义 Web 服务器 我是否可能非常容易受到攻击 Ap
  • 错误:UNABLE_TO_VERIFY_LEAF_SIGNATURE Phonegap 安装

    我正在尝试在 Ubuntu 中安装 Phonegap NodeJS 安装成功 但是我无法安装 Phonegap 本身 这是终端的错误输出 test test VirtualBox sudo npm install g phonegap np
  • NodeJS 超级测试对会话对象的访问

    我正在使用 supertest 测试我的 Node js 应用程序 在我的控制器中 我访问会话对象 为了发出有效的请求 该会话对象需要填充一些数据 控制器 determine whether it is user s own profile
  • 如何在中间的 ng-repeat 中插入新行(Angularjs + twitter bootstrap + jade)

    我想插入新行 如下所示 div row div span12 div ng repeat data in datas p data text insert new line when index is the number divisibl
  • 有没有办法测量 Java (Servlet) I/O 流量?

    我尝试做的是使用以下代码实现 servlet 过滤器 int up request getContentLength if HttpServletRequest request getQueryString null up Math max
  • Node.js 中的 util.error 和 console.error 有什么区别?

    两者到底有什么区别util error and console error 在这两种方法中 它都会打印到 stderr 文档 实用程序错误 http nodejs org api util html util util error 与 ut
  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • Node.Js:资源解释为字体,但以 MIME 类型 text/html 传输

    我的网站上的图标 由 Node Js 提供 未呈现 并且我看到标题中指示的错误 我正在为我的服务器使用这个脚本 https github com joeeames AngularFundamentalsFiles blob master w
  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • API 的集成与单元测试

    我们可以考虑向端点 单元或集成测试 发送请求吗 import lib from testing lib const testClient expect lib const response testClient request app ge
  • 如何从 typescript 使用 npm 模块?

    我正在尝试打字稿 它在 hello world 阶段运行良好 我现在尝试使用 npm 模块 index ts import require lodash console log toUpper Hello world 这不起作用 tsc i
  • Nestjs如何控制缓存?

    最近读了nestjs的文档 从中学到了一些东西 但我发现了一些让我困惑的事情 In 技术 缓存 https docs nestjs com techniques caching 文档告诉我使用像这样的装饰器 UseInterceptors

随机推荐

  • D3.js强制有向图,每组颜色不同?

    我用 d3 js 插件制作了一个力导向图 我想根据节点和标签所属的组为节点和标签着色 我添加了颜色比例 var color d3 scale category20 并添加到节点变量 style fill function d return
  • 析构函数和垃圾收集器之间的区别

    我想知道析构函数和垃圾收集器之间有什么区别 析构函数用于在应用程序生命周期结束时处理所有未使用的对象 垃圾收集器的使用也是如此 垃圾收集器可以手动调用或完成在应用程序结束时 与析构函数相同 两者都是可选的 用于处理未引用的对象 任何人都可以
  • 使用自动属性实现单例是一个好主意吗?

    我最近发现了汽车属性并且非常喜欢它们 目前我正尝试在任何可以的地方使用它们 不仅仅是为了能够在任何地方使用它们 更多的是为了看看它们在大多数情况下的工作效果如何 现在我正在创建一个单例并想 嘿 让我们在这里也尝试一下自动属性 public
  • 使用 Winium 实现“Chrome Legacy Window”(Chromium) 的自动化

    我正在尝试使用 Winium 自动化 Windows 应用程序 GUI 该应用程序同时使用 WPF 窗口和 Chrome Legacy Window Chromium 窗口 我正在使用该工具 自动化间谍 检查 WPF 窗口内 GUI 元素的
  • PHP Codeigniter:下拉菜单上的 set_value

    我有以下观点 但我该如何申请set value没有默认为请选择
  • python中的“全局名称未定义”概念

    我正在学习Python并阅读了有关此错误的博客 但我仍然无法清楚地理解这一点 这是我正在编写的代码片段 for i in included global signs accounts regions global sign name acc
  • 使用 Windows 打印图像对话框打印图像

    我知道如何使用 PrintDocument 打印图像 但是 我想使用默认的 Windows 打印功能打印我的图像 就像当你右键单击图像并单击打印时 会出现一个对话框 允许你设置尺寸 选择打印机等 有谁知道如何在 C 中实现这一点 我必须使用
  • 如何将操作字符串传递到 JSF 2 复合组件中?

    我正在 JSF 2 中创建一个简单的菜单复合组件 但是 我无法将 String 属性传递到复合组件中以在 的操作属性中使用 我的组件看起来像
  • WCAG 2.0 A 级和 AJAX 生成的内容

    我很难找到明确的答案 如果网站以某种方式使用 AJAX 它是否可以至少通过 WCAG 2 0 A 级 For WCAG 2 0 示例 states 我可以使用 Javascript Ajax Flash PDF Silverlight 和其
  • 非有限差分值,很多数据经过指数化后变成inf和NA

    我将找到排序逻辑模型的参数 但误差总是表明存在非有限的有限差分值 如果我改变 b0 cjll lt function b U lt X b lSU lt csm exp U lSU lt lSU 0 lSU lSU 0 LL lt sum
  • ANDROID FirebaseDatabase:无法保存对象

    我无法将对象添加到 firebase 实时数据库 我尝试了以下代码 但是当这段代码执行时 db child Users setValue person 我的应用程序崩溃了 public class Person String fname S
  • 关于Java字符串池的问题[重复]

    这个问题在这里已经有答案了 考虑这段代码 String first abc String second new String abc 当使用new关键字 Java 将创建abc String又对吗 它会存储在常规堆上还是String水池 多
  • TextBox.Text += "字符串";与 TextBox.AppendText(“字符串”);

    这两种方法有什么区别 其中一个比另一个更有效率吗 我在想也许 AppendText 使用类似于 StringBuilder 的方法 即它使用自己的缓存而不是每次创建和附加新字符串 是真的吗 Thanks 正如中明确提到的MSDN 文档的备注
  • 预期的 EventLogQuery 时间格式?

    我正在尝试使用 EventLogQuery 类来查询事件日志 我按照上所示的示例进行操作http msdn microsoft com en us library bb671200 28v vs 90 29 aspx Y0 我在 Googl
  • 从 Web Api 控制器返回 http 状态代码

    我正在尝试返回未针对 Web api 控制器中的 GET 方法进行修改的状态代码 304 我成功的唯一方法是这样的 public class TryController ApiController public User GetUser i
  • C++ 奇怪的构造函数行为

    谁能向我解释一下两者之间的区别复合体a and 复数 b include
  • 将 IAM 角色与 PHP SDK 结合使用时出现问题

    我正在使用此脚本来填充 DynamoDB https docs aws amazon com amazondynamodb latest developerguide LoadDataPHP html 我使用 AWS 开发工具包时收到此错误
  • C# P/Invoke结构问题

    我正在尝试为 C API 本机 Win dll 编写 C P Invoke 包装器 通常工作正常 唯一的例外是 C 代码中采用结构体作为参数的特定方法 该函数被调用时没有任何异常 但它返回 false 表明执行过程中出现了失败 API头文件
  • 在 Angular 指令中嵌入将元素放入单个“范围”内

    这是我的指令 myapp directive envtable function return restrict E replace true transclude true template table class table table
  • NodeJS HTTP - 侦听 80 以外的其他端口

    我在 Windows 上运行 XAMPP 以在端口 80 上托管 Apache 服务器 现在我尝试在后台运行 NodeJS 脚本 但问题是它只能侦听端口 80 如果确实如此 一切都会正常运行应该 但我不能同时运行 Apache 因为 Apa