[英]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.