%20no%20Nginx.png)
Meu problema é exatamente o mesmo descrito aqui:Desativar autenticação para método HTTP OPTIONS (solicitação de simulação). Estou tentando usar senhas CORS e HTTP ao mesmo tempo. Quando o navegador vê OPTIONS devolvidas (código de status 401), por algum motivo ele verifica imediatamente os cabeçalhos CORS (que estarão ausentes) e rejeita a solicitação.
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;
}
Responder1
Aqui está a solução que encontrei. No entanto, ele resolve 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;
}
Responder2
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 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;
}
}
Responder3
Seguindo informações emlimit_except/if bloqueia problemas, sugiro usar map
:
map $request_method $auth_basic_value {
default "Restricted";
"OPTIONS" "off";
}
location / {
auth_basic $auth_basic_value;
}
Lembre-se de que, se você tiver algum try_files
nesse local, que possa reescrever a consulta para outro local, também poderá ser necessário definir auth_basic $auth_basic_value
.