Desativar autenticação para o método HTTP OPTIONS (solicitação de comprovação) no Nginx

3

Meu problema é exatamente o mesmo descrito aqui: Desativar autenticação para o método HTTP OPTIONS (solicitação de comprovação) . Estou tentando usar senhas CORS e HTTP ao mesmo tempo. Quando o navegador vir um OPTIONS saltado (código de status 401), por algum motivo, ele verificará imediatamente os cabeçalhos do CORS (que estarão ausentes) e rejeitará o pedido.

Aqui está minha configuração:

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;
}
    
por cleong 12.06.2015 / 13:23

2 respostas

2

Aqui está a solução que eu criei. Ele insere a duplicação de todas as diretivas add_header do CORS.

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;
}
    
por 12.06.2015 / 14:47
2

Encontrei uma solução mais limpa que permite ao nó gerenciar a solicitação:

Coloque a seguinte configuração dentro de "location" e remova qualquer auth_basic do servidor. Isso vai funcionar.

  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;
    }
  }
    
por 09.02.2018 / 16:34

Tags