<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 1\. 摘要 本文介紹NGINX緩存機制,配置和參數說明。 # 2\. 內容 ## 2.1 nginx緩存的優點 ![](//upload-images.jianshu.io/upload_images/1190574-af1c8874843e0a30.png?imageMogr2/auto-orient/strip|imageView2/2/w/1010/format/webp) 如圖所示,nginx緩存,可以在一定程度上,減少源服務器的處理請求壓力。因為靜態文件(比如css,js, 圖片)中,很多都是不經常更新的。nginx使用proxy\_cache將用戶的請求緩存到本地一個目錄。下一個相同請求可以直接調取緩存文件,就不用去請求服務器了。畢竟,IO密集型服務的處理是nginx的強項。 Nginx的緩存加速功能是由proxy\_cache(用于反向代理和靜態緩存)和fastcgi\_cache(PHP動態緩存)兩個功能模塊完成。 **Nginx緩存特點:** * 緩存穩定,運行速度與Squid相差無幾(因為都使用硬盤緩存); * 對多核CPU的利用率比其他的開源軟件好; * 支持高并發請求數,能同時承受更多的訪問請求; ## 2.2 如何進行設置 先上個例子: ~~~php http{ proxy_connect_timeout 10; proxy_read_timeout 180; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 32k; proxy_busy_buffers_size 96k; proxy_temp_file_write_size 96k; proxy_temp_path /tmp/temp_dir; proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g; server { listen 80 default_server; server_name localhost; root /mnt/blog/; location / { } #要緩存文件的后綴,可以在以下設置。 location ~ .*\.(gif|jpg|png|css|js)(.*) { proxy_pass http://ip地址:90; proxy_redirect off; proxy_set_header Host $host; proxy_cache cache_one; proxy_cache_valid 200 302 24h; proxy_cache_valid 301 30d; proxy_cache_valid any 5m; expires 90d; add_header wall "hey!guys!give me a star."; } } # 無nginx緩存的blog端口 server { listen 90; server_name localhost; root /mnt/blog/; location / { } } } ~~~ 因為我是在一臺服務器上做試驗,所以用了兩個端口`80`和`90`進行模擬兩臺服務器之間的交互。 > `80`端口對接的是普通的域名(`http://wangxiaokai.vip`)訪問。 > `90`端口負責處理`80`端口代理過來的資源訪問。 > 相當于`90`端口是源服務器,`80`端口是nginx反向緩存代理服務器。 * * * 接下來講一下配置項: ### 2.2.1 http層設置 ~~~undefined proxy_connect_timeout 10; proxy_read_timeout 180; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 32k; proxy_busy_buffers_size 96k; proxy_temp_file_write_size 96k; proxy_temp_path /tmp/temp_dir; proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g; ~~~ * proxy\_connect\_timeout `服務器連接的超時時間` * proxy\_read\_timeout `連接成功后,等候后端服務器響應時間` * proxy\_send\_timeout `后端服務器數據回傳時間` * proxy\_buffer\_size `緩沖區的大小` * proxy\_buffers `每個連接設置緩沖區的數量為number,每塊緩沖區的大小為size` * proxy\_busy\_buffers\_size `開啟緩沖響應的功能以后,在沒有讀到全部響應的情況下,寫緩沖到達一定大小時,nginx一定會向客戶端發送響應,直到緩沖小于此值。` * proxy\_temp\_file\_write\_size `設置nginx每次寫數據到臨時文件的size(大小)限制` * proxy\_temp\_path `從后端服務器接收的臨時文件的存放路徑` * proxy\_cache\_path `設置緩存的路徑和其他參數。被緩存的數據如果在inactive參數(當前為1天)指定的時間內未被訪問,就會被從緩存中移除` ### 2.2.2 server層設置 #### 2.2.2.1 反向緩存代理服務器 ~~~php server { listen 80 default_server; server_name localhost; root /mnt/blog/; location / { } #要緩存文件的后綴,可以在以下設置。 location ~ .*\.(gif|jpg|png|css|js)(.*) { proxy_pass http://ip地址:90; proxy_redirect off; proxy_set_header Host $host; proxy_cache cache_one; proxy_cache_valid 200 302 24h; proxy_cache_valid 301 30d; proxy_cache_valid any 5m; expires 90d; add_header wall "hey!guys!give me a star."; } } ~~~ * proxy\_pass `nginx緩存里拿不到資源,向該地址轉發請求,拿到新的資源,并進行緩存` * proxy\_redirect `設置后端服務器“Location”響應頭和“Refresh”響應頭的替換文本` * proxy\_set\_header `允許重新定義或者添加發往后端服務器的請求頭` * proxy\_cache `指定用于頁面緩存的共享內存,對應http層設置的keys_zone` * proxy\_cache\_valid `為不同的響應狀態碼設置不同的緩存時間` * expires `緩存時間` * * * 這里我設置了`圖片`、`css`、`js`靜態資源進行緩存。 當用戶輸入`http://wangxiaokai.vip`域名時,解析得到`ip:port`的訪問地址。`port`默認為80。所以頁面請求會被當前server截取到,進行請求處理。 當解析到上述文件名結尾的靜態資源,會到緩存區獲取靜態資源。 如果獲取到對應資源,則直接返回數據。 如果獲取不到,則將請求轉發給`proxy_pass`指向的地址進行處理。 #### 2.2.2.2 源服務器 ~~~undefined server { listen 90; server_name localhost; root /mnt/blog/; location / { } } ~~~ 這里直接處理`90`端口接受到的請求,到服務器本地目錄`/mnt/blog`下抓取資源進行響應。 ## 2.3 如何驗證緩存是否有效 細心的讀者應該發現,我在第二段例子里,留了個彩蛋 `add_header wall "hey!guys!give me a star."`。 `add_header`是用于在報頭設置自定義的信息。 所以,如果緩存有效的話,那么靜態資源返回的報頭,一定會帶上這個信息。 ## 2.4 proxy\_cache主要參數 ~~~bash 1. proxy_cache 語法:proxy_cache zone|off 默認為off,即關閉proxy_cache功能,zone為用于存放緩存的內存區域名稱。 例:proxy_cache my_zone; 從nginx 0.7.66版本開始,proxy_cache機制開啟后會檢測被代理端的HTTP響應頭中的"Cache-Control"、"Expire"頭域。 如,Cache-Control為no-cache時,是不會緩存數據的。 2. proxy_cache_bypass 語法:proxy_cache_bypass string; 該參數設定,什么情況下的請求不讀取cache而是直接從后端的服務器上獲取資源。 這里的string通常為nginx的一些變量。 例:proxy_cahce_bypass $cookie_nocache $arg_nocache$arg_comment; 意思是,如果$cookie_nocache $arg_nocache$arg_comment這些變量的值只要任何一個不為0或者不為空時, 則響應數據不從cache中獲取,而是直接從后端的服務器上獲取。 3. proxy_no_cache 語法:proxy_no_cache string; 該參數和proxy_cache_bypass類似,用來設定什么情況下不緩存。 例:proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; 表示,如果$cookie_nocache $arg_nocache $arg_comment的值只要有一項不為0或者不為空時,不緩存數據。 4. proxy_cache_key 語法:proxy_cache_key string; 定義cache key,如: proxy_cache_key $scheme$proxy_host$uri$is_args$args; (該值為默認值,一般不用設置) 5. proxy_cache_path 語法:proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] path設置緩存數據存放的路徑; levels設置目錄層級,如levels=1:2,表示有兩級子目錄,第一個目錄名取md5值的倒數第一個值,第二個目錄名取md5值的第2和3個值。keys_zone設置內存zone的名字和大小,如keys_zone=my_zone:10m;inactive設置緩存多長時間就失效,當硬盤上的緩存數據在該時間段內沒有被訪問過,就會失效了,該數據就會被刪除,默認為10s。max_size設置硬盤中最多可以緩存多少數據,當到達該數值時,nginx會刪除最少訪問的數據。 ~~~ # 3\. 參考 (1)Nginx系列教程(3)nginx緩存服務器上的靜態文件 [https://yq.aliyun.com/articles/752967](https://links.jianshu.com/go?to=https%3A%2F%2Fyq.aliyun.com%2Farticles%2F752967) (2)proxy\_cache nginx 反向代理之 proxy\_cache [https://www.cnblogs.com/yyxianren/p/10832172.html](https://links.jianshu.com/go?to=https%3A%2F%2Fwww.cnblogs.com%2Fyyxianren%2Fp%2F10832172.html) (3)Nginx使用upstream負載均衡和proxy\_cache緩存實現反向代理 [https://blog.51cto.com/13770206/2163952](https://links.jianshu.com/go?to=https%3A%2F%2Fblog.51cto.com%2F13770206%2F2163952)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看