Nginx的配置與開發學習(四):動靜分離

Nginx動靜分離

動靜分離

  • 通過中間件將動態請求和靜態請求分離,從而分離資源,減少不必要的請求消耗,減少請求延時

  • 動靜分離的情況下,動態請求掛掉的情況下,也能請求到靜態請求

    test.conf的配置屬性

    upstream java_api{
        server 127.0.0.1:8080;
    }
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        access_log  /var/log/nginx/log/host.access.log  main;
        root /opt/app/code;  
    
        location ~ \.jsp$ { #所有jsp的請求
            proxy_pass http://java_api;
            index  index.html index.htm;
        }
    
        location ~ \.(jpg|png|gif)$ {
            expires 1h;
            gzip on;
        }
    
        location /{
            index  index.html index.htm;
        }
        ......
    }
    

Nginx的rewrite規則

  1. URL訪問跳轉,支持開發設計

    如:頁面跳轉,兼容性支持,展示效果等

  2. SEO優化

  3. 維護 rewrite ^(.*)$ /pages/weihu.html break;所有請求都跳轉到維護界面

    如:後臺維護,流量轉發等

  4. 安全 實現僞靜態

正則表達式

. 匹配除換行符以外的任意字串
? 重複0次或1次
+ 重複1次或更多次
* 最少鏈接數,哪個機器鏈接數少就發哪
\d 匹配數字
^ 匹配字符串的開始
$ 匹配字符串的結束
[a-z] 匹配a-z小寫字母的任意一個
{n},{n,} 重複n次,重複n次或更多次
\ 轉義字符

測試正則表達式:pcretest

rewrite.conf配置

配置語法中的flag字段類型:

last 停止rewrite檢測
break 停止rewrite檢測
redirect 返回302臨時重定向,地址欄會顯示跳轉後的地址
permanent 返回301永久重定向,地址欄會顯示跳轉後的地址
server {
    listen 80;
    server_name localhost;

    access_log  /var/log/nginx/log/host.access.log  main;
     
    root /opt/app/code; 
    location ~ ^/break {
        rewrite ^/break /test/ break;//不會繼續往下請求,返回404
    }
 
    location ~ ^/last {
         rewrite ^/last /test/ last; //會重新請求test,返回success
    }
    
    location ~ ^/last {
         rewrite ^/last /test/ last;
         #rewrite ^/last /test/ redirect;
    }

    location ~ ^/baidu {
       rewrite ^/baidu http://www.baidu.com/ permanent; #永久重定向:Nginx停止也會重定向網址
         #rewrite ^/baidu http://www.baidu.com/ redirect;
    } 
 
    location /test/ {
       default_type application/json;
       return 200 '{"status":"success"}';
    }
}
  1. Rewrite規則優先級
    • 執行server塊的rewrite指令
    • 執行location匹配
    • 執行選定的location中的rewrite
  2. 優雅的Rewrite規則書寫
server{
    listen  80;
    server_name nginx.org;
    rewrite ^ http://www.nginx.org$request_uri?;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章