0

I have a service (Plack) which listens on http://myhost.com:5000 I want to password protect access to it with Basic Auth

When I set a server directive in the nginx conf file I get a conflict with Plack (can't bind to 0.0.0.0:5000 because it is use by Plack, and vice versa). So this brings me nowhere.

Then I enabled Basic Auth in the conf file with the location directive as :

server {
 location / {
     proxy_pass http://localhost:5000;
     auth_basic "Restricted";
     auth_basic_user_file /home/userx/.htpasswd;
     }  
 }

which when nginx "/" is hit it redirects it to port 5000 and asks for username/password. But my app relies on the url including the port (http://myhost.com:5000/) to find the resources and the port is stripped off from the request, so what it ends up is a http://myhost.com and I get a 404 on all resources/css/images/javascripts etc. Tried various directives like port_redirection etc.

I tried URL rewriting with :

location / {
    auth_basic "Restricted";
    auth_basic_user_file /home/userx/.htpasswd;
    rewrite ^/(.*) https://example.com/$1 permanent;
}

which gets the desired result (http://myhost.com:5000) and all resources are found but basic auth never kicks off so I never get a prompt asking for a username /password

As a final attempt it tried to protect the url with a direct

location http://localhost:5000 {
        auth_basic "Restricted";
        auth_basic_user_file /home/userx/.htpasswd;
}

but that did not work either.

Can someone help?

user3687001
  • 335
  • 1
  • 3
  • 12

0 Answers0