serwowanie plików statycznych na nginx
Jun
14
Po co to komu?
Ano po to, że unikamy doklejania ciastek (Same Origin Policy) do requestów o pliki statyczne, które w tym przypadku są całkowicie zbyteczną informacja przesyłaną w obydwie strony. Mniej danych, mniejszy ruch, więcej drzew.
A więc do dzieła…
Edytujemy /etc/nginx/avaliable-sites/<domena>.conf, lub inna lokalizacja w zależności od dystrybucji chodzi o konfigurację nginxa pod konkretną domenę.
server {
listen 80;
server_name static.<domena>;
access_log <logs_dir>static.<domena>.access.log;
error_log <logs_dir>static.<domena>.error.log;
more_set_headers 'Server: Static';
location / {
root <root_path>;
sendfile on;
sendfile_max_chunk 1m;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
expires max;
add_header Pragma public;
add_header Cache-Control "public";
location ~* \.(eot|ttf|woff|woff2)$ {
add_header Access-Control-Allow-Origin *;
}
}
}
Kilka słów wyjaśnienia konfiguracji:
- sendfile on – włączenie tej dyrektywy eliminuje etap kopiowania danych do bufora i umożliwia bezpośrednie kopiowanie danych z jednego deskryptora do innego,
- sendfile_max_chunk 1m – zapobiega jednemu szybkiemu połączeniu z całkowitym zajmowaniem procesu roboczego, ogranicza ilość danych przesyłanych w pojedynczym wywołaniu w tym wypadku do 1MB,
- tcp_nopush on – umożliwia wysyłanie nagłówków odpowiedzi HTTP w jednym pakiecie zaraz po otrzymaniu fragmentu danych przez sendfile,
- tcp_nodelay on – pozwala na pominięcie algorytmu Nagle, który konsoliduje wiele małych pakietów na większy i wysyła pakiet z opóźnieniem 200 ms. Obecnie w przypadku dużych plików statycznych dane mogą być wysyłane natychmiast bez względu na rozmiar pakietu.
- keepalive_timeout 65 – ustawia timeout dla keepalive
- zagnieżdżone location ustawia w nagłówku Access-Control-Allow-Origin *
- expires max, add_header Pragma public, add_header Cache-Control “public” – kontrola cache przeglądarki dla plików – nie dotyczy wpisu, więc się nie będę rozwodził.
OK, to w sumie możemy przetestować…
service nginx configtest service nginx reload
Bibliografia:
- Algorytm Nagle – https://en.wikipedia.org/wiki/Nagle%27s_algorithm
- Same-origin policy – https://en.wikipedia.org/wiki/Same-origin_policy