0

I have some problem with getting .css and .js files of my site when I try to open my hosted site. My site is the next js application and hosted on IIS server. Please note that I am not a javascript developer and it is my first experiance in deploying next js application)).

Requests loock like this: Site requests

And single rquest loock like this: Single one request

When I deployed to IIS, I configured the following web.config and server.js.

web.config:

<configuration>
  <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Methods" value="*" />
          <add name="Access-Control-Allow-Headers" value="*" />
        </customHeaders>
      </httpProtocol>

    <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=".next/static"/>
        </rule>

        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="server.js"/>
        </rule>
      </rules>
    </rewrite>
    
    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="node_modules"/>
        </hiddenSegments>
      </requestFiltering>
    </security>

    <httpErrors existingResponse="PassThrough" />

    <iisnode 
        watchedFiles="web.config;*.js;node_modules\*;"
        node_env="production"
        />
  </system.webServer>
</configuration>

server.js:

const { createServer } = require('http')
const { parse } = require('url')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url, true)
      handle(req, res, parsedUrl)
  }).listen(process.env.PORT || 8000, (err) => {
    if (err) throw err
    console.log('> Ready on ')
  })
})

In my opinion, the problem is related to the availability of static files, but I do not understand how to configure them correctly.

1 Answers1

0

There are many possible reasons for 404. If it is your first experiance in deploying next js application. You can refer to this answer about Deploying Next Js project in IIS. It needs NodeJS, URLRewrite and IISNode on your server.
Link: https://stackoverflow.com/a/67212396/20058276

Importantly, iisnode is out of maintenance for a long time. You can try to use HttpPlatformHandler. https://halfblood.pro/running-nodejs-web-apps-on-iis-with-httpplatformhandler/.
This tutorial document is from Lex Li. Perhaps this article can provide better help.

TengFeiXie
  • 176
  • 5