These are some quick n’ dirty instructions so people can get up and running fast.

I wish I had known this was possible sooner.

Instructions:

Check that your VPN supports port forwarding and you have it enabled.

Grab your VPN’s internal IP with ip a

Find the interface for your VPN. For me it’s called tun0.

Open up /etc/nginx/nginx.conf

You can back it up, or comment everything out, or pick what’s necessary. Here’s what my file looks like.

	worker_processes  1;
	include modules.d/*.conf;

	events {
		worker_connections  1024;
	}
	http {
		server {
			listen [VPN INTERNAL IP]:[VPN FORWARDED PORT];
			server_name  localhost;
			location / {
				root '[ABSOLUTE PATH TO YOUR WEBSITE ROOT FOLDER]';
				index index.html; # Relative to your website root.
			}
		}
	}

Make sure your permissions are correct. For me, the ‘other’ group needs read permissions to the root folder, including where it’s mounted.

Start nginx with systemctl start nginx

You can visit your website on your host machine in a browser at [VPN INTERNAL IP]:[VPN FORWADED PORT]. For me, using the internal IP is required to view the website on my host machine.

To view the website on other machines, you can use [VPN EXTERNAL IP]:[VPN FORWARDED PORT]. The only thing you need to change is the IP address.

I hope this works for you and you are inspired to selfhost and take back power from those who stole it from us.

  • humanoidchaos@lemmy.cif.suOP
    link
    fedilink
    English
    arrow-up
    19
    arrow-down
    4
    ·
    5 days ago

    Thanks.

    It’s my understanding that https provides encryption for the data sent between you and the server. If you’re not sending any sensitive data, then the encryption shouldn’t be necessary.

    Don’t get me wrong, encryption is great even when it isn’t necessary. For my demonstration purposes though, I chose not to include it.

    I also believe it’s possible to set up HTTPS encryption without a domain name, but it might result in that “we can’t verify the authenticity of this website” warning in web browsers due to using a self-signed certificate.

    • stratself@lemdro.id
      link
      fedilink
      English
      arrow-up
      20
      ·
      edit-2
      5 days ago

      Let’s Encrypt are rolling out IP-based certs, you may wanna follow its development. I’m not sure if it could be used for your forwarded VPN port, but it’d be nice anyhow

      Edit: I believe encryption helps prevent tampering the data between the server and user too. It should prevent for example, someone MITM the connection and injecting malicious content that tells the user to download malware

    • Possibly linux@lemmy.zip
      link
      fedilink
      English
      arrow-up
      24
      arrow-down
      8
      ·
      5 days ago

      That is a pretty bad take as all data is sensitive. Https also provides integrity to prevent man in the middle attacks.

      • theshatterstone54@feddit.uk
        link
        fedilink
        English
        arrow-up
        11
        arrow-down
        3
        ·
        5 days ago

        And that’s why even static sites like Hugo blogs or even simple pages like the one OP posted should have HTTPS. Source: Studied Distributed Systems at university.

    • WhyJiffie@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      5
      arrow-down
      2
      ·
      4 days ago

      but it is sensitive data. the webserver can send executable code to the web browser. if it does not that doesn’t matter, what matters is that it can be inserted by a middleman. It’s not like there’s a dedicated person needed to do that, it can just happen automatically.

    • Possibly linux@lemmy.zip
      link
      fedilink
      English
      arrow-up
      3
      ·
      4 days ago

      You can pickup a cheap domain from gen.xyz. The cheapest domain is $0.99 which is pretty affordable especially since you probably are already paying for a internet connection.

      Once you have the domain you can point it to your IP and then set port 443 on that address to point to Caddy. On Caddy you can either configure it as a server or use it as a reverse proxy to point to something else.

      Security wise I would put all of this on its own vlan with ACLs to control access. If that sounds confusing start with https.

    • fmstrat@lemmy.nowsci.com
      link
      fedilink
      English
      arrow-up
      1
      ·
      4 days ago

      Not that I think you need it for this, but a DynDNS implementation would give you a hostname you can dynamically change to your VPN ip, thus solving the SSL host issue.

    • SMillerNL@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      4 days ago

      It’s my understanding that https provides encryption for the data sent between you and the server. If you’re not sending any sensitive data, then the encryption shouldn’t be necessary.

      As others have pointed out, everything can be sensitive. If I’m self hosting nextcloud instance with chat that under British law should check for age… self hosting is now sensitive.

      In addition to that, without a secure connection you’re stuck with HTTP/1.1 from 1999 instead of the modern 2 or 3 versions.

      I also believe it’s possible to set up HTTPS encryption without a domain name, but it might result in that “we can’t verify the authenticity of this website” warning in web browsers due to using a self-signed certificate.

      You can: https://letsencrypt.org/2025/07/01/issuing-our-first-ip-address-certificate

      • N0x0n@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        arrow-down
        1
        ·
        4 days ago

        In addition to that, without a secure connection you’re stuck with HTTP/1.1

        That’s not entirely true. A lot of requests, even with https, are send over HTTP/1.1. And this is kinda mind blowing that in 2025 we still rely on something so old and insecure…

        Same goes with SMS and the old SS7 protocol from 1970… 2FA SMS is probably the most insecure way to get access to your bank account or what ever service promotes 2FA sms login.

        • falynns@lemmy.world
          link
          fedilink
          English
          arrow-up
          3
          ·
          4 days ago

          I can’t believe SMS is still used for anything but sure OTP sent in text makes sure my account is secure Mr Bank.

        • SMillerNL@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          4 days ago

          Does that contradict what I said? Sure, HTTP 1 is still widely used, but without TLS you can’t use anything else.

          For SMS we don’t have a choice, but if you configure your own web server you do have a choice.

    • drspod@lemmy.ml
      link
      fedilink
      English
      arrow-up
      3
      arrow-down
      3
      ·
      4 days ago

      Anyone with the ability to inject or modify packets in the network path between server and client can inject malicious javascript or browser exploits into an unencrypted HTTP TCP stream. The client’s User-Agent and other headers would allow the attacker to customize their attack to target that specific browser version, and compromise the client machine.

    • N0x0n@lemmy.ml
      link
      fedilink
      English
      arrow-up
      0
      arrow-down
      1
      ·
      4 days ago

      I also believe it’s possible to set up HTTPS encryption without a domain name, but it might result in that “we can’t verify the authenticity of this website” warning in web browsers due to using a self-signed certificate.

      Just create your own rootCA and IntermediateCA and sign your certificate with those, put the CA in your trust store of your system and get rid of this self-signed warning on every device and happily access all your service via: *.home.lab or whater ever local domain pleases you.

        • N0x0n@lemmy.ml
          link
          fedilink
          English
          arrow-up
          1
          ·
          4 days ago

          Fair point ! Yeah sure if you host a blog online it doesn’t make sense… But if you only self-host your services for family and some friends and access them over VPN, a local CA is actually a privacy respecting choice.

          Hosting something on the web (specially self-hosted) without the propre software and hardware is a bad idea in the first place anyway !