Community Solution

Reverse Proxy ZimaOS and Docker Apps with Nginx: Change the WebUI Port, Use Local DNS, and Avoid Loops

A June 2026 thread where a user running IPFire/Bind9 wanted local hostnames for ZimaOS and Docker apps. A community reply showed the ZimaOS WebUI Port setting under General. The original poster moved the WebUI to port 83, used static-IP Nginx proxy destinations and local DNS entries, rebooted networking equipment, and confirmed the setup worked.

The source produced a working local reverse-proxy design: move the ZimaOS dashboard away from port 80, reserve ports 80/443 for the reverse proxy, create local DNS records, and point Nginx proxy targets at the ZimaOS server's static LAN IP plus each app's real port.

The key design choice was to avoid a DNS loop. The user's Bind9 records gave friendly names such as food.sdak, while the Nginx upstream destination remained the ZimaOS static IP—for example 10.66.66.30:9925—instead of proxying the hostname back through itself.

ZimaOS General settings showing WebUI Port changed from the default to port 83 for a reverse-proxy setup
The source responder pointed to Settings → General → WebUI Port so Nginx could own the conventional HTTP port.

Move the ZimaOS WebUI Off Port 80

In the source, the user changed the ZimaOS WebUI to port 83. The exact alternate port is not important; choose one that is unused and document it.

After changing it, confirm direct access first:

http://ZIMA_LAN_IP:83

Do not add Nginx until the new direct dashboard URL works.

Port 443 May Need the Same Planning

The community reply noted that ZimaOS HTTPS settings live under Developer Mode and can conflict with a reverse proxy that also wants 443. Decide which service should own 443 before enabling both.

If Nginx terminates HTTPS, the backend can remain private HTTP on the LAN unless your security model requires TLS on both hops.

Use a Stable LAN IP for the Reverse-Proxy Target

The source user assigned a static IP to the ZimaOS host and used that address in the Nginx upstream configuration. Current ZimaOS supports DHCP or Manual static network configuration under Settings → Network.

See the current ZimaOS static-IP workflow.

Create Local DNS Records for Friendly Names

IPFire Bind9 local DNS host records pointing service names such as food pool and zima at the ZimaOS static IP
The source keeps name resolution in the local router/DNS server and points multiple service names at the same ZimaOS IP.

For a home-only DNS namespace, avoid using .local for ordinary unicast DNS when possible because that suffix is conventionally used by mDNS. Use your real internal domain or another deliberately managed local namespace.

Point Nginx at IP:Port Backends

Nginx Proxy Manager showing local proxy hosts for food pool and zima with static ZimaOS IP and different destination ports
The source's working proxy table uses the same ZimaOS IP with different application destination ports.

This avoids resolving the public/friendly hostname from inside the same proxy and accidentally sending traffic back into the proxy again.

Preserve WebSocket/Upgrade Traffic for Interactive Apps

ZimaOS and many self-hosted apps use long-lived WebSocket or HTTP upgrade connections. A page can appear visually loaded while live widgets or app dialogs fail if the reverse proxy does not forward the required upgrade headers.

Use the appropriate Nginx/Nginx Proxy Manager WebSocket support for applications that require it.

Local DNS Does Not Require Public Internet Exposure

The source goal was local convenience, not publishing the NAS to the Internet. Keep the proxy listeners and DNS records restricted to trusted networks unless you intentionally design external access with authentication, certificates, firewall rules, and an appropriate threat model.

Reboots Fixed ARP/State in the Source, but Are Not the Core Configuration

The user rebooted both ZimaOS and IPFire after changing ports and reported that this released stale ARP/network state. That was source-specific cleanup, not a universal requirement after every proxy change.

Nginx Reverse Proxy FAQ

Where did the source change the ZimaOS WebUI port?

Settings → General.

Why did the source use the static IP as the Nginx destination?

To avoid a DNS/proxy loop and make the backend target deterministic.

Do local reverse-proxy names need to be exposed to the Internet?

No. The entire design can remain inside the LAN with local DNS.