Deaktivieren Sie die Authentifizierung für die HTTP OPTIONS-Methode (Preflight-Anforderung) in Nginx

Deaktivieren Sie die Authentifizierung für die HTTP OPTIONS-Methode (Preflight-Anforderung) in Nginx

Mein Problem ist genau das gleiche wie hier beschrieben:Authentifizierung für HTTP OPTIONS-Methode deaktivieren (Preflight-Anforderung). Ich versuche, CORS- und HTTP-Passwörter gleichzeitig zu verwenden. Wenn der Browser eine zurückgewiesene OPTIONS-Nachricht (Statuscode 401) sieht, sucht er aus irgendeinem Grund sofort nach den CORS-Headern (die fehlen) und lehnt die Anfrage ab.

Hier ist meine Konfiguration:

location /api/ {
    proxy_pass http://127.0.0.1:14000;
    proxy_set_header Host $host;
    add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
    add_header Access-Control-Allow-Origin $http_origin;
    add_header Access-Control-Allow-Headers "Authorization, Content-Type";
    add_header Access-Control-Allow-Credentials true;
    auth_basic            "Restricted Area";
    auth_basic_user_file  /var/www/admin.htpasswd;
}

Antwort1

Hier ist die Lösung, die ich gefunden habe. Sie vermeidet jedoch die Duplizierung aller CORS add_header-Direktiven.

location /api/ {
    proxy_pass http://127.0.0.1:14000;
    proxy_set_header Host $host;
    add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
    add_header Access-Control-Allow-Origin $http_origin;
    add_header Access-Control-Allow-Headers "Authorization, Content-Type";
    add_header Access-Control-Allow-Credentials true;
    if ($request_method = OPTIONS) {
        add_header Content-Length 0;
        add_header Content-Type text/plain;
        add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Headers "Authorization, Content-Type";
        add_header Access-Control-Allow-Credentials true;
        return 200;
    }
    auth_basic            "Restricted Area";
    auth_basic_user_file  /var/www/admin.htpasswd;
}

Antwort2

Ich habe eine sauberere Lösung gefunden, mit der der Knoten die Anforderung verwalten kann:

Fügen Sie die folgende Konfiguration in „Standort“ ein und entfernen Sie alle Auth_Basic-Elemente vom Server. Das funktioniert.

  location / {
    # Your node proxy configuration for example #

    # Make options requests work #
    limit_except OPTIONS {
      auth_basic "Restricted access zone";
      auth_basic_user_file /etc/nginx/pass/protected;
    }
  }

Antwort3

Nachfolgende Informationen unterlimit_except/if blockiert Probleme, ich würde folgendes vorschlagen map:

map $request_method $auth_basic_value {
    default "Restricted";
    "OPTIONS" "off";
}


location / {
        auth_basic $auth_basic_value;
}

Bedenken Sie, dass try_filesSie möglicherweise auch Folgendes festlegen müssen, wenn Sie an diesem Speicherort welche haben, die die Abfrage an einen anderen Speicherort umschreiben auth_basic $auth_basic_value.

verwandte Informationen