proxy_pass in post_action location does not send any http request

clintmiller nginx-forum at forum.nginx.org
Fri Jan 10 21:29:11 UTC 2020


Hi, jacks.

I use post_action for something similar to this for keeping track of users
who download files. I've got a location for the /download entry point like
this:

  location ~ /download/ {
    proxy_pass http://app_pool;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    post_action @finished;
  }

  # for mod_zip and x-accel-redirect requests, proxying the
  # request to S3 to fulfill the zip manifest or the x-accel-redirect URI
  location ~
"^/s3-proxy/(?<s3_bucket>.[a-z0-9][a-z0-9-.]*.s3.amazonaws.com)/(?<path>.*)$"
{
    internal;

    resolver 8.8.8.8 valid=30s; # Google DNS
    resolver_timeout 10s;

    proxy_http_version 1.1;
    proxy_set_header Host $s3_bucket;
    proxy_set_header Authorization '';

    # remove amazon headers
    proxy_hide_header x-amz-id-2;
    proxy_hide_header x-amz-request-id;
    proxy_hide_header Set-Cookie;
    proxy_ignore_headers "Set-Cookie";

    # bubble errors up
    proxy_intercept_errors on;

    proxy_pass https://$s3_bucket/$path?$args;
  }


  location @finished {
    internal;

    rewrite ^
/download/finish/$sent_http_x_download_log_id?bytes=$body_bytes_sent&status=$request_completion;
  }

  location ^~ /download/finish {
    proxy_pass http://$download_postback_hostname; # variable map declared
elsewhere
  }

This does work for sending the post_action response after the /download
request is served- with one notable caveat! It does not work for
X-Accel-Redirect responses from my app server. As far as I can tell, the
post_action is either (1) never called in that case, or (2) has some other
issue I have been able to figure out. I've dug around in the C source for
Nginx, but it gets to a spot pretty quick where I'm in over my head.

Although I've been living with this since 2017, here's my mailing list post
regarding the issue from 2018: https://forum.nginx.org/read.php?2,278529

I've considered trying to engage Nginx for commercial support on this one
issue, but I'm not sure what kind of appetite they may have for these types
of issues.

Posted at Nginx Forum: https://forum.nginx.org/read.php?2,286384,286703#msg-286703



More information about the nginx mailing list