Odpowiedzi:
Wolę zrobić pełniejszy nagłówek pamięci podręcznej, oprócz kilku rozszerzeń plików. „?” przedrostek jest znakiem „nie przechwytującym”, nginx nie utworzy 1 $. Pomaga zredukować niepotrzebne obciążenie.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
zestawem, w takim przypadku należy dodać dyrektywy do tego bloku. (Wiem, że to 2 lata później, ale dla przyszłych obywateli)
Nie mam wystarczającej reputacji, aby skomentować, dlaczego zaakceptowana odpowiedź spowodowałaby, że pliki nie będą się już wyświetlać, ale wymyśliłem to i chciałbym pomóc!
Krótka wersja:
Upewnij się, że masz katalog główny dla swojego bloku lokalizacji na obrazach, jeśli nie masz globalnego zestawu!
Długa wersja poniżej:
Przede wszystkim moja metoda implementacji tego rozwiązania była bardzo podobna do tej odpowiedzi , w której piszesz regułę (jak w zaakceptowanej odpowiedzi):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
do pliku img-cache.conf
a następnie dołącz ten plik do swojej server {...}
dyrektywy.
Mój przykład somesite.com w folderze dostępnym na stronach:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
W ten sposób możesz dodać blok lokalizacji buforowania obrazu do wielu witryn, które mogą być uruchomione.
Po drugie, mam sytuację, w której mój / var / www / zawiera dwa foldery, na które zezwalam jako public_html - bezpieczny i szkoleniowy, więc muszę tworzyć określone bloki lokalizacji w dyrektywie serwera mojej witryny, wyróżniając te foldery.
W związku z tym nie mam globalnego katalogu głównego .
Kiedy tworzysz bloki lokalizacji obrazu, być może nie udostępniasz im katalogu głównego, z którego można szukać obrazów!
Moje rozwiązanie polegało wtedy na:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/secure;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
.conf
. Właściwy folder nginx/1.14.0 (Ubuntu)
wydaje się być /etc/nginx/snippets/
.
Możesz także ustawić wygasanie na maksimum. Oto dyrektywa, której używam dla css i js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Wszystkie wyżej wymienione rozwiązania będą odmawiać możliwości posiadania różnych aliasów dla różnych ścieżek. Również ze względu na posiadanie różnych dat ważności pamięci podręcznej w jednym miejscu, powinieneś użyć mapy nginx w następujący sposób.
...
# Expires mappings
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript 7d;
~image/ max;
}
...
server {
listen ...;
expires $expires;
location /assets/ {
# It is now possible to serve some resources from different path
alias /var/www/my_other_path/
}
# and have them all have same expirations
location / {
try_files $uri $uri/ /index.html;
}
...
}
Off
wyłącza buforowanie, epoch
(dla epoki uniksowej) powoduje, że zasoby są zawsze ponownie pobierane, max
ustawia datę na maksymalną wartość przeglądarki.
~ Image / pasuje do dowolnego typu obrazu.
Więcej informacji na temat map nginx na stronie http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
jest "text/css;charset=UTF-8"
powyżej wyrażenie zawiedzie.
Jeśli masz jedno miejsce, w którym znajdują się wszystkie pliki statyczne, coś takiego zrobi ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
Zaakceptowana odpowiedź spowodowała, że nginx nie znalazł żadnego z moich plików statycznych. Nie bardzo wiem dlaczego, ale jest to prosta alternatywa.
/static
folder (cokolwiek ustawisz w lokalizacji) na końcu aliasu (zaraz po tym .../files
w przykładzie).
Ponieważ jest to bardzo stary wątek i znalazłem aktualny niesamowity samouczek.
Być może chcesz to sprawdzić
Jak zaimplementować buforowanie przeglądarki za pomocą modułu nagłówka Nginx w systemie Ubuntu 16.04