Wie kann ich if / else mit nginx conf angeben?

9

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;
}
user421936
quelle
Vielleicht möchten Sie einen Blick auf das Kartenmodul werfen .
gf_
2
Du hast etwas Seltsames und ziemlich Bedeutungsloses geschrieben. Versuchen Sie von vorne zu beginnen, welches Problem möchten Sie lösen
Alexey Ten

Antworten:

9

Das Nginx-Umschreibemodul verfügt zwar über eine ifDirektive (Beispiele finden Sie in der verknüpften Dokumentation), jedoch nicht else. Das Äquivalent für elsewäre alles, was nicht mit einem geändert wirdif .

Sie können ifin 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 ifInneren verwenden sollten, locationda es möglicherweise nicht wie gewünscht funktioniert (siehe If Is Evil ).

Esa Jokinen
quelle
3

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 serverBlock 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

Stefan Moch
quelle