Nginx config is causing too many redirects when using a variable in proxy pass. This is an attempt to use NGINX to reverse proxy to resources in a private subnet. The reverse proxy works fine when using the DNS record directly in proxy pass, yet when passing in a variable it causes too many redirects.
NGINX Config: Which DOES NOT WORK
server {
listen 443 ssl;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
server_name $host;
rewrite ^/$ https://$host/_dashboards redirect;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
set $domain_endpoint "${elasticsearch_endpoint}";
set $cognito_endpoint "${cognito_host}";
location /_dashboards {
# Forward requests to Dashboards
proxy_pass https://$domain_endpoint/_dashboards;
# Handle redirects to Cognito
proxy_redirect https://$cognito_endpoint https://$host;
# Update cookie domain and path
proxy_cookie_domain $domain_endpoint $host;
proxy_cookie_path / /_dashboards/;
# Response buffer settings
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
location ~ \/(log|sign|fav|forgot|change|saml|oauth2) {
# Forward requests to Cognito
proxy_pass https://$cognito_endpoint;
# Handle redirects to Dashboards
proxy_redirect https://$domain_endpoint https://$host;
# Update cookie domain
proxy_cookie_domain $cognito_endpoint $host;
}
}
The only difference for a working config. Is the proxy_pass
under the first location /_dashboards
is given the DNS record directly like so
location /_dashboards {
# Forward requests to Dashboards
proxy_pass https://vpc-aws-blah-blah-blah.com/_dashboards;
When viewing network traffic in the browser. The request appear to be the same. It makes an initial POST request to a login endpoint with a redirect_uri
in the url parameters.
The difference is that after the intial POST the working version makes one GET request, while the non-working version makes repeated GET request