ist es möglich so etwas mit nginx zu machen?
if ( $http_user_agent = "wget" ){
server {
listen 11.11.11.11:1111;
root /website1/;
server_name example.com www.example.com;
else
server {
listen 22.22.22.22:22222;
root /website2/;
server_name example2.com www.example2.com;
}
linux
nginx
configuration
user421936
quelle
quelle
Antworten:
Das Nginx-Umschreibemodul verfügt zwar über eine
if
Direktive (Beispiele finden Sie in der verknüpften Dokumentation), jedoch nichtelse
. Das Äquivalent fürelse
wäre alles, was nicht mit einem geändert wirdif
.Sie können
if
in einem verwenden,server { }
aber nicht umgekehrt. Sie würden nicht einmal die Bedingung in Ihrem if vor einer Anfrage vergleichen lassen, die den Server bereits benötigt. Dort können Sie Inhalte nur bereitstellen, wenn der Benutzeragent vorhanden ist (oder nicht)wget
.Beachten Sie auch, dass Sie es nicht im
if
Inneren verwenden sollten,location
da es möglicherweise nicht wie gewünscht funktioniert (siehe If Is Evil ).quelle
In dem angegebenen Formular funktioniert es nicht: Das Testen des HTTP-Benutzeragenten impliziert, dass die Anforderung bereits empfangen wurde. Dies ist nur möglich, wenn bereits ein
server
Block definiert wurde. Möchten Sie wirklich neue Server starten, abhängig von der User-Agent-Zeichenfolge einer Anfrage, die Sie an einer anderen Stelle erhalten haben?Wenn Sie nur unterschiedliche Inhalte bereitstellen, abhängig von Teilen der Anforderung wie dem User-Agent auf unterschiedliche Pfade usw. umleiten möchten, ist dies möglich, z . B. mit http://nginx.org/en/docs/http/ngx_http_rewrite_module. html
quelle