<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Francis,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thank you for the suggestion, I will start removing the config and try to find which one is the source of the problem.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Also, I want to ask you, I saw that the last-modified header with token is always: Last-Modified:  Sun, 19 Nov 2000 08:52:00 GMT, but there isn't line in the config forcing this date/time.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Can you suggest which code forcing this modified time?</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Andrew</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> nginx <nginx-bounces@nginx.org> on behalf of Francis Daly <francis@daoine.org><br>
<b>Sent:</b> Saturday, July 20, 2019 7:38 AM<br>
<b>To:</b> nginx@nginx.org <nginx@nginx.org><br>
<b>Subject:</b> Re: Nginx cache-control headers issue</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">On Sat, Jul 20, 2019 at 12:33:24AM +0000, Andrew Andonopoulos wrote:<br>
<br>
Hi there,<br>
<br>
> I checked multiple scenarios and when I removed the token I got the correct header. Looks like when the token is active, I am getting wrong headers.<br>
<br>
There is lots going on in your config.<br>
<br>
I suggest it may be useful to have a test system, where you can easily<br>
remove most of the config, in order to identify which directive leads to<br>
the problem being observed.<br>
<br>
That "tokens make a difference" is useful information. You config mentions<br>
tokens in more than one place.<br>
<br>
What code handles the tokens? Does it affect the headers that you see<br>
are wrong?<br>
<br>
Is the request made to "upstream" different, when a token is or is not<br>
included in the request to nginx?<br>
<br>
> Also "upstream" you mean the Origin for nginx? which is in my case is S3<br>
<br>
Yes, by "upstream" I mean "whatever nginx does proxy_pass to".<br>
<br>
> For example, this is a token-based request:<br>
> <br>
> Request URL:<br>
> <a href="https://example.com/hls/nickelback/Nickelback-Lullaby_960_540_9000000011.ts?token=st=1563581722~exp=1563668122~acl=/hls/nickelback/*~hmac=88ebce1fa4cca0a30b5cb5395bf3c04cde1018cbbfaa1c23506ebbf70e920e3a">
https://example.com/hls/nickelback/Nickelback-Lullaby_960_540_9000000011.ts?token=st=1563581722~exp=1563668122~acl=/hls/nickelback/*~hmac=88ebce1fa4cca0a30b5cb5395bf3c04cde1018cbbfaa1c23506ebbf70e920e3a</a><br>
> <br>
> Response header:<br>
<br>
> Cache-Control:<br>
> public, max-age=8640000, max-stale=0, public max-age=31536000<br>
<br>
That is not "exactly what you had in your add_header directive".<br>
<br>
And - it is also not the "private, max-age=3600, max-stale=0" that you<br>
reported initially. Is your upstream changing things? Or are you making<br>
different request each time, so you do not know what the response will be?<br>
<br>
Note that the first max-age=8640000 corresponds to 100 days. And your<br>
config has "secure_token_expires_time 100d;" which looks like it might<br>
be a candidate for where it comes from.<br>
<br>
And your config has "secure_token_query_token_expires_time 1h;", which<br>
might correspond to your original "max-age=3600".<br>
<br>
<br>
> and this is a request without token and all headers are correct:<br>
> <br>
> Request URL:<br>
> <a href="https://example.com/hls/nickelback/Nickelback-Lullaby_960_540_9000000000.ts">
https://example.com/hls/nickelback/Nickelback-Lullaby_960_540_9000000000.ts</a><br>
<br>
> Cache-Control:<br>
> public max-age=31536000<br>
<br>
That is also not "exactly what you had in your add_header directive". So<br>
I'd call it "not correct".<br>
<br>
I suggest - for testing purposes, remove as many lines of nginx config<br>
as you can. For example -- most of the add_header lines are not needed<br>
when testing with "curl", so get rid of them to make the response smaller<br>
and easier to analyse.<br>
<br>
But also -- the configuration that you have for the third-party modules<br>
that you use appears to be the source of the response headers that you<br>
don't expect. So it probably is not "upstream changed something".<br>
<br>
Cheers,<br>
<br>
        f<br>
-- <br>
Francis Daly        francis@daoine.org<br>
_______________________________________________<br>
nginx mailing list<br>
nginx@nginx.org<br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</div>
</span></font></div>
</div>
</body>
</html>