Ogólnie rzecz biorąc, użycie „if” jest złą praktyką (według autora nginx). jeśli to możliwe, lepiej użyć try_file dyrektyw error_page zamiast „if (-f ...)”
Łącząc wskazówkę z plikiem maintenence.html i wskazówkę z plikami try_files, otrzymujemy:
Lokalizacja / {
try_files /maintenance.html $ uri $ uri / @wordpress;
}
Po zakończeniu konserwacji po prostu mv Maintenance.html z $ root.
Nie jest to idealne rozwiązanie, ponieważ /maintenance.html będzie służyć jako odpowiedź 200. Prawdopodobnie chcesz, aby wyszukiwarki rozpoznawały, że strona konserwacji nie jest Twoją rzeczywistą witryną. Prawdopodobnie zechcesz zwrócić 503 (usługa tymczasowo niedostępna). Jedynym sposobem, w jaki mogę to zrobić, jest użycie if (-f ...) { return 503; }i error_page 503 /maintenance.html. Co myślisz?
Aaron Gibralter
11
Skonfiguruj nginx, aby używał silniejszych szyfrów SSL. Domyślnie protokół SSLv2 jest włączony (który należy wyłączyć, jeśli to możliwe).
Czy możesz podać prawdziwy przykład tego? Nadal nie do końca rozumiem, jak to jest przydatne.
The Pixel Developer
1
@ The Pixel Developer, jest naprawdę przydatny ze względu na szybkość. Nginx przechowuje dane pustego gifa w pamięci, więc nigdy nie musi się ładować z dysku.
Nieznany
5
również access_log off;dla tych lokalizacji jest powszechną praktyką
SaveTheRbtz
6
Skonfigurowaliśmy Nginx z Chefem, używając tej książki kucharskiej, która zawiera skrypty do obsługi konfiguracji nginx, podobnie jak Debian robi Apache2, a także niektóre przykładowe szablony z rozsądnymi ustawieniami domyślnymi.
Właściwie nie zgadzam się - dodałem komentarz do serverfault.com/questions/18994/nginx-best-practices/… . Zasadniczo chcesz zwrócić błąd 503, w przeciwnym razie boty i indeksujący będą myśleć, że strona konserwacji jest częścią Twojej witryny ... Nie ma nic złego w ifoświadczeniu, jeśli używasz go poprawnie - dokumenty mówią, że ifs są bezpieczne, jeśli po prostu robię return xxx;.
Aaron Gibralter
Czy też jest location = /maintenance.html { break; }konieczne?
Aaron Gibralter
4
Począwszy od nginx 0.7.12 i późniejszych, w nazwie nazwa_serwera można używać znaku „” do przechwytywania żądań bez nagłówka „Host”.
Można użyć następujących elementów jako catchall dla niezdefiniowanych hostów wirtualnych.
Czy twój przykład działa tylko dla żądań z niezdefiniowanym vhostem, czy będzie również działał z żądaniami z nieznanym (złym) vhostem?
Benoit
@Benoit to działa na wszystko, co nie jest zdefiniowane.
Nieznany
Czy „nazwa_serwera _ *” nie jest obsługiwana od wersji Nginx 0.7?
rahul286,
1
Pamiętaj, że jest to tylko częściowo prawda. „” wyłapuje MISSING nagłówek hosta, ale nie będzie przechwytywać żądania z nagłówkiem hosta, który nic nie pasuje. Jeśli chcesz mieć blok serwera typu catch-all, zobacz flagę default_server pod dyrektywą Listen.
Martin Fjordvald,
3
Jakiś czas temu napisałem również o tym, jak poprawnie obsługiwać kompresję gzip za pomocą nginx, ponieważ starsze przeglądarki mogą mieć problemy tylko z ogólną instrukcją gzip. HTH.
Umieściłbym to w kategorii „brzydka, ale czasami niezbędna praktyka” - na pewno nie jest to coś, do czego należy zachęcać.
womble
2
Jeśli potrzebujesz przełączać kontekstowo między http i https dla poddomen obsługiwanych przez ten sam blok serwera, możesz użyć do tego zmiennych. To może nie być najbardziej efektywny sposób na robienie rzeczy, ale działa:
server {
server mysite.tld ~^.+\.mysite\.tld$;
set $req_ssl = 0;
map $host $files {
default common;
mysite.tld common;
www.mysite.tld common;
admin.mysite.tld admin;
system.mysite.tld system;
*.mysite.tld users;
}
root /var/www/mysite/$files;
if ( $files = "admin" ){
set $req_ssl 1;
}
if ( $files = "common" ){
set $req_ssl 2;
}
if ( $scheme = http )
{
set $req_ssl $req_ssl.1;
}
if ( $scheme = https )
{
set $req_ssl $req_ssl.2;
}
if ($req_ssl = 1.1){
rewrite ^ https://$host$uri;
}
if ($req_ssl = 2.2){
rewrite ^ http://$host$uri;
}
}
Zawsze staram się używać rootdyrektywy w górnej części bloku serwera, aby móc skorzystać ze $document_rootzmiennej i nigdy, ale nigdy, nie uwzględniać rootdyrektywy w bloku lokalizacji.
Strona Pułapki z wiki Nginx zawiera kilka świetnych wskazówek na temat najlepszych praktyk.
Jeśli używasz nginx jako serwera proxy, dostosowanie ustawień limitu czasu może być ważne, aby upewnić się, że nie masz połączeń zrzucanych nginx przed zakończeniem aplikacji, zwłaszcza jeśli masz do czynienia z aplikacją o dużym ruchu:
Odpowiedzi:
Jak łączyć bloki HTTP i HTTPS.
Zostało to opublikowane jako odpowiedź na inne pytanie. Zobacz tutaj .
źródło
Jak dotąd najlepsze wskazówki, jakie kiedykolwiek widziałem, pochodzą od autora na stronie z pułapką: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
źródło
Ogólnie rzecz biorąc, użycie „if” jest złą praktyką (według autora nginx). jeśli to możliwe, lepiej użyć try_file dyrektyw error_page zamiast „if (-f ...)”
Łącząc wskazówkę z plikiem maintenence.html i wskazówkę z plikami try_files, otrzymujemy:
Po zakończeniu konserwacji po prostu mv Maintenance.html z $ root.
źródło
if (-f ...) { return 503; }
ierror_page 503 /maintenance.html
. Co myślisz?Skonfiguruj nginx, aby używał silniejszych szyfrów SSL. Domyślnie protokół SSLv2 jest włączony (który należy wyłączyć, jeśli to możliwe).
http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl
źródło
Często bardziej efektywne jest stosowanie
map
dyrektywy zamiast wyrażeń regularnych podczas przełączania katalogu głównego na pasujące subdomeny:źródło
empty_gif
Moduł jest również bardzo przydatna, zwłaszcza jeśli potrzebujesz odpowiedzi monitora z serwera WWW (przy użyciu Nagios / Monit / etc):źródło
access_log off;
dla tych lokalizacji jest powszechną praktykąSkonfigurowaliśmy Nginx z Chefem, używając tej książki kucharskiej, która zawiera skrypty do obsługi konfiguracji nginx, podobnie jak Debian robi Apache2, a także niektóre przykładowe szablony z rozsądnymi ustawieniami domyślnymi.
źródło
Oto dobry sposób na zwrócenie strony konserwacji. Wszystkie żądania są przepisywane i zwracany jest prawidłowy kod HTTP. (503 Usługa niedostępna)
źródło
if
oświadczeniu, jeśli używasz go poprawnie - dokumenty mówią, żeif
s są bezpieczne, jeśli po prostu robięreturn xxx;
.location = /maintenance.html { break; }
konieczne?Począwszy od nginx 0.7.12 i późniejszych, w nazwie nazwa_serwera można używać znaku „” do przechwytywania żądań bez nagłówka „Host”.
Można użyć następujących elementów jako catchall dla niezdefiniowanych hostów wirtualnych.
źródło
Jakiś czas temu napisałem również o tym, jak poprawnie obsługiwać kompresję gzip za pomocą nginx, ponieważ starsze przeglądarki mogą mieć problemy tylko z ogólną instrukcją gzip. HTH.
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
źródło
Nie wiem, czy jest to najlepsza praktyka, ale zdecydowanie fajny hack, aby uzyskać zagnieżdżone warunki w Nginx. Oto próbka z wiki nginx .
źródło
Jeśli potrzebujesz przełączać kontekstowo między http i https dla poddomen obsługiwanych przez ten sam blok serwera, możesz użyć do tego zmiennych. To może nie być najbardziej efektywny sposób na robienie rzeczy, ale działa:
źródło
Zawsze staram się używać
root
dyrektywy w górnej części bloku serwera, aby móc skorzystać ze$document_root
zmiennej i nigdy, ale nigdy, nie uwzględniaćroot
dyrektywy w bloku lokalizacji.Strona Pułapki z wiki Nginx zawiera kilka świetnych wskazówek na temat najlepszych praktyk.
źródło
Jeśli używasz nginx jako serwera proxy, dostosowanie ustawień limitu czasu może być ważne, aby upewnić się, że nie masz połączeń zrzucanych nginx przed zakończeniem aplikacji, zwłaszcza jeśli masz do czynienia z aplikacją o dużym ruchu:
źródło
Spojrzałeś tutaj?
http://www.directadmin.com/forum/showthread.php?p=137288
źródło