深入淺出Nginx之二 基本配置

2021-09-02 04:22:21 字數 4305 閱讀 7638

從這篇部落格開始,將對nginx的配置檔案nginx.conf的常用配置做詳細的解釋,並且以附件的形式給出實際的配置檔案內容。

shell** 收藏**

user nick excelsoft;

說明:以root賬號執行時,設定worker程序所屬的使用者/組。

shell** 收藏**

worker_processes 2;

說明:設定worker程序的數目,一般和cpu核心數一致,可設定為其2倍,以優化效能。

其他:檢視cpu核心數:cat /proc/cpuinfo | grep processor

如果為雙核,則顯示:

processor : 0

processor : 1

shell** 收藏**

error_log /opt/nginx/logs/error.log notice;

說明:指定錯誤日誌的路徑、級別,所有的級別包括debug、info、notice、warn、error、crit

shell** 收藏**

pid /opt/nginx/logs/nginx.pid;

說明:指定nginx啟動時的程序檔案。

其他:1. nginx啟動時,獲取該檔案的寫許可權,將當前程序(master process)的pid寫入到nginx.pid檔案。

2. 一旦nginx啟動,該檔案即成為可讀的,無法再次寫入,可以避免nginx的重複啟動。

3. nginx.pid的檔案內容是當前程序的pid,因此可以這樣關閉:

kill `cat /opt/nginx/logs/nginx.pid`

不需要檢視nginx的程序號:ps -ef | grep nginx

shell** 收藏**

worker_rlimit_nofile 65535;

說明:設定乙個nginx程序能夠開啟的最大檔案數。

其他:1. 預設情況下,nginx程序能夠開啟的檔案數受限於當前的作業系統。

2. 檢視系統的最大檔案數:當前的centos為1024。

ulimit -a

ulimit -n

shell** 收藏**

events {

use epoll;

worker_connections 65535;

說明:1. 設定網路io模型:

epoll:在linux核心2.6以上版本可用,檢視linux版本:cat /proc/version

和標準的select模式比較,處理時間更短,採用了類似於資料庫的索引機制,以空間換時間.

kqueue:適用於freebsd系統。

2. worker_connections:單個worker程序允許的最大併發連線數。

理論上,每台nginx伺服器的最大連線數為worker_processes * worker_connections,

但是nginx進行排程時,分配使用者請求給worker程序並不均勻,無法達到最大值。

shell** 收藏**

charset utf-8;

說明:http作用域,設定編碼格式,可不統一設定。

shell** 收藏**

說明:http作用域.

1. 該日誌格式定義為access名稱。

2. 日誌格式:原有選項

$remote_user:客戶端使用者名稱。

$time_local:客戶端進行訪問時的本地時間。 [21/jun/2014:23:35:19 +0800]

$request:請求方式、路徑、協議。 [get /html/ http/1.1]

$status:請求狀態碼,成功為200。

$body_bytes_sent:傳送給客戶端的檔案主體大小。 [49]

$http_user_agent:客戶端瀏覽器。

3. 日誌格式:追加選項

$sent_http_content_type:響應的內容型別。 [text/html; charset=utf-8]

$request_time:處理使用者請求的時間,包括接收請求、返回響應的時間。 [0.000]

shell** 收藏**

access_log /opt/nginx/logs/access.log access;

說明:http作用域,指定日誌檔案的位置。

shell** 收藏**

sendfile on;

說明:http作用域,是否開啟linux系統的零拷貝(zero copy)功能,針對普通的應用設為on。

shell** 收藏**

tcp_nopush on;

說明:http作用域,預設為off,將小的資料報組裝傳送,避免大量資料報導致的網路擁塞。

shell** 收藏**

tcp_nodelay on;

說明:http作用域,設定響應無延遲,預設為on. 高版本的linux系統允許和tcp_nopush同時使用。

shell** 收藏**

keepalive_timeout 65;

說明:http作用域,設定連線超時時間為65s

1. 如果有大量顯示、大檔案上傳等,設定地調整為乙個較大值。

2. 不能設定的太大,避免惡意的連線占用。

shell** 收藏**

gzip on;

說明:http作用域,開啟gzip壓縮功能。

1. 在服務端對響應內容進行壓縮,客戶端的瀏覽器具有gzip解壓縮能力。

2. 壓縮比率高達30%以上,有效節省傳輸頻寬。

shell** 收藏**

gzip_min_length 1k;

說明:頁面內容大於1k時才進行壓縮,避免內容過少導致的越壓越大現象。

shell** 收藏**

gzip_buffers 8 32k;

說明:壓縮時需要的緩衝區大小,避免大檔案的丟失. 一共8塊、每塊32k。

shell** 收藏**

說明:預設為http/1.1協議,早期的瀏覽器可能不支援gzip功能。

shell** 收藏**

gzip_comp_level 3;

說明:設定壓縮比率,範圍為1-9,不宜設定的過大、以避免影響了cpu的效能。

shell** 收藏**

說明:進行壓縮的檔案型別

1. gzip缺省會對text/html進行壓縮,因此不用指定。

shell** 收藏**

gzip_vary on;

說明:根據http響應頭判斷瀏覽器是否支援gzip壓縮,不支援即不壓縮。

使用火狐檢視:

響應頭:vary: accept-encoding

請求頭:accept-encoding gzip, deflate

shell** 收藏**

server_names_hash_bucket_size 128;

說明:後端伺服器名字的雜湊儲存大小,如果伺服器很多,可以適當調大一點。

shell** 收藏**

client_header_buffer_size 32k;

說明:說明:nginx預設使用該大小的buffer來讀取header值。

shell** 收藏**

large_client_header_buffers 4 32k;

說明:如果header過大,使用該buffer來讀取header。

shell** 收藏**

client_max_body_size 100m;

說明:客戶端能夠上傳的最大檔案大小。

shell** 收藏**

client_body_buffer_size 128k;

說明:處理客戶端請求(通過post傳送的資料、檔案上傳)的buffer大小,

如果超過此大小限制,則全部或部分儲存到乙個臨時檔案。

啟動、關閉:su - root

檢查配置檔案是否修改正確:

shell** 收藏**

/usr/local/nginx/sbin/nginx -t

平滑啟動:

shell** 收藏**

kill -hup `cat /opt/nginx/logs/nginx.pid`

深入淺出Nginx

前言 nginx是一款輕量級的web伺服器 反向 伺服器,由於它的記憶體占用少,啟動極快,高併發能力強,在網際網路專案中廣泛應用。架構圖上圖基本上說明了當下流行的技術架構,其中nginx有點入口閘道器的味道。反向 伺服器?經常聽人說到一些術語,如反向 那麼什麼是反向 什麼又是正向 呢?正向 正向 示...

深入淺出Nginx

前言 nginx是一款輕量級的web伺服器 反向 伺服器,由於它的記憶體占用少,啟動極快,高併發能力強,在網際網路專案中廣泛應用。架構圖上圖基本上說明了當下流行的技術架構,其中nginx有點入口閘道器的味道。反向 伺服器?經常聽人說到一些術語,如反向 那麼什麼是反向 什麼又是正向 呢?正向 正向 示...

深入淺出nginx

什麼是nginx?nginx 是乙個高效能的http和反向 web伺服器,同時也提供了imap pop3 smtp服務。說到nginx,那自然會聯想到反向 那麼什麼是反向 呢?既然有反向 那肯定也有正向 正向 又是什麼呢?什麼是正向 正向 意思是乙個位於客戶端和原始伺服器 origin server...