【问题标题】:AWS Load Balancer - 'text/plain' is not a valid JavaScript MIME typeAWS Load Balancer - \'text/plain\' 不是有效的 JavaScript MIME 类型
【发布时间】:2022-11-29 07:59:52
【问题描述】:

我的 Angular 应用程序在负载均衡器后面的 AWS ECS(EC2 实例)中运行。当我使用我的 EC2 实例的直接 IP 地址触发应用程序时,应用程序加载正常,没有任何问题。但是当我通过应用程序负载均衡器触发应用程序时,我在浏览器控制台上看到错误提示“text/plain”不是有效的 JavaScript MIME 类型。我不确定为什么在使用直接 IP 触发时能够毫无问题地触发应用程序,但只有在使用负载均衡器 URL 时才会遇到此错误。请在下面找到 nginx 配置。

server {

        include /etc/nginx/mime.types;

        listen       443;
        listen  [::]:443;

        server_name  sampleweb.com www.sampleweb.com;

        ssl_certificate         /keys/cert.pem;
        ssl_certificate_key     /keys/key.pem;

        ssl on;
        ssl_session_cache  builtin:1000  shared:SSL:10m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        ssl_prefer_server_ciphers on;

        location ~ \.css {
            add_header  Content-Type    text/css;
        }

        location ~ \.js {
            add_header  Content-Type    application/x-javascript;
        }

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;

            try_files $uri /index.html;

            add_header 'Access-Control-Allow-Origin' '*';

        }

        # redirect server error pages to the static page /50x.html

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
}

任何人都可以帮助解决这个问题吗?

【问题讨论】:

  • 您可以从您的实例和负载均衡器为导致错误的请求发布“Content-Type”响应标头吗?

标签: javascript angular amazon-web-services nginx aws-application-load-balancer


【解决方案1】:

在没有更多信息的情况下很难具体说出什么问题,但我的猜测是来自 nginx 的 HTTP 响应的“Content-Type”标头对于您的 JS 文件以某种方式关闭,并且负载平衡器正在设置 @ 987654321@ 作为占位符/最佳猜测。

我会看两件事:首先,您的 javascript 文件的内容。它是一个普通的文本文件吗?例如utf-8 编码,无 bom,无二进制数据。其次,我将从您的 nginx 配置中删除 location ~ .js 块:application/x-javascript 现在被认为已弃用,取而代之的是 application/javascript,并且 nginx 应该已经有一个 mime.types 包含文件,该文件将为 .js 正确设置类型文件(以及大多数其他常见文件类型。)

祝你好运!

【讨论】:

  • 感谢您的回复。这里有更多信息。这是我从 chrome 加载网站时看到的错误。 “无法加载模块脚本:需要运行时 es2015.940da701d385acd0a1fd.js:1 JavaScript 模块脚本,但服务器响应 MIME 类型为“text/plain”。根据 HTML 规范对模块脚本强制执行严格的 MIME 类型检查。”当我查看响应中的内容类型时,我确实看到内容类型返回文本/纯文本;对于这个特定的 js 文件。不知道为什么。
  • 我已经编辑了我的答案以解决这个问题。
【解决方案2】:

我能够弄清楚这个问题。我再次检查了所有配置,看看是否忽略了什么。这与我在为负载均衡器配置侦听器时引入的一个愚蠢错误有关。虽然我配置了基于路径的路由规则,但我在末尾添加了默认配置(当没有路径匹配时)以返回状态代码 200 和 Content-Type 作为“text/plain”。我现在修改它以将其路由到我的目标组中,并且效果很好。

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 2012-06-02
    • 2012-03-23
    • 2021-08-27
    • 2021-01-21
    • 2020-03-25
    • 1970-01-01
    • 2019-09-13
    相关资源
    最近更新 更多