前端的工作過程里,本地開發、提供測試環境,總得有個用著順手的服務器軟件,這個場景里nginx很流行。
介紹兩個好用的配置項:rewrite try_files @xxxx
rewrite
比較常見,主要用于將帶版本號的靜態文件路徑替換成本地文件路徑
例如人人網發布文件路徑里面包含一個a0000的版本號,通過下面這句配置就能將http://xnimg.cn/a0001/js/base.js換成http://xnimg.cn/js/base.js直接影射到本地目錄結構中。
rewrite "^/a?([0-9]+)/(.*)" /$2 last;
try_files
嘗試在本地的多個路徑中查找需要的文件,如果依然沒找到才會返回404。下面配合@xxx配置實現一個更方便的功能。
location @xxx
這樣定義了一個可以供其他配置調用的“請求處理方法”(handler),結合try_files如果本地沒找到自動去線上取回指定文件。
if ( $document_uri ~*"^/[ab]?([0-9]+)/(.*)"){ set $no_version_path /$2; } location / { try_files $document_uri $no_version_path =404; error_page 404 = @online; log_not_found off; } location @online{ proxy_pass http://$host:80/$request_uri }
第一個if語句是一個匹配,把$2第二個分組值(去掉版本號的路徑)保存到變量$no_version_path;
try_files的順序:有版本號的路徑、沒有版本號的路徑、如果404 調用@online;
@online中用$host,$request_uri這兩個nginx變量拼出請求的文件路徑直接代理請求到線上。
這樣配置的服務器,只需要在本地存放你所關心的幾個靜態文件,其他不需要調試的文件全部代理到線上,省得每次花時間更新自己不關心的工程代碼。