【问题标题】:Nginx Proxy pass to s3 for js files returns 400 Bad request [closed]Nginx 代理传递给 s3 以获取 js 文件返回 400 Bad request [关闭]
【发布时间】:2025-12-27 05:35:12
【问题描述】:

下面是我的 nginx 配置。

    server_name  myserver.com;

    location ~ /(in|sr)/(en|tm)/(.+\.(css|js)) {
        proxy_set_header Host http://mybucketabc.s3.amazonaws.com;

        proxy_http_version     1.1;
        proxy_set_header       Connection "";
        proxy_set_header       Authorization '';
        proxy_hide_header      x-amz-id-2;
        proxy_hide_header      x-amz-request-id;
        proxy_hide_header      x-amz-meta-server-side-encryption;
        proxy_hide_header      x-amz-server-side-encryption;
        proxy_hide_header      Set-Cookie;
        proxy_ignore_headers   Set-Cookie;
        proxy_intercept_errors on;
        add_header             Cache-Control max-age=31536000;

        rewrite ^/(in|sr)/(en|tm)/(.*) /$1/$2/$3 break;
        proxy_pass    http://mybucketabc.s3.amazonaws.com;
    }

当我尝试访问 http://myserver.com/in/en/main.9bd9926d.js 时,我收到“400 Bad Request”

但直接访问http://mybucketabc.s3.amazonaws.com/in/en/main.9bd9926d.js 工作正常。

我对 html 和 svg 文件有类似的代理传递规则,两者都可以正常工作,但对 .js 文件的请求总是抛出“400 Bad Request”。

非常感谢任何帮助。

【问题讨论】:

  • 您是否尝试过使用最少的指令创建一个更简单的位置并慢慢添加指令?我只对 proxy_pass、proxy_intercept_errors 和 recursive_error_pages 做了类似的事情
  • 这种尝试帮助我解决了这个问题。这是由于错误的主机而发生的。 proxy_set_header 主机mybucketabc.s3.amazonaws.com; “http://”被错误地添加到主机中。非常感谢。

标签: nginx amazon-s3 proxypass


【解决方案1】:

纠正主机后问题得到解决。

错误的主机 proxy_set_header 主机http://mybucketabc.s3.amazonaws.com;

正确的主机(删除“http://”) proxy_set_header 主机 mybucketabc.s3.amazonaws.com;

【讨论】: