How to Host Multiple Apps on a Single IP

Hosting multiple web apps at home often runs into a common limitation — only one public IP. Here’s how I solved it using Nginx Proxy Manager and Porkbun DNS.

Building apps in my free time is something I enjoy a lot. I have a bunch of ideas that I'd love to see brought into life.

Considering my “frugal” mindset and profitability of those projects, it doesn't make a lot of sense to host them on the cloud.

For instance, my app.naptune.xyz project that I built with a friend has following requirements for the cloud:

  1. React static frontend
  2. Python FastAPI backend with ffmpeg installation
  3. MariaDB Relational Database
  4. Landing page

In total it would cost anywhere from $20 to $100+ monthly for proper cloud deployment depending on the load.

This of course multiplied by the number of apps. It can grow quite a lot. I'm also in distrust of myself using the cloud - any mistake can be quite costly.

Thus I made an early decision to host early stage projects inhouse and later on, depending on the demand and popularity, I will migrate to a pair of VPS and configure high availability.

As I was looking forward to host this blog it was time to configure the proper approach. There is a couple of different strategies, but I decided on:

Double Reverse Proxy

Nginx is one of the greatest tools in entire IT industry. It is extremely reliable, light weight and very optimal. Just check this benchmark results for four of the most popular OSS Reverse Proxies.

However, everybody should choose the ones that fit them the best. I decided to use Nginx Proxy Manager . It simplifies Nginx significantly whilst also enables SSL auto renewal and generation with Porkbun integration, which is my domain name registrar of choice.

Here’s how the request travels from the public internet through your LAN:

3_How to host multiple apps .png

1. DNS (Porkbun)

  • blog.curci.cc → resolves to **128.96.22.63** (your public IP).

2. ISP Router (WAN Gateway)

  • Accepts incoming traffic on 443 (HTTPS)
  • Forwards it to your LAN proxy host (10.10.20.99:443)

3. Reverse Proxy (Nginx Proxy Manager)

  • NPM listens on LAN IP **10.10.20.99:443**
  • It checks the Host header in the HTTPS request (blog.curci.cc)
  • Finds a mapping → forwards to internal service

4. Internal Web Service

  • The final host (10.10.20.6:80) serves your blog content.

Final Reverse Proxy Architecture

Taking into the account that now two services are accessible through WAN utilizing only a single static IP address, below is the entire architecture represented through the diagram:

4_How to host multiple apps .png

Conclusion

This guide isn’t a grand breakthrough, but it’s my small #TIL moment. If it helps even one person set up their own self-hosted environment a bit easier, that’s a win in my book.