目錄
#一、Nginx作為靜態資源Web服務
1、動態資源和靜態資源
2、CDN(Content Delivery Network)內容傳遞網絡
3、設定語法
HTTP協定定義的快取機制(如:Expires;Cache-control等)
#5、跨站訪問
param参数解释:
调度算法:
四、Nginx作为缓存服务
1、缓存的类型
2、常用缓存配置
2、清除指定缓存
3、如何让部分页面不缓存
4、大文件分片请求
首頁 後端開發 php教程 Nginx的場景實踐

Nginx的場景實踐

May 07, 2018 am 11:05 AM
nginx 場景 實踐

這篇文章主要介紹了關於Nginx的場景實踐,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

#一、Nginx作為靜態資源Web服務

1、動態資源和靜態資源

客戶端請求的頁面如果是靜態網頁,那麼伺服器會直接把靜態網頁的內容回應給客戶端。如果客戶端要求的是動態網頁,伺服器需要先把動態網頁換成靜態網頁,然後再把轉換後的靜態網頁回應給客戶端

靜態資源的幾種型別

  • #瀏覽器渲染:HTML、CSS、JAVASCRIPT

  • 圖片:JPEG、GIF、PNG ...

  • 視頻:FLV、MPEG ...

  • 檔:TXT、等任一下載檔案

2、CDN(Content Delivery Network)內容傳遞網絡

其基本想法是盡可能避開網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。透過在網絡各處放置節點伺服器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合資訊將使用者的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網路擁擠的狀況,提高使用者造訪網站的回應速度。

