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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...