This is a quick demo that ReactOS can run the latest NGINX version (which is nginx-1.23.4 at the time of writing).
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
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.
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.
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.
If you enjoyed this project and would like to make a donation, please consider donating directly to the ReactOS project.