繁体   English   中英

如何将这个apache重写转换为nginx?

[英]How to convert this apache rewrite into nginx?

以下是统一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不支持自定义文件名?

你可能已经想到了这一点,但是在我自己努力与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

使用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;
}

这是我的解决方案。 我在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;
}

我希望它会对你有所帮助。 :)

如何在5.5上做到这一点:

1)进入release文件夹并重命名所有文件扩展名与.extensiongz结局.extension.gz

2)确保你的文件中没有任何空格,我总是把我的文件留给我

3)确保通过运行nginx -V安装了nginx的静态gzip

4)使用以下内容更新您的站点可用配置文件:

location ~* {
        gzip_static on;
}

5)使用sudo service nginx restart重新启动nginx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM