Search code examples
apacheauthenticationportlighttpd

lighttpd: How to forward port (visible only to localhost) to WAN after authentication?


I have a webcam stream only accessible on the host machine via http://localhost:1234

This stream has no authentication.

I would like to setup a lightweight http server that listens on port 80 for outside connections, prompts for username and password, and then forwards the stream from localhost:1234

How do I do this?


Solution

  • Lighttpd can do this. The following config files will forward requests to http://domain.com/ => http://localhost:1234/ requesting a http basic auth first.

    lighttpd.conf

    ## Add auth and proxy mods to your existing modules list
    server.modules = (
        "mod_auth",
        "mod_proxy"
    )
    
    
    $HTTP["host"] == "domain.com" {
    
        auth.backend                = "plain"
        auth.backend.plain.userfile = "lighttpd-plain.user" 
    
        auth.require = (
            "/" => (
                "method"  => "basic",
                "realm"   => "MyWebcam",
                "require" => "valid-user" 
            )
        )
    
        proxy.server = (
            "/" => (
                (
                    "host" => "127.0.0.1",
                    "port" => 1234
                )   
            )
        )
    
    }
    

    lighttpd-plain.user

    webcamuser:webcampassword
    

    Make sure you load mod_auth before mod_proxy in server.modules, getting them in the wrong order can make lighty panic.