nginx-header Expires und reverse-proxy funktioniert nicht
Ich versuche zu konfigurieren, einen Expires-header für statische Dateien auf nginx (0.7.67). Die statischen Dateien werden serviert von einem Golang-reverse-proxy:
location /rev/{
proxy_pass http://localhost:8910/;
proxy_redirect off;
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 https;
# I am putting this here, because nginx only uses one location. Is this OK?
location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
expires 30d;
}
}
Wenn ich es auf diese Weise ist es kein Fehler, Neustart von nginx, aber die statischen Dateien werden nicht mehr bedient.
Ich schon versucht die folgende Konstellation, aber es funktioniert nicht:
server {
...
location /rev/{
proxy_pass http://localhost:8910/;
proxy_redirect off;
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 https;
}
location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
expires 30d;
}
}
Frage: Wie kann ich einen expires-header für statische Dateien, die sich auf eine Anwendung hinter einem reverse-proxy?
- Ich Frage mich, warum dies nicht auf serverfault?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur so, ich habe es geschafft, zu erreichen, war es auf diese Weise:
Hoffe, es hilft!
Vom Lesen der docs an http://wiki.nginx.org/HttpProxyModule finde ich Erwähnungen über die
proxy_cache_*
Richtlinien zu erreichen, die eine ähnliche Funktionalität, obwohl es nicht genau das, was Sie suchen. Die docs erklären:So scheint es, dass die Einstellung der
Expires
- header auf der proxy-Ebene möglicherweise nicht unterstützt oder empfohlen.Habe ich das Gefühl, dass Sie sollten die Einstellung der
Expires
header-up-stream. Diese kann getan werden, Gehen Sie (leicht hackishly, ich bin sicher, es ist ein schöner Weg, um fix Zeit-zone, in der saite), indem der header in der http.ResponseWriter im http-handler-Funktion:Wie bereits erwähnt, werden diese ersetzt
UTC
mitGMT
im Ausgabe-string. Ich bin mir nicht sicher, ob es nötig ist, aber ich habe bemerkt, diese scheint die häufigste form in jedem HTTP-Header habe ich geprüft. Ich habe nicht nachgeschlagen, das spec um zu sehen, obUTC
wäre gleichermaßen akzeptiert von den Browsern, aber ich sehe nicht, warum nicht.Sorry, es ist nicht wirklich ein Nginx Antwort, hoffentlich hilft es!
Ich denke, die
expires
Richtlinie oderadd_header
ist, was Sie zurück an den browser.Wenn Sie blind Zwischenspeichern möchten, was kommt aus dem backend, die Sie ausprobieren können:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid