Welche bewährten Methoden verwenden Sie bei der Verwendung von NGinx?
Welche bewährten Methoden verwenden Sie bei der Verwendung von NGinx?
Antworten:
So kombinieren Sie HTTP- und HTTPS-Blöcke.
server {
listen 80;
listen 443 default ssl;
# other directives
}
Dies wurde als Antwort auf eine andere Frage gepostet. Sehen Sie hier .
Bei weitem sind die besten Tipps , die ich je gesehen auf seine pitfall Seite sind vom Autor: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
Im Allgemeinen ist die Verwendung von "if" eine schlechte Praxis (laut Autor von nginx). wenn möglich, besser try_file von error_page Direktiven anstelle von "if (-f ...)" verwenden
Wenn wir tip mit maintenence.html file und tip mit try_files kombinieren, erhalten wir:
Standort / { try_files /maintenance.html $ uri $ uri / @wordpress; }
Wenn die Wartung beendet ist, einfach mv maintenance.html von $ root.
if (-f ...) { return 503; }
und error_page 503 /maintenance.html
. Was denkst du?
Konfigurieren Sie nginx so, dass stärkere SSL-Verschlüsselungen verwendet werden. Standardmäßig ist SSLv2 aktiviert (was Sie nach Möglichkeit deaktivieren sollten).
ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl
Es ist oft effizienter, die map
Direktive anstelle von regulären Ausdrücken zu verwenden, wenn Sie den Stamm für übereinstimmende Unterdomänen wechseln:
server {
server_name mysite.tld ~^.+\.mysite\.tld$;
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;
}
Das empty_gif
Modul ist auch sehr nützlich, insbesondere wenn Sie Monitorantworten vom Webserver benötigen (mit nagios / monit / etc):
location /token {
empty_gif;
}
location /favicon.ico {
empty_gif;
}
location /img/1px.gif {
empty_gif;
}
access_log off;
für diese Standorte ist es gängige Praxis
Wir haben Nginx mit Chef eingerichtet und verwenden dieses Kochbuch, das Skripte für die Handhabung der Nginx- Konfiguration enthält, ähnlich wie Debian Apache2, sowie einige Beispielvorlagen mit vernünftigen Vorgaben.
Hier ist eine gute Methode zum Zurücksenden einer Wartungsseite. Alle Anforderungen werden neu geschrieben und der richtige http-Code wird zurückgegeben. (503 Dienst nicht verfügbar)
error_page 503 /maintenance.html;
location /
{
if (-f $document_root/maintenance.html)
{
return 503;
}
try_files $uri /index.php?$args;
}
location = /maintenance.html
{
rewrite ^ /maintenance.html break;
}
if
Aussage , wenn Sie es richtig verwenden - die docs sagen , dass if
s sicher sind , wenn Sie mache gerade return xxx;
.
location = /maintenance.html { break; }
notwendig?
Ab nginx 0.7.12 kann in Servername ein "" verwendet werden, um Anforderungen ohne "" Host "-Header abzufangen.
Sie können die folgenden Informationen als Anhaltspunkt für nicht definierte virtuelle Hosts verwenden.
server {
server_name _ "";
}
Ich habe auch vor einiger Zeit darüber geschrieben, wie man die gzip-Komprimierung mit nginx richtig handhabt, da ältere Browser möglicherweise nur Probleme mit einer pauschalen gzip-Anweisung haben. HTH.
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
Ich weiß nicht, ob es sich um eine bewährte Methode handelt, aber es ist auf jeden Fall ein guter Hack, um verschachtelte Bedingungen in Nginx zu erhalten. Hier ist ein Beispiel aus dem Nginx-Wiki .
location /xxxx/ {
set $test "";
if ($request_method = POST) {
set $test P;
}
if ($http_cookie ~* "CCCC=.+(?:;|$)" ) {
set $test "${test}C";
}
if ($test = PC) {
#rewrite rule goes here.
}
}
Wenn Sie für Unterdomänen, die von demselben Serverblock verarbeitet werden, zwischen http und https wechseln müssen, können Sie dazu Variablen verwenden. Möglicherweise ist dies nicht die effizienteste Methode, aber es funktioniert:
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;
}
}
Ich versuche immer, die root
Direktive im oberen Bereich des Serverblocks zu verwenden, damit ich die $document_root
Variable nutzen und die root
Direktive nie, aber niemals in einen Location-Block einfügen kann.
Die Fallstrick-Seite aus dem Nginx-Wiki enthält einige großartige Tipps zu Best Practices.
Wenn Sie Nginx als Proxy verwenden, kann es wichtig sein, die Timeout-Einstellungen anzupassen, um sicherzustellen, dass Sie keine Nginx-Drop-Verbindungen haben, bevor Ihre Anwendung damit fertig ist. Dies gilt insbesondere, wenn Sie mit einer stark frequentierten Anwendung arbeiten:
proxy_connect_timeout
proxy_send_timeout
Haben Sie sich hier umgesehen?