Nginx簡介及配置文件詳解

来源:https://www.cnblogs.com/jiufengjing/archive/2018/08/17/9492025.html
-Advertisement-
Play Games

一、Nginx簡介 Nginx是一款開源代碼的高性能HTTP伺服器和反向代理伺服器,同時支持IMAP/POP3/SMTP代理服務 1.Nginx工作原理 Nginx由內核和模塊組成,完成工作是通過查找配置文件將客戶端請求映射到一個location block(location是用於URL匹配的命令) ...


一、Nginx簡介

   Nginx是一款開源代碼的高性能HTTP伺服器和反向代理伺服器,同時支持IMAP/POP3/SMTP代理服務

1.Nginx工作原理

       Nginx由內核和模塊組成,完成工作是通過查找配置文件將客戶端請求映射到一個location block(location是用於URL匹配的命令),location配置的命令會啟動不同模塊完成工作。

       Nginx模塊分為核心模塊,基礎模塊和第三方模塊。

           核心模塊:HTTP模塊、EVENT模塊(事件)、MAIL模塊。

           基礎模塊:HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊、HTTP Rewrite模塊。

           第三方模塊:HTTP Upstream Request Hash模塊、Notice模塊、HTTP Access Key模塊。

2.性能優勢

       web伺服器,處理靜態文件、索引文件以及自動索引效率高。

       代理伺服器,快速高效反向代理,提升網站性能。

       負載均衡器,內部支持Rails和PHP,也可支持HTTP代理伺服器,對外進行服務。同時支持簡單容錯和利用演算法進行負載均衡。

       性能方面,Nginx專門為性能設計,實現註重效率。採用Poll模型,可以支持更多的併發連接,併在大併發時占用很低記憶體。

       穩定性方面,採用分階段資源分配技術,使CPU資源占用率低。

       高可用性方面,支持熱備,啟動迅速。

二、配置文件詳解

Nginx配置文件(/usr/local/nginx/conf/nginx.conf)

配置文件主要包括全局配置,I/O事件配置和HTTP配置這三大塊內容,配置語句的格式“關鍵字      值;”(末尾以分號表示結束),以“#”開始的部分表示註釋。

1)全局配置

#Nginx的worker進程運行用戶以及用戶組

#user  nobody nobody;

#Nginx開啟的進程數

worker_processes  1;

#worker_processes auto;

#以下參數指定了哪個cpu分配給哪個進程,一般來說不用特殊指定。如果一定要設的話,用0和1指定分配方式.

#這樣設就是給1-4個進程分配單獨的核來運行,出現第5個進程是就是隨機分配了。eg:

#worker_processes 4     #4核CPU

#worker_cpu_affinity 0001 0010 0100 1000

       

#定義全局錯誤日誌定義類型,[debug|info|notice|warn|crit]

#error_log  logs/error.log  info;

#指定進程ID存儲文件位置

#pid        logs/nginx.pid;

#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求並不是那麼均勻,所以最好與ulimit -n的值保持一致。

#vim /etc/security/limits.conf

#  *                soft    nproc          65535

#  *                hard    nproc          65535

#  *                soft    nofile         65535

#  *                hard    nofile         65535

worker_rlimit_nofile 65535;

2)事件配置

1. events {

#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網路I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

use epoll;

#每個進程可以處理的最大連接數,理論上每台nginx伺服器的最大連接數為worker_processes*worker_connections。理論值:worker_rlimit_nofile/worker_processes

#註意:最大客戶數也由系統的可用socket連接數限制(~ 64K),所以設置不切實際的高沒什麼好處

worker_connections  65535;   

#worker工作方式:串列(一定程度降低負載,但伺服器吞吐量大時,關閉使用並行方式)

#multi_accept on;

  }

3)http參數

#文件擴展名與文件類型映射表

include mime.types;

#預設文件類型

default_type application/octet-stream;

 

#日誌相關定義

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

#                  '$status $body_bytes_sent "$http_referer" '

#                  '"$http_user_agent" "$http_x_forwarded_for"';

#定義日誌的格式。後面定義要輸出的內容。

#1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;

#2.$remote_user :用來記錄客戶端用戶名稱;

#3.$time_local :用來記錄訪問時間與時區;

#4.$request  :用來記錄請求的url與http協議;

#5.$status :用來記錄請求狀態;

#6.$body_bytes_sent :記錄發送給客戶端文件主體內容大小;

#7.$http_referer :用來記錄從那個頁面鏈接訪問過來的;

#8.$http_user_agent :記錄客戶端瀏覽器的相關信息

#連接日誌的路徑,指定的日誌格式放在最後。

#access_log  logs/access.log  main;

#只記錄更為嚴重的錯誤日誌,減少IO壓力

 error_log logs/error.log crit;

#關閉日誌

#access_log  off;

#預設編碼

#charset utf-8;

#伺服器名字的hash表大小

 server_names_hash_bucket_size 128;

#客戶端請求單個文件的最大位元組數

 client_max_body_size 8m;

