Nur ein Hinweis, dass dies bei einem Magento-Setup nicht funktioniert. Ich untersuche immer noch die Gründe, aber ich denke, es hat etwas mit der Abfragezeichenfolge zu tun.
Jauder Ho
location / wordpress muss nützlich sein, wenn Sie wordpress im Unterverzeichnis "wordpress" haben. Was ist, wenn wir WordPress im Web-Root "/" haben?
rahul286
Antworten:
21
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 .
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.
Dies ist nicht ideal, da /maintenance.html als 200-Antwort bereitgestellt wird. Sie möchten wahrscheinlich, dass Suchmaschinen erkennen, dass die Wartungsseite nicht Ihre eigentliche Website ist. Möglicherweise möchten Sie einen 503 zurückgeben (Dienst vorübergehend nicht verfügbar). Der einzige Weg, wie ich herausfinden kann, ist mit einem if (-f ...) { return 503; }und error_page 503 /maintenance.html. Was denkst du?
Aaron Gibralter
11
Konfigurieren Sie nginx so, dass stärkere SSL-Verschlüsselungen verwendet werden. Standardmäßig ist SSLv2 aktiviert (was Sie nach Möglichkeit deaktivieren sollten).
Es ist oft effizienter, die mapDirektive anstelle von regulären Ausdrücken zu verwenden, wenn Sie den Stamm für übereinstimmende Unterdomänen wechseln:
Können Sie ein reales Beispiel dafür liefern? Ich verstehe immer noch nicht ganz, wie nützlich es ist.
Der Pixel-Entwickler
1
@ The Pixel Developer, es ist nur wirklich nützlich für die Geschwindigkeit. Nginx speichert die Daten für ein leeres GIF im Speicher, sodass sie niemals von der Festplatte geladen werden müssen.
Unbekannter
5
Auch access_log off;für diese Standorte ist es gängige Praxis
SaveTheRbtz
6
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)
Eigentlich stimme ich nicht zu - ich habe einen Kommentar zu serverfault.com/questions/18994/nginx-best-practices/… hinzugefügt . Grundsätzlich Sie einen Fehler 503 oder auch Bots und Indexer zurückkehren werden denken , Ihre Wartungsseite Teil Ihrer tatsächlichen Website ist ... Es ist nichts falsch mit einer ifAussage , wenn Sie es richtig verwenden - die docs sagen , dass ifs sicher sind , wenn Sie mache gerade return xxx;.
Aaron Gibralter
Auch ist location = /maintenance.html { break; }notwendig?
Aaron Gibralter
4
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.
Funktioniert Ihr Beispiel nur für Anfragen mit einem undefinierten vhost oder auch für Anfragen mit einem unbekannten (falschen) vhost?
Benoit
@Benoit es funktioniert für alles, was nicht definiert ist.
Unbekannt
Wird "Servername _ *" ab Nginx 0.7 nicht unterstützt?
rahul286
1
Bitte beachten Sie, dass dies nur teilweise zutrifft. "" fängt einen MISSING Host - Header ab, aber es wird keine Anfrage mit einem Host - Header abgefangen, der nicht mit irgendetwas übereinstimmt. Wenn Sie einen Catch-All-Server-Block wünschen, sehen Sie das default_server-Flag unter der listen-Direktive.
Martin Fjordvald
3
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.
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.
}
}
Ich würde das in die Kategorie "hässliche, aber gelegentlich notwendige Übung" einordnen - sicherlich nicht etwas, das ermutigt werden sollte.
womble
2
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 rootDirektive im oberen Bereich des Serverblocks zu verwenden, damit ich die $document_rootVariable nutzen und die rootDirektive 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:
Antworten:
So kombinieren Sie HTTP- und HTTPS-Blöcke.
Dies wurde als Antwort auf eine andere Frage gepostet. Sehen Sie hier .
quelle
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/
quelle
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:
Wenn die Wartung beendet ist, einfach mv maintenance.html von $ root.
quelle
if (-f ...) { return 503; }
underror_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).
http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl
quelle
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:quelle
Das
empty_gif
Modul ist auch sehr nützlich, insbesondere wenn Sie Monitorantworten vom Webserver benötigen (mit nagios / monit / etc):quelle
access_log off;
für diese Standorte ist es gängige PraxisWir 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.
quelle
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)
quelle
if
Aussage , wenn Sie es richtig verwenden - die docs sagen , dassif
s sicher sind , wenn Sie mache geradereturn 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.
quelle
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
quelle
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 .
quelle
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:
quelle
Ich versuche immer, die
root
Direktive im oberen Bereich des Serverblocks zu verwenden, damit ich die$document_root
Variable nutzen und dieroot
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.
quelle
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:
quelle
Haben Sie sich hier umgesehen?
http://www.directadmin.com/forum/showthread.php?p=137288
quelle