nginx配置詳解之location模塊

       在前幾篇博文中我提到過的 nginx除了是一款的web服務器外  nginx還是一個小型的反向代理服務器  我們可以使用nginx將一些靜態文件 例如css js images 存儲在客戶端本地  下次請求的時候直接從本地讀取 加快頁面響應速度 又比如 我們可以用做分發匹配 將請求php文件的分發給A機器  將請求py文件的請求分給B機器

還有其他很多 在此就不一一詳述 但上述功能都需要location模塊的配合  下面我就來詳細介紹下location模塊

       nginx的location模塊 用來做模式匹配   官方文檔 REFER:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

       語法規則: location [=|~|~*|^~] /uri/ { … }

        = 開頭表示精確匹配
        ^~ 開頭表示uri以某個常規字符串開頭,理解爲匹配url路徑即可。nginx不對url做編碼,因此請求爲/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。
        ~ 開頭表示區分大小寫的正則匹配

        ~*開頭表示不區分大小寫的正則匹配
        !~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配 的正則
        / 通用匹配,任何請求都會匹配到。
       多個location配置的情況下匹配順序爲(參考資料而來,還未實際驗證,試試就知道了,不必拘泥,僅供參考):
       首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最後是交給 /通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。

下面我將介紹幾個常用的用法及配置

1.禁止訪問  比如我不允許訪問項目下的  .htaccess文件 可以這樣設置

location ~ /\.ht {
    deny all;
}

deny all表示拒絕所有請求


2.將請求php文件的指令 推送給php-fpm

location ~ \.php$ {
        root           /xxx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

location中是可以使用nginx內置變量的 詳見http://blog.csdn.net/zhangsheng_1992/article/details/51727031


3.將請求轉發給node服務器

    upstream sample {
       server 127.0.0.1:9000;
    }

    server{
       listen 80;
       server_name www.xxx.com;
       location / {
           proxy_redirect off;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header Host $http_host;
           proxy_set_header X-NginX-Proxy true;
           proxy_set_header Connection "";
           proxy_http_version 1.1;
           proxy_pass http://sample;
       }
     }
 

請求www.xxx.com的所有請求 將被轉發到9000端口


4.反向代理靜態文件 gif jpg jpeg png bmp swf js css


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)${
      #使用Web緩存區cache_one
      proxy_cache cache_one ;
      #對不同HTTP狀態碼緩存設置不同的緩存時間
      proxy_cache_valid 200 304 12h ;
      proxy_cache_valid 301 302 1m ;
      proxy_cache_valid any 1m ;
      #設置Web緩存的Key值,Nginx根據Key值md5哈希存儲緩存,這裏根據"域名,URI,
      #參數"組合成Key
      proxy_cache_key $host$uri$is_args$args;
    }


之前我又一篇文章介紹了下squid反向代理的 對比對比有什麼不同 http://blog.csdn.net/zhangsheng_1992/article/details/44979165


5.url重寫 請求/123456/xxxx  變爲 /xxxx?id=123456

location /{ 
rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&a=lists&catid=$2 last; 
} 
之後我會有一片文章專門介紹nginx的rewrite 敬請關注


6.設定查看Nginx狀態的地址

location /NginxStatus {
    stub_status on;
    access_log on;
    auth_basic "NginxStatus";
    auth_basic_user_file conf/htpasswd;
}

7防盜鏈
location ~* \.(gif|jpg|png|swf|flv)$ {

  valid_referers none blocked www.xxx.com xxx.com ;
  if ($invalid_referer) {
    rewrite ^/ http://www.xxx.com/retrun.html;
    #return 403;
  }
} 

不是www.xxx.com發出的圖片請求一律拒絕


除此之外 日誌格式  消息頭轉發 也可以在location模塊內配置  有興趣的去看我之前的博文 此處就不介紹了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章