#指定來自客戶端請求頭的hearerbuffer大小

 client_header_buffer_size 32k;

#指定客戶端請求中較大的消息頭的緩存最大數量和大小。

large_client_header_buffers 464k;

#開啟高效傳輸模式。

sendfile        on;

#防止網路阻塞

tcp_nopush on;

tcp_nodelay on;    

#客戶端連接超時時間,單位是秒

keepalive_timeout 60;

#客戶端請求頭讀取超時時間

client_header_timeout 10;

#設置客戶端請求主體讀取超時時間

client_body_timeout 10;

#響應客戶端超時時間

send_timeout 10;

#FastCGI相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 464k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

 

gzip模塊設置

#開啟gzip壓縮輸出

gzip on;

#最小壓縮文件大小

gzip_min_length 1k;

#壓縮緩衝區

gzip_buffers 416k;

#壓縮版本(預設1.1,前端如果是squid2.5請使用1.0)

gzip_http_version 1.0;

#壓縮等級 1-9 等級越高,壓縮效果越好,節約寬頻,但CPU消耗大

gzip_comp_level 2;

#壓縮類型,預設就已經包含text/html,所以下麵就不用再寫了,寫上去也不會有問題,但是會有一個warn。

gzip_types text/plain application/x-javascript text/css application/xml;

#前端緩存伺服器緩存經過壓縮的頁面

gzip_vary on;

4)虛擬主機基本設置

#虛擬主機定義

server {

#監聽埠

listen       80;

#訪問功能變數名稱

server_name  localhost;

#編碼格式,若網頁格式與此不同,將被自動轉碼

#charset  utf-8;

#虛擬主機訪問日誌定義

#access_log  logs/host.access.log  main;

#對URL進行匹配

location /{

#訪問路徑,可相對也可絕對路徑

root   html;

#首頁文件。以下按順序匹配

index  index.html index.htm;

 } 

#錯誤信息返回頁面

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html

#error_page   500 502 503 504  /50x.html;

location = /50x.html {       //錯誤頁面配置

root   html;

  }

#訪問URL以.php結尾則自動轉交給127.0.0.1

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ \.php$ {

#    proxy_pass   http://127.0.0.1;

#    }

#php腳本請求全部轉發給FastCGI處理

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

#    root           html;

#    fastcgi_pass   127.0.0.1:9000;

#    fastcgi_index  index.php;

#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

#    include        fastcgi_params;

#    }

#禁止訪問.ht頁面 (需ngx_http_access_module模塊)

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

#    deny  all;

#    }

    }

#HTTPS虛擬主機定義

# HTTPS server

#

#server {

#    listen       443 ssl;

#    server_name  localhost;

#    ssl_certificate      cert.pem;

#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;

#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;

#    ssl_prefer_server_ciphers  on;

#    location / {

#        root   html;

#        index  index.html index.htm;

#    }

#    }

5)Nignx狀態監控

#Nginx運行狀態,StubStatus模塊獲取Nginx自啟動的工作狀態(編譯時要開啟對應功能)

#location /NginxStatus {

#    #啟用StubStatus的工作訪問狀態    

#    stub_status    on;

#    #指定StubStaus模塊的訪問日誌文件

#    access_log    logs/Nginxstatus.log;

#    #Nginx認證機制(需Apache的htpasswd命令生成)

#    #auth_basic    "NginxStatus";

#    #用來認證的密碼文件

#    #auth_basic_user_file    ../htpasswd;    

#    }

訪問:http://IP/NginxStatus(測試就不加密碼驗證相關)

6)反向代理

#以下配置追加在HTTP的全局變數中

 

#nginx跟後端伺服器連接超時時間(代理連接超時)

proxy_connect_timeout      5;

#後端伺服器數據回傳時間(代理髮送超時)

proxy_send_timeout         5;

#連接成功後,後端伺服器響應時間(代理接收超時)

proxy_read_timeout         60;

#設置代理伺服器(nginx)保存用戶頭信息的緩衝區大小

proxy_buffer_size          16k;

#proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置

proxy_buffers              432k;

#高負荷下緩衝大小(proxy_buffers*2)

proxy_busy_buffers_size    64k;

#設定緩存文件夾大小,大於這個值,將從upstream伺服器傳

proxy_temp_file_write_size 64k;

#反向代理緩存目錄

proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;

#levels=1:2 設置目錄深度,第一層目錄是1個字元,第2層是2個字元

#keys_zone:設置web緩存名稱和記憶體緩存空間大小

#inactive:自動清除緩存文件時間。

#max_size:硬碟空間最大可使用值。

#指定臨時緩存文件的存儲路徑(路徑需和上面路徑在同一分區)

proxy_temp_path /data/proxy/temp

    

#服務配置

