【问题标题】:gzip_static not working with nginxgzip_static 不适用于 nginx
【发布时间】:2016-11-29 19:35:17
【问题描述】:

我有一些由 nginx 提供的压缩 javascript 文件:

<script type="application/javascript" src="js/shim.min.js.gz"></script>
<script type="application/javascript" src="js/zone.js.gz"></script>

但似乎 nginx 将它们作为文本/纯文本提供,导致浏览器错误:

SyntaxError: illegal character   shim.min.js.gz:1

查看标题,这是响应:

Content-Encoding:gzip
Content-Type:text/plain
Date:Tue, 29 Nov 2016 18:03:01 GMT
ETag:W/"583ce194-68b3"
Last-Modified:Tue, 29 Nov 2016 02:01:56 GMT 
Server:nginx/1.10.2
Vary:Accept-Encoding

这是我的 nginx.conf:

worker_processes 4;

events { worker_connections 1024; }

http {
include /etc/nginx/mime.types;

gzip on;
gzip_static on;
gzip_disable "msie6";

gzip_vary on;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

        upstream node-app {
              server node1:3000 weight=10 max_fails=3 fail_timeout=30s;
        }

        server {
              listen 80;
              index index.html
              error_log  /var/log/nginx/error.log;
              access_log /var/log/nginx/access.log;
              root /var/www/public;

              location /api {
                proxy_pass http://node-app;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
              }
        }
}

我已将 gzip_static 设置为打开,但它似乎无法正常工作。我正在使用 nginx docker 映像:

>nginx:1.10.2-alpine

这个图片是用gzip静态模块编译的:

--with-http_gzip_static_module

如果我解压缩 javascript 并为它们提供未压缩的内容,一切正常。 mime 类型有问题吗?这适用于:

<script type="application/javascript" src="js/shim.min.js"></script>
<script type="application/javascript" src="js/zone.js"></script>

【问题讨论】:

    标签: javascript nginx


    【解决方案1】:

    Module ngx_http_gzip_static_module:

    ngx_http_gzip_static_module 模块允许发送带有“.gz”文件扩展名的预压缩文件,而不是常规文件。

    gzip_static:

    启用(“on”)或禁用(“off”)检查是否存在预压缩文件。

    我们必须有两个文件用于支持的压缩客户端 (/some/path/js/filename.js.gz) 和不支持的 (/some/path/js/filename.js)。

    可以使用 gzip 命令或任何其他兼容的命令来压缩文件。

    在你的 html 中使用:

    <script type="application/javascript" src="/js/filename.js"></script>
    

    而 nginx 会返回给客户端的文件之一。

    建议原文件和压缩文件的修改日期和时间一致。

    【讨论】:

    • 只是对“推荐”的注释。这个很重要。因为gzip_static 刚刚停止为我工作,我意识到这是因为 gzip 文件的修改日期比非 gzip 文件的日期早。
    猜你喜欢
    • 2017-10-17
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2016-06-27
    • 2019-09-01
    • 2019-05-21
    相关资源
    最近更新 更多