nginx配置PDFjs报错无法显示

一、错误描述

在使用 PDFjs 时,可能会遇到以下错误:Failed to load module script: Expected a JavaScript module script but the server responded...

错误原因是服务器返回的文件 MIME 类型不正确。浏览器期望模块脚本的 MIME 类型为 application/javascript,但实际服务器返回的不是这个类型,导致浏览器拒绝加载并显示此错误。

二、解决办法

以下记录了解决过程,以及本人最终的解决办法。

(一)Nginx 配置

  1. 尝试一(未生效)

    • 在 Nginx 的默认 mime.types 文件中没有为 .mjs 扩展名设置条目,这意味着它将被作为 application/octet-stream 而不是 application/javascript 进行服务。
    • 网上查询到的解决方法有的是在 http 模块直接添加以下内容,或者直接修改 mime.types
    server {
        include mime.types;
        types {
            application/javascript mjs;
        }
    }
    • 但这种方式在某些情况下可能没有起到作用。
  2. 尝试二(部分生效)

    • 另一种方式是在 location 中添加以下代码:
    http {
        #…
        server {
            listen 80;
            server_name your_domain.com;
    
            location / {
                root /path/to/files;
                types {
                    application/javascript mjs;
                }
            }
        }
        #…
    }
    • 这种方式在火狐中正常显示,但在 Chromium 内核的浏览器中访问对应的路径变成了下载,不管什么样的路径,无论是登录还是正常的页面。
  3. 最终解决办法

    • mime.types 中修改,增加 application/javascript mjs;,并且在 location 中使用 include 指令引入 mime.types,此时问题解决。
    http {
        #…
        server {
            listen 80;
            server_name your_domain.com;
    
            location / {
                root /path/to/files;
                include /path/to/mime.types;
            }
        }
        #…
    }

(二)其他方法

除了在 Nginx 中解决外,还有其他解决办法:

  1. 降低版本使用非 .mjs 的版本。
  2. 修改 .mjs 后缀为 .js

对于 Apache 的配置,方法也类似,就是添加 application/javascript mjs;,关于apache的配置,方法也类似,就是添加application/javascript mjs;.htaccess中或者在server configuration文件中添加`AddType application/javascript .mjs。