Nginx Proxy Pass S3特定的html文件

时间:2017-03-10 19:48:58

标签: nginx amazon-s3

我在那里,在我的本地主机上有我的文件之前,我能够很好地为他们服务。现在,我将我的静态文件移动到S3,但我想使用自定义域提供index.html启动文件。必须可以从index.html导航到其他.html

到目前为止我得到了:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    include snippets/letsencrypt.conf;
    include snippets/ssl-params.conf;

    charset   utf-8;

    server_name mydomain;

    location / {


 proxy_set_header       Host 's3-eu-west-1.amazonaws.com';
        proxy_set_header       Authorization '';
        proxy_hide_header      x-amz-id-2;
        proxy_hide_header      x-amz-request-id;
        proxy_hide_header      Set-Cookie;
        proxy_ignore_headers   "Set-Cookie";
        proxy_intercept_errors on;
        set $indexfile         "s3-eu-west-1.amazonaws.com/myprod-bucket/static/js/frontend/build_v0.5/";
        proxy_pass             https://$indexfile;

        # expires 1y;
        log_not_found off;

        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd_finder;
    }

}

我似乎无法找到适合我案例的任何例子,我做错了什么?

更新:我根据https://stackoverflow.com/a/22843758/977622改变了一下,我开始得到:

Refused to execute script from '../vendor.5ad3d736.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

Resource interpreted as Stylesheet but transferred with MIME type text/html: "../styles/main.b812e04a.css".

2 个答案:

答案 0 :(得分:0)

在代理方案中,内容服务器指定内容类型(在本例中为S3),除非被覆盖。您可以在上载S3对象时指定mime类型。如果您通过S3网络界面执行此操作,请确保不要取消选中' 自动计算内容类型'。 AWS cli工具还会自动猜测mime类型,除非另有说明。如果您使用其他内容上传文件,则需要查阅相应工具的手册/ API参考。

您也可以直接从S3为您提供网站,请参阅Hosting a Static Website on Amazon S3

答案 1 :(得分:0)

不确定它是否仍与您相关,但我建议您直接从S3而不是通过Nginx提供CSS和其他静态文件。也就是说,像现在一样使用index.htmlproxy_pass提供服务,但index.html内的CSS和JS文件的链接应该是绝对的,并将S3存储桶作为域。

这既可以解决您的问题,也可以更好地解决其他原因,例如:

  • 您将从运行Nginx的服务器上降低CPU和网络成本。
  • 您不会通过自己的服务器为每个静态文件请求更快地为您的网站提供服务。
  • S3提供加密,压缩,添加CDN的功能以及许多其他有用的功能。除非有令人信服的理由通过您自己的服务器,否则我会避免使用它。

请注意,您的用户仍会通过您自己的域查看您的网站,它只是将从S3域提供的CSS和JS文件。