由于启用了严格的 MIME 类型检查,拒绝执行脚本

zab*_*mba 5 reverse-proxy nginx mime-types

我通过另一个域名 (www.bbb.com) 设置了一个 NGINX 反向代理到 Web 服务 (www.aaa.com),同时向后者添加了一些附加页面。

请求来自www.bbb.com(nodejs 应用程序),但它们需要看起来像是来自,www.aaa.com否则我将遇到 CORS(跨源资源共享)问题。因此 NGINX 需要调整 headers。

NGINX 配置

worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    include servers/*;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 443 ssl;
        server_name www.bbb.com;
        ssl_certificate /etc/pki/nginx/server.crt;
        ssl_certificate_key /etc/pki/nginx/private/server.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_set_header X-Real-IP 127.0.0.1;
            proxy_set_header Host www.aaa.com;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass https://www.aaa.com;
            proxy_http_version 1.1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来其中一个资源没有通过反向代理 获取正确的MIME 类型https://www.aaa.com/scripts/some.script.api.js

错误

拒绝执行来自“ https://www.bbb.com/scripts/some.script.api.js ”的脚本,因为其 MIME 类型(“text/html”)不可执行,并且启用了严格的 MIME 类型检查。

text/html确实不正确,我期待application/javascript

1. 为什么会出现这种情况? 我认为 MIME 类型只是自动设置的?难道 www.aaa.com 实施了一些新的 CORS 安全规则?

2. 有没有办法告诉 NGINX 为该特定文件设置正确的 MIME 类型?我尝试了一些方法但没有成功。

例如

add_header Content-Type application/javascript;
Run Code Online (Sandbox Code Playgroud)

但我可能用错了。有什么指点吗?

另一个Stackoverflow 问题中描述了类似的问题

cns*_*nst 6

您可以尝试使用http://nginx.org/r/default_type;我想到的另一件事是http://nginx.org/r/proxy_hide_headers

\n\n

我还建议第一行操作是确定此问题的根本原因 \xe2\x80\x94 是来自上游的错误 MIME 类型吗?然后看那里。

\n\n

否则,我的猜测是你得到的原因text/html是你的配置有其他问题,并且404 Not Found为你的文件生成了响应.js(或者甚至可能403 Forbidden由上游或500nginx 生成),从而导致text/htmlMIME类型。

\n

  • 该问题已演变为“祖先违反了以下内容安全策略指令:“frame-ancestors www.aaa.com”。解释起来太长了。但是,您的指针引导我隐藏包含该指令“proxy_hide_header”X的标头-Frame-Options";` 这解决了我的问题。 (2认同)