1. 程式人生 > >nginx靜態檔案訪問

nginx靜態檔案訪問

如何配置nginx,訪問伺服器上的靜態檔案?

假設:在/home/www/jsonfolder下有一個data.json檔案,內容如下:

{
    "action":"query",
    "name":"device1",
    "key":"temp"
}

1、修改nginx配置檔案,檔案路徑/etc/nginx/sites-available/default(或者/etc/nginx/conf.d/xxx.conf,多應用時可能需要配置這個檔案),分為兩種方式:

  • 按目錄匹配
    server塊內新增如下內容:
server {
    .
    .
    location ^~ /jsonfolder/
{ root /home/www/; } . . }

配置完後重啟nginx,重啟方法請參見我之前的部落格,此時訪問http://127.0.0.1/jsonfolder/data.json 將會匹配到/home/www/jsonfolder/data.json檔案。
如果採用post方式將無法正確返回,需要修改nginx的原始碼src/http/modules/ngx_http_static_module.c,
註釋掉如下內容:

if (r->method & NGX_HTTP_POST) {
    return NGX_HTTP_NOT_ALLOWED;
}

執行make命令重新編譯,執行cp objs/nginx /usr/local/nginx/sbin/nginx,將objs目錄下生成nginx命令拷貝到nginx安裝目錄sbin目錄下,重啟即可。(此方法未驗證)

  • 按檔案字尾匹配
server {
    .
    .
    location ~ \.(txt|json)$ {
        root /home/www/;
    }
    .
    .
}

匹配檔案字尾為txt和json的檔案,例如http://127.0.0.1/data.json 會匹配到 /home/www/data.json

如果以上方法未成功,可嘗試以下方法:
  

通過nginx訪問靜態檔案配置,均是在server模組中配置,有兩種方式:

1、alias

通過alias關鍵字,重定義路徑,如

server{
listen 7001;
server_name 127.0.0.1;
location /file/ {
alias /home/china/areas/;
}
}

此時,通過瀏覽器訪問http://127.0.0.1:7001/file/t.txt,則訪問伺服器的檔案是/home/china/areas/t.txt

2、root

通過root關鍵字,重定義路徑,如

server{
listen 7002;
server_name 127.0.0.1;
location / {
root /home/china/areas/;
}
}

此時,通過瀏覽器訪問http://127.0.0.1:7001/t.txt,則訪問伺服器的檔案是/home/china/areas/t.txt

上述兩種方法均可達到目的,區別是它們對路徑的解析方式不同,alas會把指定路徑當作檔案路徑,

而root會把指定路徑接到檔案路徑,再進行訪問。