Nodejs 新人。求帮助……在 IIS 服务器上部署 Node.js,80 端口监听的问题

Nodejs 新人。求帮助……在 IIS 服务器上部署 Node.js,80 端口监听的问题

如题所示,是这样的,现在我有一台部署了 IIS 的服务器,当我通过 Node.js 创建一个简单的监听 80 端口的服务器并启动时,会提示listen eacces ,大概是因为端口监听重复了。我在 IIS 中把占用 80 端口的网站(没有新添加的网站,就只有那个默认的IIS的网站)关闭后,还是会有 listen eacces 的问题。应该怎么办?

PS:我在尝试使用 Node.js 开发微信公共平台,求指导。刚开始做,在代码部署这个地方就卡起了,求指导求指导求指导求指导。(以前较少接触后端的东西)


16 回复

如题所示,是这样的,现在我有一台部署了 IIS 的服务器,当我通过 Node.js 创建一个简单的监听 80 端口的服务器并启动时,会提示 listen eacces,大概是因为端口监听重复了。我在 IIS 中把占用 80 端口的网站(没有新添加的网站,就只有那个默认的 IIS 的网站)关闭后,还是会有 listen eacces 的问题。应该怎么办?

解决方案

首先,确保 IIS 确实没有占用 80 端口。你可以通过以下步骤来检查:

  1. 打开 IIS 管理器。
  2. 在左侧的服务器节点上右键点击,选择“属性”。
  3. 查看“默认网站”或任何其他网站是否绑定了 80 端口。

如果确认 IIS 没有占用 80 端口,那么可能是权限问题。你需要以管理员身份运行 Node.js 应用程序。以下是具体的解决方案:

  1. 以管理员身份运行命令行

    • 打开命令提示符(CMD)或 PowerShell。
    • 使用 netstat -ano | findstr :80 命令查看是否有进程占用 80 端口。
    • 如果没有进程占用,尝试以管理员身份运行你的 Node.js 应用程序。
  2. 修改 Node.js 代码: 确保你的 Node.js 应用程序在启动时具有足够的权限。你可以通过以下代码示例来实现:

const http = require('http');

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
});

// 监听 80 端口
server.listen(80, () => {
  console.log('Server is running on port 80');
});

部署 Node.js 应用到 IIS

如果你希望在 IIS 上部署 Node.js 应用,可以考虑使用 IISNode。IISNode 是一个允许在 IIS 上运行 Node.js 应用的模块。以下是安装和配置步骤:

  1. 下载并安装 IISNode

  2. 配置 web.config 文件: 在你的 Node.js 应用根目录下创建一个 web.config 文件,内容如下:

<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
    </handlers>
    <rewrite>
      <rules>
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^server.js\/debug[\/]?" />
        </rule>
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="server.js"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
  1. 将应用部署到 IIS
    • 在 IIS 管理器中创建一个新的网站,并指向你的 Node.js 应用目录。
    • 确保网站绑定到了 80 端口。

通过以上步骤,你应该能够成功在 IIS 上部署 Node.js 应用,并解决端口监听问题。希望这些信息对你有所帮助!


Node.js 需要其他的服务器么?

诶,nodejs本身就是服务器,先看看书再做吧

使用iisnode 组件

不建议在 IIS 上部署Node, 不建议在windows下开发Node

楼主的意思其实是说80端口被占用了。。请百度搜索,80端口被占用、检测80端口。。。

如果真是端口问题。可以换端口啊,没必要在一棵树上吊死吧?

楼主的问题解决了吗,

同意前面那条, 但是后面的话Node也有官方版的windows适配啦, 虽然血统不是那么正而已

netstat检查端口

停止网站,80端口还是会被iis占用的。 要停止iis服务。

谢谢你们的热情。我目前在使用IISNode。同时也node也才刚刚开始学习。谢谢各位的帮助。

要不要来我们工作圈的Node.js实战圈子交流一下?非常欢迎您来做客交流分享。网址是www.gongzuoquan.com,您注册好后,告诉我注册邮箱或手机号,我拉您进圈子。嘿嘿。

iisnode 你用着没问题吗, 我发现从linux移过去的项目, 路由配置了,好像也不行,不知道你是如何解决的

nodejs 还是自己跑,弄个大一点的端口吧… 然后 iis上用反代比较合适 最后注意防火墙

在IIS服务器上部署Node.js时遇到listen EACCES错误通常是由于权限不足或端口已被其他服务占用。根据你的描述,即使关闭了IIS的默认网站,仍然无法监听80端口。这可能是因为IIS或其他系统服务仍然持有该端口。

解决方案

  1. 检查端口占用情况: 使用命令行工具检查哪个进程占用了80端口。

    netstat -ano | findstr :80
    

    这条命令可以显示所有占用80端口的进程ID。

  2. 终止占用端口的进程: 如果确定是IIS或其他进程占用80端口,可以通过任务管理器或命令行终止这些进程。

    taskkill /PID [进程ID] /F
    
  3. 修改Node.js应用的监听端口: 将Node.js应用绑定到其他端口(例如8080),然后配置反向代理,将80端口的请求转发到Node.js应用。

    const http = require('http');
    
    const server = http.createServer((req, res) => {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World\n');
    });
    
    server.listen(8080, () => {
      console.log('Server running at http://localhost:8080/');
    });
    
  4. 配置IIS反向代理: 安装并配置IIS的URL重写模块,将80端口的请求转发到Node.js应用。

    • 在IIS管理器中,选择你的站点,双击“URL重写”。
    • 添加一个新的入站规则,例如:
      <rule name="ReverseProxyInboundRule1" stopProcessing="true">
        <match url="(.*)" />
        <action type="Rewrite" url="http://localhost:8080/{R:1}" />
      </rule>
      

通过以上步骤,你可以避免直接与IIS争夺80端口,并且能够正常运行你的Node.js应用。

回到顶部