server {

#偵聽的80埠

listen       80;

server_name  localhost;

location /{

#反向代理緩存設置命令(proxy_cache zone|off,預設關閉所以要設置)

proxy_cache cache_one;

#對不同的狀態碼緩存不同時間

proxy_cache_valid 200 304 12h;

#設置以什麼樣參數獲取緩存文件名

proxy_cache_key $host$uri$is_args$args;

#後7端的Web伺服器可以通過X-Forwarded-For獲取用戶真實IP

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  

#代理設置

proxy_pass   http://IP;

#文件過期時間控制

expires    1d;

   }

#配置手動清楚緩存(實現此功能需第三方模塊 ngx_cache_purge)

location ~ /purge(/.*) {

allow    127.0.0.1;

deny    all;

proxy_cache_purge    cache_one    $host$1$is_args$args;

 }

#設置擴展名以.jsp、.php、.jspx結尾的動態應用程式不做緩存

location ~.*\.(jsp|php|jspx)?$ {

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  

proxy_pass http://http://IP; }

7)負載均衡

#負載均衡伺服器池

upstream my_server_pool {  

#調度演算法 

#1.輪循(預設)(weight輪循權值) 

#2.ip_hash:根據每個請求訪問IP的hash結果分配。(會話保持)   

#3.fair:根據後端伺服器響應時間最短請求。(upstream_fair模塊)

#4.url_hash:根據訪問的url的hash結果分配。(需hash軟體包)

#參數:

#down:表示不參與負載均衡

#backup:備份伺服器

#max_fails:允許最大請求錯誤次數

#fail_timeout:請求失敗後暫停服務時間。

 server   IP:80 weight=1 max_fails=2 fail_timeout=30;

 server   IP:80 weight=2 max_fails=2 fail_timeout=30;

  }

#負載均衡調用

server {

    ...

 location / {

  proxy_pass http://my_server_pool;

 }

 }

8)URL重寫

#根據不同的瀏覽器URL重寫

if($http_user_agent ~Firefox){

rewrite ^(.*)$  /firefox/$1 break;

}

if($http_user_agent ~ MSIE){

rewrite ^(.*)$  /msie/$1 break;

}

#實現功能變數名稱跳轉 

 location /{

 rewrite ^/(.*)$ https://web8.example.com$1 permanent;   

}

9)IP限制

#限制IP訪問

location /{

deny   IP;

allow   IP/24; 

allow   IP;

deny   all;

}

10)Nginx相關命令

#啟動nginx

nginx

##檢查配置

nginx –t 

#關閉nginx

nginx -s stop

#平滑重啟

kill -HUP `cat /usr/local/nginx/logs/ginx.pid`


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 找球號(三) 時間限制:2000 ms | 記憶體限制:10000 KB 難度:2 找球號(三) 時間限制:2000 ms | 記憶體限制:10000 KB 難度:2 xiaod現在正在某個球場負責網球的管理工作。為了方便管理,他把每個球都編了號,且每個編號的球的總個數都是偶數。有一天,xiaod發現少 ...
  • 1.1硬體需求建議: CPU:32/64 bit 2.27GHz雙核心以上之CPU; 記憶體:8GB以上; 硬碟:300GB,7200轉以上; 建議資料庫、Confluence等各自獨立一臺伺服器。 1.2軟體需求建議 推薦Windows Server 2012 R2操作系統,或者其他支持JAVA的W ...
  • 設計一個支持 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。 push(x) -- 將元素 x 推入棧中。 pop() -- 刪除棧頂的元素。 top() -- 獲取棧頂元素。 getMin() -- 檢索棧中的最小元素。 示例: MinStack minStack = new ...
  • Find Sequence The Hamming Distance 由於n和m的範圍是0-10^6,所以需要用32位二進位。 Brackets Roman Numerals The Longest Palindromic 我的思路就是把字元串截取得到各種長度的子字元串,然後判斷截取到的字元串是不是 ...
  • 什麼是wget     wget用原始幫助裡面的英文來講就是:The non interactive network downloader,非互動式網路下載器。它支持HTTP、HTTPS、FTP等協議,同時也支持基於HTTP代理的下載。其他主要特點如下所示: 可以工作於後臺,而不 ...
  • 系統計劃任務 大部分系統管理工作都是通過定期自動執行某個腳本來完成的,那麼如何定期執行某個腳本,從而實現運維的自動化,這就要藉助Linux的cron功能了. 計劃任務分為一次性計劃任務和周期性計劃任務. 一次性計劃任務 每晚11店30分開啟網站服務. 周期性計劃任務 每周一的凌晨3點30分把/var ...
  • ROBOCOPY 命令: // 描述: 相比較 xcopy、copy 來說,複製的功能就強大很多, xcopy、copy 是單線程的,robocopy是多線程的,但是和一些專業的複製軟體相比速度還是要差一些。 當然其參數也是最多的,想記都記不住 --_-- ~ // 語法: robocopy <so ...
  • vim是linux下功能非常強大的文本編輯器,因為是命令操作,所以學習來比較累,下麵總結一下常用的幾點操作。 1.使用方法 在終端下直接輸入:vim test.txt,即可打開test.txt文件進行編輯,若不存在test.txt文件,則表示即將新建此文件。 2.新建或編輯文件 vim new.tx ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...