簡體   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