3、設定語法

  1. sendfile(檔案讀取)

  • 設定語法:sendfile on|off ;

  • 預設:無

  • Context:http,server,location,if in location

  • tcp_nopush(sendfile開啟的情況下,提高網路套件的傳輸效率)

    • 設定語法:tcp_nopush on|off;

    • #預設:無

    • Context:http,server,location

  • tcp_nodelay(keepalive連線下,提升網路包的傳輸即時性)

    • 設定語法:tcp_nodely on|off;

    • ##預設:無

    • Context:http,server,location

  • gzip(壓縮)

    • 設定語法:gzip on|off;

    • 預設:無

    • #Context:http,server,location,if in location

  • gizp_comp_level(壓縮比)

    • 設定語法:gzip_comp_level level;

    • #預設:無;

    • Context:http,server,location

  • #gzip_http_version(gzip的http的版本)

    • #設定語法:gzip_http_version 1.0|1.1;

    • 預設:無

    • Context:http,server,location

  • gzip_static(預讀gzip功能)

    • 設定語法:gzip_static on|off|always;

    • 預設:gzip_static off;

    • Context:http,server,location

    ##4、瀏覽器快取

    HTTP協定定義的快取機制(如:Expires;Cache-control等)

      瀏覽器無快取:
      • 瀏覽器請求→無快取→請求WEB伺服器→請求相應,協商→呈現
      #客戶端有快取
      • #瀏覽器請求→有快取→校驗過期→呈現
      #校驗過期機制
    校驗方式#校驗是否過期協定中的Etag頭資訊校驗##Last-Modified有資訊校驗Last-Modified
    • 第一次要求:

    Nginx的場景實踐

    • #第二次請求:

    Nginx的場景實踐

    • #expires(response的headers新增Cache-Control、Expires)

      • 設定語法:expires [modified] time; expires epoch |max |off;

      • 預設:expires off;

      • Context:http,server,location,if in location

    #5、跨站訪問

    Nginx如何開啟跨站訪問? Access-Controller-Allow-Origin
    • add_header

      • 設定語法:add_header name value [always];

      • 預設:無

      • Context:http,server,location,if in location

    ##name可以為Access-Controller-Allow-Origin 與 Access-Controller-Allow-Method
    #6、防盜鏈

    基於http_refer防盜鏈配置模組

    設定語法:valid_referers none|blocked|server_names|string...;


    預設:無

    • Context:server,location

    • valid_referers none blocked IP
      if($invalid_referer) {
          return 403;
      }
      登入後複製
      • 提醒

        :可以使用curl來測試配置好的防盜鏈:

        curl -e "http:www.baidu.com" -I IP
    • 二、Nginx作為代理服務

      • 正向代理程式

      ##物件是客戶端(比如說想存取外網,把代理伺服器設到代理位址,客戶端可以存取任何網站)
      • #反向代理程式
      • 物件是服務端(不需要關心存取的是哪一台伺服器,反向代理就放在服務端。反向代理程式會幫我們處理請求)

      • proxy_pass

    設定語法:proxy_pass URL;
      預設:無
    • Context:location,if in location,limit_except
      • #其他代理程式的一些語法
      • 補充

      • #proxy_buffering(緩衝區)

      • 語法配置:proxy_buffering on | off;
    • ## 預設:無;

      • Context:http,server,location
      • buffer_size、proxy_buffers、proxy_busy_buffers_size


    • ## proxy_redirect(跳轉重定向)
      • 設定語法:proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;
      • 預設:無)無錯
      • Context:http,server,location

    #proxy_set_header(頭資訊)

    ######### ####設定語法:proxy_set_header file value;#############預設:proxy_set_header Host $proxy_host;proxy_set_header Connection close;#############Context:http,#########################夫server,location############擴充:proxy_hide_header、proxy_set_body###############proxy_connect_timeout(超時)##############proxy_connect_timeout(超時)##############proxy_connect_timeout(超時)########### ####設定語法:proxy_connect_timeout time;#############預設:無############Context:http,server,location####### ######擴充:proxy_read_timeout、proxy_send_timeout###############設定檔中的範例:###
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect default;
    
    proxy_set_header HOST $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
    登入後複製
    ###三、Nginx作為負載平衡服務##### #####負載平衡###:建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴展網路設備和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網絡的靈活性和可用性。 ###負載平衡,英文名稱為Load Balance,其意思是分攤到多個作業單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。 ############upstream############### 配置語法: upstream name {...}############預設:無############Context:http##################簡單設定範例###:###
    upstream ronaldo {
            server ip:port [param];
            server ip:port [param];
            server ip:port [param];
    }
    server {
        location / {
            proxy_pass http://ronaldo;
        }
    }
    登入後複製

    param参数解释:

    對應頭資訊
    Expires、 Cache-Control(max-age)
    Etag
    param意义
    down当前的server暂时不参与负载均衡
    weight=num权重,num越大,轮询到的概率越大
    backup预留的备份服务器
    max_fails允许请求失败的次数
    fail_timeout经过max_fails失败后,服务暂停的时间(默认是10s)
    max_conns限制最大的接收的连接数

    调度算法:

    算法意义
    轮询按时间顺序逐一分配到不同的后端服务器
    加权轮询weight值越大,分配到的访问几率越高
    ip_hash每个请求按访问IP的hash结果分配,这样来自同一个IP就固定访问同一个后端服务器
    least_conn最少连接数,哪个服务器连接数少就分发
    url_hash按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
    hash关键字值hash自定义的key
    • ip_hash:

      • 只需要在upstream中加入 ip_hash; 即可

      • 缺陷:如果走代理,那么remote_addr就不是用户真实的ip

    • url_hash(1.7.2版本以后可用):

      • 配置语法:hash key [consistent];

      • 默认:无

      • Context:upstream

    key可以是$request_uri,根据url进行hash

    四、Nginx作为缓存服务

    1、缓存的类型

    • 服务端缓存。例:memcache、reids

    • 代理缓存。例:Nginx缓存服务端的数据

    • 客户端缓存。

    Nginx的場景實踐

    2、常用缓存配置

    • proxy_cache_path

      • 配置语法proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size] [use_temp_path]...

      • 默认:无

      • Context:http

    • proxy_cache

      • 配置语法:proxy_cache zone | off;

      • 默认:proxy_cache off;

      • Context:http,server,location

    • proxy_cache_valid(缓存过期周期)

      • 配置语法:proxy_cache_valid [code...] time

      • 默认:无

      • Context:http、server、location

    • proxy_cache_key(缓存的维度)

      • 配置语法:proxy_cache_key string;

      • 默认:proxy_cache_key $scheme$proxy_host$request_uri;

      • Context:http、server、location

    常见配置:

    proxy_cache_path cache_path levels=1:2 keys_zone=key_name:10m max_size=10g inactive=60m use_temp_path=off;
    
    server {
        loaction / {
            proxy_pass http://ronaldo;
            proxy_cache key_name;
            proxy_cache_valid 200 304 12h;
            proxy_cache_valid any 10m;
            proxy_cache_key $host$uri$is_args$args;
            add_header Nginx-Cache "$upstream_cache_status";
    
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
    }
    登入後複製

    2、清除指定缓存

    • rm -rf 缓存目录内容

    • 第三方扩展模块:ngx_cache_purge

    3、如何让部分页面不缓存

    • proxy_no_cache

      • 配置语法:proxy_no_cache string ...;

      • 默认:无

      • Context:http,server,location

    简单示例

    if ($request_uri ~ ^/(url_3|login|register|password\/reset)) {
        set $cookie_nocache 1;
    }
    
    location / {
        proxy_no_cache $cookie_nocache;
    }
    登入後複製

    4、大文件分片请求

    • slice

      • 语法配置:slice size;

      • 默认:slice 0;

      • Context:http、server,location

    优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他请求不受影响。
    缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽等待情况。

    相关推荐:

    关于Nginx的基础内容

    Nginx编译安装Lua模块

    以上是Nginx的場景實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.聊天命令以及如何使用它們
    1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

    確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

    linux怎麼查看nginx是否啟動 linux怎麼查看nginx是否啟動 Apr 14, 2025 pm 12:48 PM

    在 Linux 中,使用以下命令檢查 Nginx 是否已啟動:systemctl status nginx根據命令輸出進行判斷:如果顯示 "Active: active (running)",則 Nginx 已啟動。如果顯示 "Active: inactive (dead)",則 Nginx 已停止。

    linux怎麼啟動nginx linux怎麼啟動nginx Apr 14, 2025 pm 12:51 PM

    在 Linux 中啟動 Nginx 的步驟:檢查 Nginx 是否已安裝。使用 systemctl start nginx 啟動 Nginx 服務。使用 systemctl enable nginx 啟用在系統啟動時自動啟動 Nginx。使用 systemctl status nginx 驗證啟動是否成功。在 Web 瀏覽器中訪問 http://localhost 查看默認歡迎頁面。

    nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

    如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

    nginx403怎麼解決 nginx403怎麼解決 Apr 14, 2025 am 10:33 AM

    如何解決 Nginx 403 Forbidden 錯誤?檢查文件或目錄權限;2. 檢查 .htaccess 文件;3. 檢查 Nginx 配置文件;4. 重啟 Nginx。其他可能原因還包括防火牆規則、SELinux 設置或應用程序問題。

    怎麼把nginx訪問地址設置成服務器ip 怎麼把nginx訪問地址設置成服務器ip Apr 14, 2025 am 11:36 AM

    要在 Nginx 中將訪問地址設置為服務器 IP,請:配置服務器塊,設置監聽地址(如:listen 192.168.1.10:80)設置服務器名稱(如:server_name example.com www.example.com),或將其留空以訪問服務器 IP保存並重新加載 Nginx 以應用更改

    nginx怎麼查看運行狀態 nginx怎麼查看運行狀態 Apr 14, 2025 am 11:48 AM

    查看 Nginx 運行狀態的方法有:使用 ps 命令查看進程狀態;查看 Nginx 配置文件 /etc/nginx/nginx.conf;使用 Nginx 狀態模塊啟用狀態端點;使用 Prometheus、Zabbix 或 Nagios 等監控工具。

    怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

    啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

    See all articles