Wie schreibe ich eine „oder“-Anweisung richtig in einen Nginx-Standortblock?

Wie schreibe ich eine „oder“-Anweisung richtig in einen Nginx-Standortblock?

Ich verwende Nginx unter CentOS 7. Ich möchte einen Cache-Kontrollheader für Dateien hinzufügen, die mit einer bestimmten Erweiterung enden oder die eine Zeichenfolge "/image/" in der URL enthalten. Ich habe Folgendes versucht

  location / {
    proxy_pass http://scale; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    if ($request_uri ~* ".(ico|gif|jpe?g|png)$") | ($request_uri ~* "/image/") {
      expires 60d;
      access_log off;
      add_header Pragma public;
      add_header Cache-Control "public";
      break;
    }
  }

aber beim Neustart des Servers bekomme ich eine

invalid condition "$request_uri" in /etc/nginx/conf.d/scale.conf:16

Fehler. Wenn ich „ | ($request_uri ~* „/image/“)“ aus der problematischen Zeile entferne, wird alles wieder in Ordnung gebracht, aber dann kann ich nichts mehr mit dem abgleichen, was ich möchte. Wie schreibe ich eine richtige „or“-Anweisung in meine Konfigurationsdatei?

Antwort1

In nginx,wenn es böse istWenn Sie es aber wirklich so machen möchten, gehen Sie folgendermaßen vor:

if ($request_uri ~* "($\/image\/.*)|(.*\.(ico|gif|jpe?g|png)$)") {

Kombinieren Sie im Wesentlichen einfach die regulären Ausdrücke.

verwandte Informationen