You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js自定义服务器部署IIS生产环境遇404及MIME类型错误求助

问题诊断

核心问题是IIS的URL重写规则错误地将Next.js的静态资源请求导向了server.js,导致这些.js文件被返回为HTML内容(MIME类型text/html),浏览器因严格MIME检查拒绝执行。本地运行正常是因为Next.js自带服务器会正确处理静态资源的路由和MIME类型,而IIS的规则覆盖了该逻辑。

解决方案

修改web.config,调整重写规则的顺序和逻辑,确保静态资源被正确识别并直接返回,仅将动态路由交给server.js处理:

<configuration>
    <system.webServer>
        <webSocket enabled="false" />
        <rewrite>
            <rules>
                <!-- 优先处理Next.js静态资源目录,直接放行 -->
                <rule name="Next Static Assets" stopProcessing="true">
                    <match url="^_next/static/.*$" />
                    <action type="None" />
                </rule>

                <!-- 处理所有静态文件,直接返回 -->
                <rule name="Static Files" stopProcessing="true">
                    <match url="([\S]+[.](html?|svg|js|css|png|gif|jpe?g|json|ico))$" />
                    <action type="None" />
                </rule>

                <!-- 动态路由:非文件/非目录请求交给server.js处理 -->
                <rule name="Dynamic Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="server.js" />
                </rule>
            </rules>
        </rewrite>
        <httpErrors existingResponse="PassThrough" />
        <iisnode node_env="production" />
        <security>
            <requestFiltering>
                <fileExtensions>
                    <add fileExtension=".ico" allowed="true" />
                    <add fileExtension=".svg" allowed="true" />
                </fileExtensions>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>
关键调整说明
  • 优先放行_next/static目录:Next.js构建后的静态资源集中在_next/static下,这条规则确保此类请求直接返回真实文件,不经过server.js处理。
  • 简化静态文件规则:匹配核心静态文件后缀,命中后直接返回,终止后续规则执行。
  • 移除冗余规则:删除原配置中reactRouter routes(无需转成.html)、StaticContent等干扰规则,避免破坏路由逻辑。
  • 精简动态路由规则:仅将非文件、非目录的请求交给server.js,契合Next.js自定义服务器的处理逻辑。
额外检查项
  • 确认IIS已安装URL Rewrite模块和iisnode模块,这是运行Node.js应用的必要组件。
  • 保证服务器Node.js版本与本地开发环境一致,避免版本兼容问题。
  • 部署时上传完整构建产物:包括.next目录、server.js、package.json,并在服务器执行npm install --production安装生产依赖。

内容的提问来源于stack exchange,提问作者thepeterkovacs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:29:56