我正在开发一个 nginx s3 反向代理容器映像,以在 Application Load Balancer 后面代理来自 s3 的前端文件(Angular 应用程序)。前端文件位于 s3 存储桶中给定应用程序名称的特定文件夹中。这些是使用标准角度命令构建的角度应用程序。 dist 内容(html、js、css)被上传到 s3。我对标题内容有疑问。这是我的 nginx conf 文件:
server {
listen 80;
listen 443 ssl;
ssl_certificate /etc/ssl/nginx-server.crt;
ssl_certificate_key /etc/ssl/nginx-server.key;
server_name timemachine.com;
sendfile on;
default_type application/octet-stream;
resolver 8.8.8.8;
server_tokens off;
location ~ ^/app1/(.*) {
proxy_http_version 1.1;
proxy_buffering off;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header x-amz-meta-s3cmd-attrs;
proxy_hide_header Set-Cookie;
proxy_set_header Authorization "";
proxy_intercept_errors on;
rewrite ^/app1/?.*$ /app1/;
proxy_pass https:/<s3bucket>;
break;
}
}
当我部署容器时,它要么是(1)下载文件,而不是为它们提供服务(我认为这是由于上面的application/octet-stream
默认,或者(2)如果我将重写更新为以下...
rewrite ^/app1/?$ /app1/index.html;
然后这不提供 js 文件,在检查 chrome 开发工具控制台后,我发现标题是错误的,js 文件以文本/html 形式返回
text/html
这是具体的错误:Expected a JavaScript module script but the server responded with a MIME type of text/html
我已经尝试将 http、服务器和位置块中的 default_type 更改为 application/javascript
,特别是在 w/in 位置块中更改为 add_header Content-Type text/javascript;
,但这没有用。我也试过,清除浏览器中的缓存,每次我在进行更改后重新加载 nginx 等。
我有以下问题: (1) 由于我没有使用 nginx 基础图像,我是否需要专门集成一个 mime 类型文件,然后在 nginx.conf 中引用该文件以选择所有正确的 mime 类型来使用或简单地在服务器块中设置它我需要使用所有其他类型吗?是的,我试过了,但它没有解决问题,这就是我要问的原因。
include /etc/nginx/mime.types
(2) 假设我得到了所有需要的 mime 类型。我应该为每个块添加什么来满足我的需要,也就是说,添加到 http、服务器和位置块以涵盖服务 Angular 应用程序所需的范围?