我需要在我的nginx配置中将CORS标头添加到虚拟主机。 我只想在某些情况下显示标题,但我无法适当地使工作成为我的 if 块。 我希望始终添加 if 块内的标头,但没有添加任何标头,包括 if 块外部的标头。 这是我的配置:
location /images/ {
fastcgi_pass localhost:9000;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param HTTPS $https if_not_empty;
set $cors "test";
set $mytest "true";
add_header 'Test2' "$mytest";
if ($cors = "test") {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
}
}
你可以做的是使用map
指令替换:
map $cors $cors_origin {
"test" "$http_origin";
}
map $cors $cors_credentials {
"test" "true";
}
map $cors $cors_methods {
"test" "GET, POST, PUT, DELETE, OPTIONS";
}
map $cors $cors_headers {
"test" "Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With";
}
server {
...
location /images/ {
fastcgi_pass localhost:9000;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param HTTPS $https if_not_empty;
set $cors "test";
add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Credentials' $cors_credentials always;
add_header 'Access-Control-Allow-Methods' $cors_methods always;
add_header 'Access-Control-Allow-Headers' $cors_headers always;
}
}
如果$cors
变量有"test"
以外的任何其他值,则map
替换的结果将是一个空字符串,nginx根本不会设置相应的标头。