<div dir="ltr">I recently implemented something similar, and one issue I ran in to was that $sent_http_content_type doesn't always map to a mime type. For example, "Content-Type: text/html" would match mime type text/html, but "Content-Type: text/html; charset=utf-8" would match only the default. You need to all Content-Type header variants to your map for it to work as expected, or use a regular expression.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Sep 3, 2018 at 10:13 PM petecooper <<a href="mailto:nginx-forum@forum.nginx.org">nginx-forum@forum.nginx.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello.<br>
I am attempting to use `expires` on Nginx 1.15.3 to define the expiry of<br>
files on a per MIME type basis.<br>
<br>
I have used [1] as a base, and constructed the following `map` in the `http`<br>
section of a `include`-d `server` block (domain sanitised):<br>
<br>
    map $sent_http_content_type $www_example_com_expires {<br>
        default 1M;<br>
        application/atom+xml 1h;<br>
        application/javascript 1M;<br>
        application/json 0s;<br>
        application/ld+json 0s;<br>
        application/manifest+json 1w;<br>
        application/rdf+xml 1h;<br>
        application/rss+xml 1h;<br>
        application/schema+json 0s;<br>
        application/x-javascript 1M;<br>
        application/xml 0s;<br>
        font/woff 1M;<br>
        image/gif 1M;<br>
        image/jpeg 1M;<br>
        image/png 1M;<br>
        image/svg+xml 1M;<br>
        image/vnd.microsoft.icon 1M;<br>
        image/webp 1M;<br>
        image/x-icon 1M;<br>
        text/cache-manifest 0s;<br>
        text/css 1M;<br>
        text/html 0s;<br>
        text/javascript 1M;<br>
        text/x-cross-domain-policy 1w;<br>
        text/xml 0s;<br>
        video/mp4 1M;<br>
        video/webm 1M;<br>
    }<br>
<br>
Later on, after the `map` is defined, I call it using `expires` in a<br>
`server` block:<br>
<br>
    server {#IPv4 and IPv6, https, PHP fastcgi, check <a href="https://cipherli.st" rel="noreferrer" target="_blank">https://cipherli.st</a><br>
for latest ciphers<br>
        access_log /var/log/nginx/www.example.com.access.log ipscrubbed;<br>
        add_header Access-Control-Allow-Origin "https://*.<a href="http://example.com" rel="noreferrer" target="_blank">example.com</a>";<br>
        add_header Content-Security-Policy "default-src 'self'; connect-src<br>
'self' <a href="https://api.github.com" rel="noreferrer" target="_blank">https://api.github.com</a>; font-src 'self'; img-src 'self' data: *<br>
https://*; media-src 'self' * https://*; style-src 'self' 'unsafe-in$<br>
        add_header Expect-CT "max-age=0;<br>
report-uri=<a href="https://example.com/expect-ct-report" rel="noreferrer" target="_blank">https://example.com/expect-ct-report</a>";<br>
        add_header Feature-Policy "camera 'self'; geolocation 'none';<br>
microphone 'none'; midi 'none'; payment 'none'";<br>
        add_header Referrer-Policy strict-origin;<br>
        add_header Strict-Transport-Security "max-age=15768000;<br>
includeSubDomains; preload";<br>
        add_header X-Content-Type-Options nosniff;<br>
        add_header X-Frame-Options DENY;<br>
        add_header X-XSS-Protection "1; mode=block";<br>
        error_log /var/log/nginx/www.example.com.error.log crit;<br>
        etag off;<br>
        expires $www_example_com_expires;<br>
        index index.html index.php;<br>
        listen [::]:443 http2 ssl;<br>
        listen 443 http2 ssl;<br>
        [...]<br>
    }<br>
<br>
My config passes the `nginx -t` self-test with no errors, and I can restart<br>
Nginx without issue.<br>
<br>
In the browser inspector, all MIME types are assigned a 1 month expiry, as<br>
if they're inheriting the `default` value from the map. Example headers for<br>
a .php file:<br>
<br>
    Date: Mon, 03 Sep 2018 20:09:30 GMT<br>
    Expires: Wed, 03 Oct 2018 20:09:30 GMT<br>
<br>
If I remove the `expires` directive, the 'Expires:' header is not shown, so<br>
`expires` is doing *something*.<br>
<br>
I suspect my syntax is wrong, and I would be very grateful for any feedback<br>
-- I am particularly interested a clue or pointer to aid my research into<br>
why this is not working.<br>
<br>
Thank you for your attention and interest.<br>
<br>
[1] <a href="http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires" rel="noreferrer" target="_blank">http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires</a><br>
<br>
Posted at Nginx Forum: <a href="https://forum.nginx.org/read.php?2,281087,281087#msg-281087" rel="noreferrer" target="_blank">https://forum.nginx.org/read.php?2,281087,281087#msg-281087</a><br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</blockquote></div>