How can I setup an nginx proxy_pass directive that will also include HTTP Basic authentication information sent to the proxy host?

This is an example of the URL I need to proxy to:


The end goal is to allow 1 server present files from another server (the one we're proxying to) without exposing the URI of the proxy server. I have this working 90% correct now from following the Nginx config found here:


I just need to add in the HTTP Basic authentication to send to the proxy server


I did a writeup on this a while ago. See the details here:


For example:

 location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";

"a2luZzppc25ha2Vk" is "king:isnaked" base64 encoded, so that would work for


Feel free to check out blog post for more details.

  • 2
    The link is broken
    – Alex
    Jul 26 '13 at 6:30
  • 1
    Link is now here: shairosenfeld.blogspot.com/search?q=nginx in case anyone is wondering
    – ckm
    Oct 22 '14 at 22:25
  • 1
    I need something more difficult
    – Ilja
    Jul 4 '15 at 0:02
  • 7
    Your solution is not flexible enough. It could be very useful to encode username:password on the fly. First, nginx must parse username:password from URL, secondly, nginx must encode this data and set in appropriate header. I don't want to hardcode encoded credentials.
    – Johnny
    Aug 26 '15 at 16:42
  • I get "bad request" when trying it on my setup.. any idea?
    – Spock
    Oct 9 '15 at 21:45

I got this working with alvosu's answer but I had to enter the word "Basic" inside the quotation of the base64 string so it looked like this:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";


proxy_set_header Authorization "USER_AND_PASS"

where USER_AND_PASS = base64(user:pass).


Remove the authorization header that gets passed forwarded by nginx with proxy_set_header Authorization "";.

I configured nginx to do basic auth but the Authorization header was getting passed along in the proxy_pass directive and the receiving end couldn't handle the token.

# Basic Auth
auth_basic "Private Stuff";
auth_basic_user_file /etc/nginx/.htpasswd;

location /server {
    proxy_set_header Authorization "";

(Specific to my case, this error was returned Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.