Nodejs 新人。求帮助……在 IIS 服务器上部署 Node.js,80 端口监听的问题
Nodejs 新人。求帮助……在 IIS 服务器上部署 Node.js,80 端口监听的问题
如题所示,是这样的,现在我有一台部署了 IIS 的服务器,当我通过 Node.js 创建一个简单的监听 80 端口的服务器并启动时,会提示listen eacces
,大概是因为端口监听重复了。我在 IIS 中把占用 80 端口的网站(没有新添加的网站,就只有那个默认的IIS的网站)关闭后,还是会有 listen eacces
的问题。应该怎么办?
PS:我在尝试使用 Node.js 开发微信公共平台,求指导。刚开始做,在代码部署这个地方就卡起了,求指导求指导求指导求指导。(以前较少接触后端的东西)
如题所示,是这样的,现在我有一台部署了 IIS 的服务器,当我通过 Node.js 创建一个简单的监听 80 端口的服务器并启动时,会提示 listen eacces
,大概是因为端口监听重复了。我在 IIS 中把占用 80 端口的网站(没有新添加的网站,就只有那个默认的 IIS 的网站)关闭后,还是会有 listen eacces
的问题。应该怎么办?
解决方案
首先,确保 IIS 确实没有占用 80 端口。你可以通过以下步骤来检查:
- 打开 IIS 管理器。
- 在左侧的服务器节点上右键点击,选择“属性”。
- 查看“默认网站”或任何其他网站是否绑定了 80 端口。
如果确认 IIS 没有占用 80 端口,那么可能是权限问题。你需要以管理员身份运行 Node.js 应用程序。以下是具体的解决方案:
-
以管理员身份运行命令行:
- 打开命令提示符(CMD)或 PowerShell。
- 使用
netstat -ano | findstr :80
命令查看是否有进程占用 80 端口。 - 如果没有进程占用,尝试以管理员身份运行你的 Node.js 应用程序。
-
修改 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 应用的模块。以下是安装和配置步骤:
-
下载并安装 IISNode:
- 访问 IISNode GitHub 页面 下载最新版本的 IISNode。
- 安装完成后重启 IIS。
-
配置 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>
- 将应用部署到 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或其他系统服务仍然持有该端口。
解决方案
-
检查端口占用情况: 使用命令行工具检查哪个进程占用了80端口。
netstat -ano | findstr :80
这条命令可以显示所有占用80端口的进程ID。
-
终止占用端口的进程: 如果确定是IIS或其他进程占用80端口,可以通过任务管理器或命令行终止这些进程。
taskkill /PID [进程ID] /F
-
修改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/'); });
-
配置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应用。