This page was served from NGINX on ReactOS!

This is a quick demo that ReactOS can run the latest NGINX version (which is nginx-1.23.4 at the time of writing).

Loading screenshot…
Screenshot from ReactOS

The screenshot shown above gets regenerated every 30 seconds using a batch file that calls NirCmd in a loop:

mkdir C:\htdocs
:loop
nircmd savescreenshot "C:\htdocs\screenshot.png"
timeout /t 30 /nobreak
goto loop

ReactOS is virtualized using QEMU and was started on an Ubuntu host using the following service definition:

[Unit]
Description=QEMU ReactOS VM (node-1)

[Service]
Restart=always
RestartSec=3
ExecStart=/usr/bin/qemu-system-i386 \
    -snapshot \
    -drive file=/root/reactos/drive_c.img,index=0,media=disk \
    -drive file=/root/reactos-general.iso,index=1,media=cdrom \
    -drive file=/root/reactos-node-1.iso,index=2,media=cdrom \
    -boot c \
    -rtc base=localtime \
    -m 256 \
    -vnc :1 \
    -monitor unix:/tmp/qemu-monitor-socket-1,server,nowait \
    -net nic,model=virtio -net user,hostfwd=tcp::8444-:443 \
    -serial stdio \
    -usbdevice tablet

[Install]
WantedBy=default.target

HTTPS Issue

Due to a bug in ReactOS (CORE-14486), HTTPS doesn’t work out of the box. I had to apply a patch and replace msafd.dll in my installation for it to work. However, the patch has other side effects, which is why the pull request was rejected. As you can see, HTTPS is working, but it’s a workaround.

Stability

In its current configuration, the ReactOS server will freeze every couple of days. Usually the error message printed in the debug log is the following, which hints to a memory problem:

(ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 24 remaining
(ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 23 remaining
(ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 22 remaining
*** Assertion failed: MmAvailablePages >= 32
***   Source File: /srv/buildbot/worker_data/Build_GCCLin_x86/build/ntoskrnl/mm/ARM3/pagfault.c, line 656
Break repeatedly, break Once, Ignore, terminate Process or terminate Thread (boipt)?

I posted about this problem in the ReactOS forum, but didn’t get an answer yet. To still be able to provide reasonable uptime, I’m running two ReactOS instances behind a load balancer (HAProxy). The load balancer is running in TCP mode, so the ReactOS instances maintain responsibility for handling HTTPS connections.

IPv6

ReactOS doesn’t have IPv6 support yet (source 1, source 2). However, this page can anyway be accessed via IPv6 thanks to the load balancer on the host machine that accepts IPv6 connections and redirects them to the corresponding IPv4 port on one of the ReactOS instances.

Donations

If you enjoyed this project and would like to make a donation, please consider donating directly to the ReactOS project.

Feedback, Comments, or Questions?

Contact me here.