vellezz.info

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

Leave a Reply