当proxy_pass用于S3托管文件时,将忽略带有add_header的Nginx|headers



我有一个Nginx配置,我从AWS S3 bucket中获取某些文件,比如来自*.my.api.com/file.js的调用将从S3中的X文件夹中获取文件。

我有一个特殊的域(如xx.my.api.com(,我将为其添加

  • 缓存控制";没有存储,没有缓存">
  • Pragma"无缓存">

标头,对于*.my.api.com的其余部分,标头将是默认的(现在是cache-control: public(。

在我的本地环境中,文件托管在我的机器上,因此头文件设置正确。但是,在生产中,标头默认为cache-control: public

我读过这样的答案,说它应该没有问题,但它对我不起作用。

我做错了什么吗?它与AWS上托管的文件有关吗?

我的Nginx配置如下:

server {
listen 80;
root /var/xyz/public;
index index.html index.htm;
server_name my.api.com *.my.api.com;
add_header Access-Control-Allow-Origin "*";
if ($http_host ~* "^(.*).my.api.com$"){
set $myName $1;
}
location ~ /myfile.js {
resolver 8.8.8.8;
proxy_buffering off;
proxy_set_header Content-Length "";
proxy_set_header Cookie "";
proxy_method GET;
proxy_pass_request_body off;
proxy_max_temp_file_size 0;
if ($myName = "mySpecialName") {
proxy_pass http://path/to/aws/s3/bucket/file.js;
add_header Cache-Control "no-store, no-cache";
add_header Pragma "no-cache";
add_header X-XSS-Protection "1";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options nosniff;
}
if ($query_string !~* "myQueryString=([^&]*)") {
proxy_pass http://path/to/aws/s3/bucket/file.js;
}
if ($query_string ~* "myQueryString=([^&]*)") {
proxy_pass http://path/to/some/other/aws/s3/bucket/file.js;
}
}
}

我试过:

  • always
  • proxy_pass_request_headers on
  • proxy_set_header
  • 复制服务器代码并仅针对xx.my.api.com进行调整
  • proxy_hide_header(由于if块而无法使用(
  • more_set_headers

但它们都不起作用。

如有任何帮助,我们将不胜感激,提前表示感谢。

我们通过添加DNS面板中的头来解决这个问题,该面板用于缓存存储在S3中的文件。

最新更新