nginx version: 1.14.2
Im trying to use nginx auth_request to authenticate users for accessing a subdomain on which a page is served that i cant otherwise influence.
I have a python + flask based login page which returns 200 if the user is logged in, and returns 401 if the user is not logged in.
I have configured a proxy_pass subdomain in nginx like this:
server { listen 80; server_name sub.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name sub.example.com; location / { auth_request /myauth; auth_request_set $auth_status $upstream_status; proxy_pass http://localhost:8001; 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 X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location = /myauth { proxy_pass https://login.example.com/; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } error_page 401 = @error401; location @error401 { return 302 https://login.example.com/login/?next=https://$http_host$request_uri ; } } The nginx config for the login page looks like this:
server { listen 80; server_name login.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name login.example.com; client_max_body_size 128M; location / { include uwsgi_params; uwsgi_pass unix:/srv/loginpage/loginpage.sock; } } This is what my access log looks like:
[24/Dec/2019:04:17:28 +0100] "login.example.com" "GET /login/?next=https://sub.example.com/ HTTP/2.0" 302 263 [24/Dec/2019:04:17:28 +0100] "login.example.com" "GET / HTTP/1.0" 401 10 [24/Dec/2019:04:17:28 +0100] "sub.example.com" "GET / HTTP/2.0" 302 161 [24/Dec/2019:04:17:28 +0100] "login.example.com" "GET /login/?next=https://sub.example.com/ HTTP/2.0" 302 263 [24/Dec/2019:04:17:28 +0100] "login.example.com" "GET / HTTP/1.0" 401 10 [24/Dec/2019:04:17:28 +0100] "sub.example.com" "GET / HTTP/2.0" 302 161 [24/Dec/2019:04:17:28 +0100] "login.example.com" "GET /login/?next=https://sub.example.com/ HTTP/2.0" 302 263 [24/Dec/2019:04:17:28 +0100] "login.example.com" "GET / HTTP/1.0" 401 10 [24/Dec/2019:04:17:28 +0100] "sub.example.com" "GET / HTTP/2.0" 302 161 The debug log can be found here: https://gist.github.com/laundmo/c23345061940bbef59703d43e93a9ba0
The login system works, i can login and get a 200 response on https://login.example.com/, if im logged out i get redirected to the login page, even when accessing sub.example.com while logged out. The ridirect back also seems to work. Just for some reason once i get redirected back to sub.example.com i get redirected to login.example.com whihc redirects me to sub.example.com and so on...
edit: if this belongs on another stackexchange page, please tell me and i will delete this and move it there