nginx add_header 在proxy_pass返回非200时失效

在 nginx 配置里加了一条 add_header 的配置,测试发现在 状态码 400, 401,500 下并不会输出已配置的头,而 200 201 302 状态下却是正常的。
原因是:
add_header 配置只有在 200, 201, 204, 206, 301, 302, 303, 304, or 307 这些状态下才有效。
这是个特殊限制,因为 add_header 在一些错误状态码下会产生意外的作用,比如添加一个 expires 1y 后,会让错误状态意外地缓存超长的时间,导致意外事故。
解决办法:
在 nginx 1.7.5 版本之后,可以给 add_header 的值 添加一个 always 参数,这样就会总是可以输出配置的头部。
比如AJAX跨域请求:

add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers Authorization,X-Requested-With,Content-Type,Access-Token always;
add_header Access-Control-Allow-Methods  * always;

这就是出问题的原配置:

location ^~ /v2/ {
    rewrite ^/v2/(.*)$ /$1 break;

    proxy_http_version 1.1;
    proxy_set_header Connection "keep-alive";
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout      90;
    proxy_send_timeout         3600;
    proxy_read_timeout         3600;
    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers X-Requested-With,Content-Type,token;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    add_header Access-Control-Max-Age 1000;
    add_header Access-Control-Expose-Headers Date;
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Max-Age' 2592000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        return 200;
    }
    #if (!-f $request_filename) {
            proxy_pass http://swoole9600;
    #}
}