【发布时间】:2022-01-17 23:30:29
【问题描述】:
您好,我的任务是将我们的下一个 Web 应用程序部署到 IIS Windows 服务器,但无法弄清楚如何解决我遇到的这个问题。
我只有一个基本的 create-next-app,几乎没有代码尝试将其部署到服务器并正常工作。
我已经阅读过,似乎遇到了权限问题,但从大量阅读中我似乎无法弄清楚我需要更改什么
这里是我当前位于根目录中的 web.config 和 server.js。
<configuration>
<system.webServer>
<webSocket enabled="false" />
<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="StaticContent">
<action type="Rewrite" url="public{REQUEST_URI}"/>
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="server.js"/>
</rule>
</rules>
</rewrite>
<requestFiltering>
<hiddenSegments>
<add segment="node_modules"/>
</hiddenSegments>
</requestFiltering>
</security>
<httpErrors existingResponse="PassThrough" />
<iisnode node_env="production" />
</system.webServer>
</configuration>
const {createServer} = require('http');
const {parse} = require('url');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({dev});
const port = process.env.PORT || 3000;
const handle = app.getRequestHandler();
app.prepare().then(() => {
createServer((req, res) => {
// Be sure to pass `true` as the second argument to `url.parse`.
// This tells it to parse the query portion of the URL.
const parsedUrl = parse(req.url, true);
const {pathname, query} = parsedUrl;
if (pathname === '/a') {
app.render(req, res, '/a', query);
} else if (pathname === '/b') {
app.render(req, res, '/b', query);
} else {
handle(req, res, parsedUrl);
}
}).listen(port, err => {
if (err) throw err;
});
});
【问题讨论】:
-
正如错误消息所说,您需要更多信息来解决您的问题,您可以使用 ETW 跟踪或失败的请求跟踪来获取详细信息
标签: reactjs iis deployment next.js web-config