NGINX服务无源预压缩索引文件

NGINX服务无源预压缩索引文件,nginx,gzip,Nginx,Gzip,我发现了一个有趣的问题 我正在尝试使用NGINX的gzip_静态模块提供一些没有源代码的gzip文件(我知道这样做的缺点)。这意味着您可以在服务器上拥有gzip文件,这些文件将使用传输编码gzip提供服务。例如,如果有一个文件/foo.html.gz,对/foo.html的请求将通过压缩文件提供,压缩文件的内容编码为:text/html 虽然这通常是可行的,但事实证明,在目录中查找索引文件时,并不考虑gzip版本 GET /index.html 200 GET / 403 我想知道是否有人知

我发现了一个有趣的问题

我正在尝试使用NGINX的gzip_静态模块提供一些没有源代码的gzip文件(我知道这样做的缺点)。这意味着您可以在服务器上拥有gzip文件,这些文件将使用传输编码gzip提供服务。例如,如果有一个文件/foo.html.gz,对/foo.html的请求将通过压缩文件提供,压缩文件的内容编码为:text/html

虽然这通常是可行的,但事实证明,在目录中查找索引文件时,并不考虑gzip版本

GET /index.html
200

GET /
403

我想知道是否有人知道如何解决这个问题。我尝试将
index.html.gz设置为索引文件中的
,但它被用作gzip文件,而不是gzip编码的html文件。

这显然不起作用

这是模块的一部分:

因此,如果uri以斜杠结尾,它甚至不会查找gzip版本

但是,您可能可以使用“重写”进行黑客攻击。 (这是一个猜测,我还没有测试过)

编辑:要使其与自动索引(猜测)一起工作,您可以尝试使用此选项,而不是重写:

location ~ /$ { 
    try_files ${uri}/index.html $uri;
}

总体而言,它可能比使用重写更好。但是您需要尝试…

您希望发送压缩响应还是预压缩静态文件?它们是不同的-;我正在尝试提供压缩静态文件。使用“始终”值(1.3.6),gzip文件在所有情况下都使用,而不检查客户端是否支持它。如果磁盘上没有未压缩的文件,或者使用了ngx_http_gunzip_模块,则此功能非常有用。所以你写:“gzip总是”,而不是“gzip开”谢谢,这很有效!不幸的是,它破坏了
autoindex
。你认为有没有办法让它与
自动索引一起工作?@ReyCharles也许这个更好。但我还没有测试过,幸运的是,这个解决方案也有同样的问题。事实上,你需要把${uri}/index.html放在引号里。它只会显示自动索引。重写对我有效。因为我不需要自动索引,这对我来说不是一个破坏者。谢谢你,福克斯。
rewrite ^(.*)/$ $1/index.html;
location ~ /$ { 
    try_files ${uri}/index.html $uri;
}