Click here to Skip to main content
15,867,453 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm trying to make an auto installer in command prompt for an app (FUXA : https://github.com/frangoteam/FUXA ). Everything works fine until I reboot the machine that was installed on, after that it gives me this error in the browser:

iisnode encountered an error when processing the request.

HRESULT: 0x2
HTTP status: 500
HTTP subStatus: 1001
HTTP reason: Internal Server Error
You are receiving this HTTP 200 response because system.webServer/iisnode/@devErrorsEnabled configuration setting is 'true'.

In addition to the log of stdout and stderr of the node.exe process, consider using debugging and ETW traces to further diagnose the problem.

The node.exe process has not written any information to stderr or iisnode was unable to capture this information. Frequent reason is that the iisnode module is unable to create a log file to capture stdout and stderr output from node.exe. Please check that the identity of the IIS application pool running the node.js application has read and write access permissions to the directory on the server where the node.js application is located. Alternatively you can disable logging by setting system.webServer/iisnode/@loggingEnabled element of web.config to 'false'.


cmd file I made :

 @echo off
 CLS
 ECHO.
 ECHO =============================
 ECHO Running Admin shell
 ECHO =============================

:init
 :: 
 SET installFolder=C:\inetpub\wwwroot\FUXA
 SET rootfuxaFolder=%installFolder%\FUXA
 ::
 setlocal DisableDelayedExpansion
 set cmdInvoke=1
 set winSysFolder=System32
 set "batchPath=%~dpnx0"
 rem this works also from cmd shell, other than %~0
 for %%k in (%0) do set batchName=%%~nk
 set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
 setlocal EnableDelayedExpansion

:checkPrivileges
  NET FILE 1>NUL 2>NUL
  if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
  if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
  ECHO.
  ECHO **************************************
  ECHO Invoking UAC for Privilege Escalation
  ECHO **************************************

  ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
  ECHO args = "ELEV " >> "%vbsGetPrivileges%"
  ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
  ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
  ECHO Next >> "%vbsGetPrivileges%"
  
  if '%cmdInvoke%'=='1' goto InvokeCmd 

  ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
  goto ExecElevation

:InvokeCmd
  ECHO args = "/c """ + "!batchPath!" + """ " + args >> "%vbsGetPrivileges%"
  ECHO UAC.ShellExecute "%SystemRoot%\%winSysFolder%\cmd.exe", args, "", "runas", 1 >> "%vbsGetPrivileges%"

:ExecElevation
 "%SystemRoot%\%winSysFolder%\WScript.exe" "%vbsGetPrivileges%" %*
 exit /B

:gotPrivileges
 setlocal & cd /d %~dp0
 if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul  &  shift /1)
 

:InstallIIS
 DISM /online /enable-feature /all /featurename:IIS-NetFxExtensibility
 DISM /online /enable-feature /all /featurename:IIS-NetFxExtensibility45
 DISM /online /enable-feature /featurename:IIS-ApplicationInit
 DISM /online /enable-feature /all /featurename:IIS-ASP
 DISM /online /enable-feature /all /featurename:IIS-ASPNET 
 DISM /online /enable-feature /all /featurename:IIS-ASPNET45
 DISM /online /enable-feature /featurename:IIS-ISAPIExtensions
 DISM /online /enable-feature /featurename:IIS-ISAPIFilter
 DISM /online /enable-feature /featurename:IIS-ServerSideIncludes
 DISM /online /enable-feature /featurename:IIS-WebSockets 
 DISM /online /enable-feature /featurename:IIS-WebServer 
 DISM /online /enable-feature /featurename:IIS-WebServerRole     
 
:IISModules
 msiexec.exe /i iisnode-full-v0.2.26-x64.msi
 msiexec.exe /i rewrite_amd64_en-US.msi
 
:InstallNodeJs
 msiexec.exe /i node-v14.21.3-x64.msi
 
:CreateFolderStructure
 MKDIR %rootfuxaFolder%
 
:InstallRootSoftware
 XCOPY /s /y /e %cd%\bin\FUXA\* %rootfuxaFolder%
 
:AddSitesToIIS
 %systemroot%\system32\inetsrv\appcmd add site /name:FUXA /physicalPath:"C:\inetpub\wwwroot\FUXA\FUXA" /bindings:http://*:1881
 
:GrandPermissions
 icacls %rootfuxaFolder% /grant IIS_IUSRS:(OI)(CI)F /T
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 ::START
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 REM Run shell as admin (example) - put here code as you like
 ::ECHO %batchName% Arguments: P1=%1 P2=%2 P3=%3 P4=%4 P5=%5 P6=%6 P7=%7 P8=%8 P9=%9
 %InstallIIS%
 %IISModules%
 %InstallNodeJs%
 %CreateFolderStructure%
 %InstallRootSoftware%
 %AddSitesToIIS%
 %GrandPermissions%
 start microsoft-edge:http://localhost:1881


EDIT :
As @Andre Oosthuizen said, I checked permissions and I think evetrything is fine. I discovered a folder inside my project named iisnode with two files in it, both files contain these lines :

2023-05-23T14:07:06.613Z [INF] 	FUXA V.1.1.13-1186-1
2023-05-23T14:07:06.929Z [INF] 	FUXA init in  327ms.
2023-05-23T14:07:06.936Z [INF] 	FUXA started!
2023-05-23T14:07:06.979Z [INF] 	WebServer is running http://127.0.0.1:\\.\pipe\74e72056-19e0-4b2c-bb56-7aa0255adf92/


EDIT 2 :

Installed everything from scratch, those two files I found earlier have something different this time. One of them (stderr) contain this errors :

(node:1536) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
express-rate-limit: req.ip is undefined - you can avoid this by providing a custom keyGenerator function, but it may be indicative of a larger issue.
express-rate-limit: req.ip is undefined - you can avoid this by providing a custom keyGenerator function, but it may be indicative of a larger issue.


and stdout :
2023-05-24T12:16:01.047Z [DBG]  	settings.js default created successful!
2023-05-24T12:16:01.069Z [INF] 	FUXA V.1.1.13-1186-1
2023-05-24T12:16:01.745Z [INF] 	FUXA init in  700ms.
2023-05-24T12:16:01.757Z [INF] 	FUXA started!
2023-05-24T12:16:01.807Z [INF] 	WebServer is running http://127.0.0.1:\\.\pipe\f7ec1a4a-7142-4037-81c9-594dacb7cc59/
GET /api/settings 200 4.108 ms - 1112
GET /api/settings 304 2.690 ms - -
2023-05-24T12:16:02.592Z [INF] 	socket.io client connected
GET /api/project 200 1.337 ms - 50


What I have tried:

I have tried to put in the web.config this code :

<configuration>
  <system.webServer>

    <!-- indicates that the hello.js file is a node.js application 
    to be handled by the iisnode module -->

    <handlers>
      <add name="iisnode" path="hello.js" verb="*" modules="iisnode" />
    </handlers>

    <!-- 
      the iisnode section configures the behavior of the node.js IIS module 
      setting values below are defaults

    * node_env - determines the environment (production, development, staging, ...) in which 
      child node processes run; if nonempty, is propagated to the child node processes as their NODE_ENV
      environment variable; the default is the value of the IIS worker process'es NODE_ENV
      environment variable

    * nodeProcessCommandLine - command line starting the node executable; in shared
      hosting environments this setting would typically be locked at the machine scope.
      
    * interceptor - fully qualified file name of a node.js application that will run instead of an actual application
      the request targets; the fully qualified file name of the actual application file is provided as the first parameter
      to the interceptor application; default interceptor supports iisnode logging
      
    * nodeProcessCountPerApplication - number of node.exe processes that IIS will start per application;
      setting this value to 0 results in creating one node.exe process per each processor on the machine
      
    * maxConcurrentRequestsPerProcess - maximum number of reqeusts one node process can 
      handle at a time
      
    * maxNamedPipeConnectionRetry - number of times IIS will retry to establish a named pipe connection with a
      node process in order to send a new HTTP request
      
    * namedPipeConnectionRetryDelay - delay in milliseconds between connection retries
    
    * maxNamedPipeConnectionPoolSize - maximum number of named pipe connections that will be kept in a connection pool; 
      connection pooling helps improve the performance of applications that process a large number of short lived HTTP requests
      
    * maxNamedPipePooledConnectionAge - age of a pooled connection in milliseconds after which the connection is not reused for
      subsequent requests
    
    * asyncCompletionThreadCount - size of the IO thread pool maintained by the IIS module to process asynchronous IO; setting it
      to 0 (default) results in creating one thread per each processor on the machine
    
    * initialRequestBufferSize - initial size in bytes of a memory buffer allocated for a new HTTP request
    
    * maxRequestBufferSize - maximum size in bytes of a memory buffer allocated per request; this is a hard limit of 
      the serialized form of HTTP request or response headers block
      
    * watchedFiles - semi-colon separated list of files that will be watched for changes; a change to a file causes the application to recycle;
      each entry consists of an optional directory name plus required file name which are relative to the directory where the main application entry point 
      is located; wild cards are allowed in the file name portion only; for example: "*.js;node_modules\foo\lib\options.json;app_data\*.config.json"
      
    * uncFileChangesPollingInterval - applications are recycled when the underlying *.js file is modified; if the file resides
      on a UNC share, the only reliable way to detect such modifications is to periodically poll for them; this setting 
      controls the polling interval
      
    * gracefulShutdownTimeout - when a node.js file is modified, all node processes handling running this application are recycled;
      this setting controls the time (in milliseconds) given for currently active requests to gracefully finish before the 
      process is terminated; during this time, all new requests are already dispatched to a new node process based on the fresh version 
      of the application
    
    * loggingEnabled - controls whether stdout and stderr streams from node processes are captured and made available over HTTP
    
    * logDirectory - directory name relative to the main application file that will store files with stdout and stderr captures; 
      individual log file names have unique file names; log files are created lazily (i.e. when the process actually writes something
      to stdout or stderr); an HTML index of all log files is also maintained as index.html in that directory;
      by default, if your application is at http://foo.com/bar.js, logs will be accessible at http://foo.com/iisnode;
      SECURITY NOTE: if log files contain sensitive information, this setting should be modified to contain enough entropy to be considered
      cryptographically secure; in most situations, a GUID is sufficient
      
    * debuggingEnabled - controls whether the built-in debugger is available
      
    * debuggerPortRange - range of TCP ports that can be used for communication between the node-inspector debugger and the debugee; iisnode
      will round robin through this port range for subsequent debugging sessions and pick the next available (free) port to use from the range
      
    * debuggerPathSegment - URL path segment used to access the built-in node-inspector debugger; given a node.js application at 
      http://foo.com/bar/baz.js, the debugger can be accessed at http://foo.com/bar/baz.js/{debuggerPathSegment}, by default
      http://foo.com/bar/baz.js/debug
    
    * debugHeaderEnabled - boolean indicating whether iisnode should attach the iisnode-debug HTTP response header with 
      diagnostics information to all responses
    
    * maxLogFileSizeInKB - maximum size of a single log file in KB; once a log file exceeds this limit a new log file is created

    * maxTotalLogFileSizeInKB - maximum total size of all log files in the logDirectory; once exceeded, old log files are removed
    
    * maxLogFiles - maximum number of log files in the logDirectory; once exceeded, old log files are removed
    
    * devErrorsEnabled - controls how much information is sent back in the HTTP response to the browser when an error occurrs in iisnode; 
      when true, error conditions in iisnode result in HTTP 200 response with the body containing error details; when false,
      iisnode will return generic HTTP 5xx responses
      
    * flushResponse - controls whether each HTTP response body chunk is immediately flushed by iisnode; flushing each body chunk incurs 
      CPU cost but may improve latency in streaming scenarios
      
    * enableXFF - controls whether iisnode adds or modifies the X-Forwarded-For request HTTP header with the IP address of the remote host
    
    * promoteServerVars - comma delimited list of IIS server variables that will be propagated to the node.exe process in the form of 
      x-iisnode-<server_variable_name> HTTP request headers; for a list of IIS server variables available see 
      http://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx; for example "AUTH_USER,AUTH_TYPE"
      
    * configOverrides - optional file name containing overrides of configuration settings of the iisnode section of web.config; 
      the format of the file is a small subset of YAML: each setting is represented as a <key>: <value> on a separate line 
      and comments start with # until the end of the line, e.g. 
            # This is a sample iisnode.yml file
            nodeProcessCountPerApplication: 2
            maxRequestBufferSize: 8192 # increasing from the default
            # maxConcurrentRequestsPerProcess: 512 - commented out setting
      
    -->

    <iisnode      
      node_env="%node_env%"
      nodeProcessCountPerApplication="1"
      maxConcurrentRequestsPerProcess="1024"
      maxNamedPipeConnectionRetry="100"
      namedPipeConnectionRetryDelay="250"      
      maxNamedPipeConnectionPoolSize="512"
      maxNamedPipePooledConnectionAge="30000"
      asyncCompletionThreadCount="0"
      initialRequestBufferSize="4096"
      maxRequestBufferSize="65536"
      watchedFiles="*.js;iisnode.yml"
      uncFileChangesPollingInterval="5000"      
      gracefulShutdownTimeout="60000"
      loggingEnabled="true"
      logDirectory="iisnode"
      debuggingEnabled="true"
      debugHeaderEnabled="false"
      debuggerPortRange="5058-6058"
      debuggerPathSegment="debug"
      maxLogFileSizeInKB="128"
      maxTotalLogFileSizeInKB="1024"
      maxLogFiles="20"
      devErrorsEnabled="true"
      flushResponse="false"      
      enableXFF="false"
      promoteServerVars=""
      configOverrides="iisnode.yml"
     />

    <!--     
    
    One more setting that can be modified is the path to the node.exe executable and the interceptor:
    
    <iisnode
      nodeProcessCommandLine=""%programfiles%\nodejs\node.exe"" 
      interceptor=""%programfiles%\iisnode\interceptor.js"" />
    
    -->

  </system.webServer>
</configuration>


This code is from here : https://github.com/Azure/iisnode/blob/master/src/samples/configuration/web.config
Posted
Updated 24-May-23 2:24am
v7
Comments
Richard Deeming 24-May-23 5:04am    
What does "stops working" mean?

If you're getting an error, you need to include the full details of that error in your question.

If it's just not responding, then you need to check that the application pool is running, check that the site is started, and check the event logs on the server for any clues.
Gaby94 24-May-23 5:11am    
Sorry I forgot to mention this, check new edit.

1 solution

Been here before, it seems that your file system permissions or log file creation for the IIS app pool running the Node.js app is the culprit. You can try the following if not yet done -

Check that the identity of the IIS app pool assigned to your Node.js app has appropriate read and write access permissions to the directory where the app is located --
a.Open IIS Manager.

b. Select Application Pools section and locate the application pool assigned to your Node.js app.

c. Right-click on the application pool and select "Advanced Settings".

d. In the "Advanced Settings" window, find the "Identity" property and check the values (i.e for ApplicationPoolIdentity, NetworkService etc.).

e. Ensure that the user or account has the necessary permissions on the app directory i.e. in your C:\inetpub\wwwroot\FUXA). You may need to grant read and write access to the user or account.

In your web.config file, the logDirectory property is set to "iisnode". Ensure that the IIS app pool's identity has read and write access permissions to the "iisnode" directory or the directory specified in the logDirectory property.

Try enabling detailed logging - In your web.config file, set <iisnode loggingenabled="true">. Thi should give you more detail on errors for hopefully easier debugging...

I hope one of these help woth your issue.
 
Share this answer
 
Comments
Gaby94 24-May-23 6:06am    
Still the same issue, before asking here I checked all the above and still the same issue. I edited my question with a little more informations.
Andre Oosthuizen 24-May-23 6:26am    
The logs you found in the iisnode folder shows the initialization and startup process of your FUXA Node.js app. I cannot think of anything else to check... the above has resolved our issue we had. More Googling brought these up -
Maybe check the Event Viewer in Windows for any relevant errors or warning messages for your Node.js app or the IIS process. Look for entries under the "Windows Logs" section, in the "Application" and "System" logs.
You can enable Failed Request Tracing in IIS, which logs detailed info about failed HTTP requests. You can enable Failed Request Tracing through IIS Manager or by modifying your web.config file.
Make sure that all necessary dependencies, such as Node.js, all/required modules, and system components, are properly installed and up to date.
Check your app code for any potential errors or misconfigurations that may cause issues.

If this fails I am not sure where to point next.
Gaby94 4-Jul-23 6:44am    
Thank you for trying, I ended up by making the app as service, and that solved all the issues I had with it (although I don't consider this as a solution). I will mark it as a solution for anyone else that is having the same issue and need to diagnose it.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900