netbootxyz / docker-netbootxyz

netboot.xyz docker container
https://netboot.xyz/docs/docker
166 stars 51 forks source link

Use nginx to redirect from local assets to the standard github live_endpoint #69

Open sjuerges opened 1 month ago

sjuerges commented 1 month ago

Is your feature request related to a problem? Please describe. I want to keep a few things locally that get used very often, but I want to be able to try out everything else via the standard live_endpoint

Describe the solution you'd like Well, I've built a solution and would like to suggest it here: I have modified the nginx config so that i reads as follows:

server {
        listen 80;

        set $v_filename nf;

        location ~ ^/(.*)$ {
                try_files $uri $uri/ @netboot;
                set $v_filename $1;
                root /assets;
                autoindex on;
        }

        location @netboot {
                return 302      https://github.com/netbootxyz/$v_filename;
        }
}

(code from serverfault i stumbled across some time ago and remembered for this: https://serverfault.com/questions/1099771/redirect-to-other-server-and-domain-if-file-not-found)

This lets me have my cake and eat it too. I can access stuff that isn't there locally, and the nginx sends a 302 to the "standard" live_endpoint url to the client, which then gets it there:

172.18.0.5 - - [03/Aug/2024:21:36:51 +0000] "HEAD /ubuntu-squash/releases/download/7-3e6e05f6/filesystem.squashfs HTTP/1.1" 302 0 "-" "curl/8.4.0"
172.18.0.5 - - [03/Aug/2024:21:36:51 +0000] "GET /ubuntu-squash/releases/download/7-3e6e05f6/filesystem.squashfs HTTP/1.1" 302 145 "-" "curl/8.4.0"

But, i can also access stuff that was downloaded:

172.18.0.5 - - [03/Aug/2024:21:34:45 +0000] "GET /ubuntu-squash/releases/download/5-6efd1d75/vmlinuz HTTP/1.1" 200 11656064 "-" "iPXE/1.21.1+ (g5a9f4)"
172.18.0.5 - - [03/Aug/2024:21:34:46 +0000] "GET /ubuntu-squash/releases/download/5-6efd1d75/initrd HTTP/1.1" 200 46925888 "-" "iPXE/1.21.1+ (g5a9f4)"

Describe alternatives you've considered I was messing about with caching and i found it ... tedious, to say the least. This is, imho, elegant, ties into the local asset management and SHOULDNT break anything.

Additional context None. I think its fairly obvious what is happening here. Feel free to contact me for details if anything is unclear ;)

sjuerges commented 1 month ago

Oh, I would've written a PR if I understood how the initial site-confs/default gets created :) Wasn't trying to be lazy.

sjuerges commented 1 month ago

ah damn, this probably should've gone into docker-netbootxyz issues, right? Sorry, too excited, my bad.

antonym commented 1 month ago

I can move it, if you want to propose a PR, I can find some time to test it out.

sjuerges commented 1 month ago

I'll write a PR tomorrow, thanks @antonym