|
|
Opublikowano 07.11.2018 10:05:15
|
|
|

BBS lub strony często mają tylko ty masz uprawnienia do zobaczenia tej strony lub pobrania tego zasobu, kilka dni temu odwiedziłem serwer nginx, jak zaimplementować tę kontrolę plików, używając x-sendfile.
1. Czym jest X-Sendfile?
X-Sendfile to mechanizm, który przekazuje żądania pobrania plików z aplikacji backendowej do front-end serwera WWW w celu przetwarzania, co może znacząco poprawić wydajność serwera, eliminując presję programu backendowego na odczyt i przetwarzanie pliku, zwłaszcza przy dużych plikach pobierania.
X-Sendfile jest implementowany za pomocą konkretnego nagłówka HTTP: określającego adres pliku w nagłówku X-Sendfile, aby ogłosić go serwerowi front-endu. Gdy serwer WWW wykryje ten nagłówek wysłany przez backend, ignoruje inne wyjścia z backendu i używa własnych komponentów (w tym optymalizacji, takich jak nagłówki pamięci podręcznej i połączenia breakpointów), aby przesłać plik do użytkownika.
Jednak przed użyciem X-Sendfile ważne jest, aby zrozumieć, że nie jest to standardowa funkcja i jest domyślnie wyłączona przez większość serwerów WWW. Różne serwery WWW mają różne implementacje, w tym różne formaty nagłówków X-Sendfile. Jeśli zostanie źle skonfigurowany, użytkownicy mogą pobrać plik o rozmiarze 0 bajtów.
Użycie X-Sendfile pozwala na pobieranie plików z katalogów nie-webowych (np. /root/), nawet jeśli plik jest wyłączony w ramach ochrony .htaccess.
Różne serwery WWW implementują różne nagłówki HTTP
Nagłówek SENDFILE | Używany serwer WWW | | X-Sendfile | Apache, Lighttpd v1.5, Cherokee | | X-LIGHTTPD-send-file | Lighttpd v1.4 | | X-Accel-Redirect | Nginx, Czirokezi |
Minusem używania X-SendFile jest utrata kontroli nad mechanizmem transferu plików. Na przykład, jeśli chcesz wykonać określone działania po pobraniu pliku, na przykład pozwolić użytkownikowi pobrać plik tylko raz, ten X-Sendfile nie będzie mógł tego zrobić, ponieważ skrypt php w tle nie wie, czy pobranie się zakończyło sukcesem.
2. Jak używać NGINX?
Nginx domyślnie obsługuje tę funkcję i nie wymaga ładowania dodatkowych modułów. Po prostu implementacja jest trochę inna, a nagłówek HTTP, który trzeba wysłać, to X-Accel-Redirect. Dodatkowo musisz ustawić następujące ustawienia w pliku konfiguracyjnym
internal oznacza, że ta ścieżka jest dostępna tylko w Nginx i nie może być bezpośrednio dostępna przez przeglądarkę, aby zapobiec nieautoryzowanym pobieraniom.
3. Jak korzystać z programów PHP?
Jeśli dodasz nagłówek X-Accel-Redirect, użytkownik pobierze plik przez ścieżkę /game. Nasza kontrola uprawnień do plików została zaimplementowana.
Oficjalne wprowadzenie do dokumentacji:Logowanie do linku jest widoczne.
|
Poprzedni:Miłość, małżeństwo i rodzina, pierwsza połowa miesiąca + 18 czerwcaNastępny:CF to pierwsza perspektywa całej sieci, która sama się celuje i stabilizuje przez miesiąc
|