windowsnginxservice

Run Nginx as Windows service


I am trying to run nginx (reverse proxy) as a windows service so that it's possible to proxy a request even when a user is not connected.

I searched a lot around and found winsw that should create a service from an .exe file (such as nginx).

I found many tutorials online saying to create an xml file as following

<service>
   <id>nginx</id>
   <name>nginx</name>
   <description>nginx</description>
   <executable>c:\nginx\nginx.exe</executable>
   <logpath>c:\nginx\</logpath>
   <logmode>roll</logmode>
   <depend></depend>
   <startargument>-p c:\nginx</startargument>
   <stopargument>-p c:\nginx -s stop</stopargument>
</service>

(I have nginx.exe in a folder called nginx under c: o the paths are correct).

Now the problem is that the service is created but I can't seem to make it start, every time I try to start it, a window pops up saying

Error 1053: The service didn't respond to the start or control request in a timely fashion

Does anyone know how can I fix this or a different way to run Nginx as a Window service?


Solution

  • Just stumbled here and managed to get things working with this free open source alternative: https://nssm.cc/

    It basically is just a GUI to help you create a service. Steps I used:

    1. Download Nginx (http://nginx.org/en/download.html) and uzip to C:\foobar\nginx
    2. Download nssm (https://nssm.cc/)
    3. Run nssm install nginx from the command line
    4. In NSSM gui do the following:
    5. On the Application tab: set Path to C:\foobar\nginx\nginx.exe, set Startup directory to C:\foobar\nginx
    6. On the I/O tab type start nginx on the Input (stdin) field. Optionally set C:\foobar\nginx\logs\service.out.log and C:\foobar\nginx\logs\service.err.log in the output and error slots.
    7. Click Install service button. Go to Windows Services, start the "nginx" service. Hit http://localhost:80 and you should get the nginx logon. Turn off the service, disable browser cache and refresh, screen should now fail to load.

    You should be good to go from then on.