以下是针对unity webgl的apache重写规则
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteRule (.*)Data(.*)\.js $1Compressed$2\.jsgz [L]
RewriteRule (.*)Data(.*)\.data $1Compressed$2\.datagz [L]
RewriteRule (.*)Data(.*)\.mem $1Compressed$2\.memgz [L]
RewriteRule (.*)Data(.*)\.unity3d $1Compressed$2\.unity3dgz [L]
AddEncoding gzip .jsgz
AddEncoding gzip .datagz
AddEncoding gzip .memgz
AddEncoding gzip .unity3dgz
目前在nginx上我有以下
location ~* \.(js|data|mem|unity3d)$
{
gzip_static on;
if ($request_filename ~ "\.jsgz$" ) {
rewrite ^(.js.gz)$ /$1.jsgz;
}
if ($request_filename ~ "\.datagz$" ) {
rewrite ^(.data.gz)$ /$1.datagz;
}
if ($request_filename ~ "\.memgz$" ) {
rewrite ^(.mem.gz)$ /$1.memgz;
}
if ($request_filename ~ "\.unity3dgz$" ) {
rewrite ^(.unity3d.gz)$ /$1.unity3dgz;
}
}
location ~* \.(jsgz|datagz|memgz|unity3dgz)$ {
add_header Content-Encoding gzip;
break;
}
但它不起作用,基于我对原始apache重写的理解,它假设自动将js | data | mem | unity3d压缩为gunzip格式,并在文件名末尾添加“gz”名称,如何重写在nginx中,而gzip_static不支持自定义文件名?
答案 0 :(得分:9)
你可能已经想到了这一点,但是在我自己努力与Apache进行Nginx转换时,我偶然发现了这个问题。
Nginx有一个名为gzip_static的模块,它会自动查找文件的预压缩版本,并在客户端支持gzip时提供服务。这要求您将文件从Compressed目录移动到Data目录,并稍微更改文件扩展名:
<强>之前:强>
# cd MyProject
# tree
.
|-- Compressed
| |-- MyProject.datagz
| |-- MyProject.html.memgz
| |-- MyProject.jsgz
| |-- fileloader.jsgz
| |-- UnityConfig.jsgz
| |-- UnityProgress.jsgz
|-- Data
| |-- MyProject.data
| |-- MyProject.html.mem
| |-- MyProject.js
| |-- fileloader.js
| |-- UnityConfig.js
| |-- UnityProgress.js
<强>后:强>
# tree
.
|-- Compressed
|-- Data
| |-- MyProject.data
| |-- MyProject.data.gz
| |-- MyProject.html.mem
| |-- MyProject.html.mem.gz
| |-- MyProject.js
| |-- MyProject.js.gz
| |-- fileloader.js
| |-- fileloader.js.gz
| |-- UnityConfig.js
| |-- UnityConfig.js.gz
| |-- UnityProgress.js
| |-- UnityProgress.js.gz
在您的Nginx配置中
location /path/to/MyProject/Data {
gzip_static on;
}
请注意,必须使用--with-http_gzip_static_module构建Nginx。您可以通过运行来检查您的版本是否已经存在:
nginx -V
唯一的缺点是您必须移动/重命名文件,但这对于单线程解决方案来说是一个小小的不便。
以下是如何移动/重命名gzip文件以匹配nginx期望的内容:
cd Data
mv ../Compressed/*gz ./
rename 's/(.*)gz$/$1.gz/' *gz
答案 1 :(得分:0)
使用http://winginx.com/en/htaccess自动转换Unity的.htaccess会产生以下结果:
# nginx configuration
location / {
rewrite (.*)Data(.*)\.js /$1Compressed$2\.jsgz break;
rewrite (.*)Data(.*)\.data /$1Compressed$2\.datagz break;
rewrite (.*)Data(.*)\.mem /$1Compressed$2\.memgz break;
rewrite (.*)Data(.*)\.unity3d /$1Compressed$2\.unity3dgz break;
}
答案 2 :(得分:0)
这是我的解决方案。我在nginx / 1.2.1上测试过它。
location ~* ^/new/build/webgl_build/Release/.+\.(js|data|mem|unity3d) {
add_header Content-Encoding gzip;
gzip_static on;
rewrite (.*)Release(.*)\.js $1Compressed$2.jsgz break;
rewrite (.*)Release(.*)\.data $1Compressed$2.datagz break;
rewrite (.*)Release(.*)\.mem $1Compressed$2.memgz break;
rewrite (.*)Release(.*)\.unity3d $1Compressed$2.unity3dgz break;
}
我希望它会对你有所帮助。 :)
答案 3 :(得分:0)
如何在5.5上执行此操作:
1)转到Release文件夹并将所有以 .extensiongz 结尾的文件扩展名重命名为 .extension.gz
2)确保你的文件中没有任何空格,我总是把我的文件留给我。
3)确保通过运行 nginx -V
安装了nginx的静态gzip4)使用以下命令更新您的站点可用配置文件:
location ~* {
gzip_static on;
}
5)使用 sudo service nginx restart
重新启动nginx