有下面的Nginx配置:
worker_processes auto;
worker_rlimit_nofile 51200;events {use epoll;worker_connections 51200;multi_accept on;
}http {include mime.types;default_type application/octet-stream;server_names_hash_bucket_size 512;client_max_body_size 50m;client_header_buffer_size 32k;client_body_buffer_size 128k;large_client_header_buffers 4 32k;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 60;# fastcgifastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 256k;fastcgi_intercept_errors on;# gzipgzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 6;gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;gzip_vary on;# http_proxyproxy_connect_timeout 75;proxy_send_timeout 75;proxy_read_timeout 75;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;server_tokens off;limit_conn_zone $binary_remote_addr zone=perip:10m;limit_conn_zone $server_name zone=perserver:10m;# include virtual host configinclude vhost/*.conf;include /var/hwsmaster/default/wwwconf/nginx/*.conf;include /var/hwsmaster/wwwconf/nginx/*.conf;server {listen 80 default;return 403;}
}
下面開始研究這些配置的意思。
目錄
- 01-`worker_processes auto`
- 02-`worker_rlimit_nofile 51200`
- 03-`events`塊
- 04-`include mime.types`
- 05-`default_type application/octet-stream`
- 06-`server_names_hash_bucket_size 512`
- 07-`client_max_body_size 50m`
- 08-`client_header_buffer_size 32k`
- 09-`client_body_buffer_size 128k;`
- 10-`large_client_header_buffers 4 32k`
- 11-`sendfile on`
- 12-`tcp_nopush on;`
- 13-`tcp_nodelay on;`
- 14-`keepalive_timeout 60;`
- 015-`FastCGI`配置
- 016-對gzip的配置
- 017-反向代理相關參數設置
- 018-`server_tokens off;`
- 019-限制單IP的并發連接數的相關配置語句
- 20-配置每個server name的并發數
01-worker_processes auto
worker_processes auto;
這條Nginx配置語句worker_processes auto
用于設置Nginx服務器啟動時的工作進程數量。具體作用如下:
-
worker_processes
: 這是一個指令,用于設置Nginx服務器的工作進程數。工作進程是實際處理客戶端請求的進程,每個工作進程都是一個獨立的進程。 -
auto
: 這個參數表示讓Nginx自動確定工作進程的數量。Nginx會根據系統的可用CPU核心數來動態地設置工作進程的數量。通常,這是一個比較合理的設置,因為它允許Nginx根據系統負載來自適應地調整工作進程的數量,以提高性能。
總體而言,這個配置項有助于優化Nginx服務器的性能,使其能夠更好地處理并發請求。在具體應用中,你可以根據服務器的硬件配置和負載情況來調整這個值,以達到最佳的性能和資源利用率。
02-worker_rlimit_nofile 51200
worker_rlimit_nofile 51200;
這條Nginx配置語句worker_rlimit_nofile 51200;
用于設置Nginx工作進程的文件描述符限制。具體來說,它指定了每個Nginx工作進程能夠打開的文件描述符的最大數量。
解釋一下:
-
worker_rlimit_nofile
: 這是Nginx的一個指令,用于設置工作進程的文件描述符限制。 -
51200
: 這個值表示文件描述符的數量限制。在這個例子中,每個Nginx工作進程可以打開的文件描述符的最大數量被設置為51200。
文件描述符是操作系統用于跟蹤已打開文件的一種機制。對于Web服務器來說,打開的文件可以包括日志文件、配置文件、靜態資源文件等。通過調整文件描述符的限制,可以影響Nginx服務器的性能和可用性,尤其是在高負載環境下。
在一些高流量的Web服務器場景中,可能需要增加文件描述符的限制,以確保Nginx能夠處理大量的并發連接和請求。然而,需要注意的是,修改文件描述符限制可能需要超級用戶權限,并且過高的限制可能導致系統資源耗盡。因此,調整這個值時需要謹慎,并且需要根據實際需求和系統資源進行合理的配置。
03-events
塊
能否解釋下面下面這段Nginx的配置語句:
events {use epoll;worker_connections 51200;multi_accept on;
}
這段Nginx配置語句位于events
塊中,用于配置與事件處理相關的參數。下面是對每個指令的解釋:
-
use epoll;
: 這個指令指定Nginx在Linux系統上使用epoll
作為事件驅動模型。epoll
是一種高效的I/O多路復用機制,用于處理大量并發連接,特別適用于高性能的網絡服務器。 -
worker_connections 51200;
: 這個指令設置每個工作進程能夠同時處理的最大連接數。在這個例子中,每個工作進程可以處理的最大連接數被設置為51200。這個值應該根據服務器的負載和性能需求來調整。如果系統上有大量的并發連接,這個值可能需要增加。 -
multi_accept on;
: 這個指令啟用了multi_accept
功能,允許一個工作進程在一個事件循環中同時接受多個新連接。這有助于提高連接的接受速度,特別是在高并發的情況下。在高負載環境中,將multi_accept
設置為on
可能對性能有一定的提升。
這些配置項都是與Nginx的事件處理機制相關的,主要用于優化Nginx服務器的性能,特別是在面對大量并發連接時。在實際應用中,這些參數的合理調整可以根據服務器的硬件配置和預期的負載來進行,以確保服務器能夠高效地處理并發請求。
04-include mime.types
include mime.types;
這句語句include mime.types;
位于Nginx配置文件的http
塊中,用于引入一個文件,其中包含了關于文件類型(MIME types)的定義。以下是對這個語句的解釋:
-
include
: 這是Nginx配置語言中的指令,用于包含其他配置文件或片段。 -
mime.types
: 這是一個包含了文件類型及其對應MIME類型的定義的文件。MIME類型(Multipurpose Internet Mail Extensions)是一種標識文件類型的方法,它在互聯網上用于指示如何處理文件的內容類型。例如,text/html
表示HTML文檔,image/jpeg
表示JPEG圖像。
通過使用include mime.types;
,Nginx實際上將mime.types
文件中定義的MIME類型引入到當前的http
塊中,以便在配置文件中使用這些類型。這樣做的好處是可以集中管理文件類型,而不必在主配置文件中直接定義所有的MIME類型。這也使得維護和更新文件類型變得更加方便。
通常,mime.types
文件包含了大量標準的文件類型和對應的MIME類型,但你也可以根據需要進行修改或添加自定義的類型。這個文件通常在Nginx的安裝目錄中,例如/etc/nginx/mime.types
。
05-default_type application/octet-stream
default_type application/octet-stream;
這句語句default_type application/octet-stream;
位于Nginx配置文件的http
塊中,用于設置默認的MIME類型。以下是對這個語句的解釋:
-
default_type
: 這是Nginx配置語言中的指令,用于設置默認的MIME類型。 -
application/octet-stream
: 這個值表示當Nginx無法確定文件的具體MIME類型時,將使用application/octet-stream
作為默認的MIME類型。application/octet-stream
通常用于二進制文件,表示未知的二進制數據類型。
當客戶端請求一個文件時,服務器通常會通過文件的擴展名或其他方法來確定其MIME類型,以便正確地傳送給客戶端。然而,有時服務器可能無法明確地識別文件類型,或者文件沒有擴展名。在這種情況下,Nginx會使用default_type
指定的MIME類型作為默認值。
設置默認的MIME類型對于確保正確的內容類型傳遞是很重要的,因為它影響到客戶端如何解釋和處理接收到的數據。使用application/octet-stream
通常是一個保守的選擇,將未知的文件類型視為二進制數據,避免客戶端可能對未知類型的文件進行不正確的處理。
06-server_names_hash_bucket_size 512
server_names_hash_bucket_size 512;
這句語句server_names_hash_bucket_size 512;
位于Nginx配置文件的http
塊中,用于配置服務器名稱的哈希桶大小。以下是對這個語句的解釋:
-
server_names_hash_bucket_size
: 這是Nginx的一個指令,用于設置服務器名稱哈希桶的大小。哈希桶是一種數據結構,用于提高查找操作的效率。在這個上下文中,它主要用于加速對服務器名稱的查找。 -
512
: 這個值表示哈希桶的大小為512。實際上,這是一個相對較大的哈希桶大小,適用于包含大量服務器塊的Nginx配置。較大的哈希桶大小可以減少哈希沖突的可能性,提高對服務器名稱的快速查找效率。
Nginx使用哈希桶來快速匹配請求的Host
頭(即域名),以確定應該使用哪個server
塊來處理請求。較大的哈希桶大小可以降低哈希沖突的概率,從而減少了在查找服務器塊時的性能開銷。
通常情況下,你不太需要手動調整這個值,因為Nginx會根據配置中的server_name
數量動態地選擇一個合適的大小。但是在某些特殊情況下,例如有大量server
塊的配置文件,手動調整這個值可能有助于提高性能。
07-client_max_body_size 50m
client_max_body_size 50m;
這句語句client_max_body_size 50m;
位于Nginx配置文件的http
塊中,用于設置客戶端請求中允許的最大請求體(request body)大小。以下是對這個語句的解釋:
-
client_max_body_size
: 這是Nginx的一個指令,用于限制客戶端請求中的請求體大小。 -
50m
: 這個值表示請求體的最大大小為50兆字節(Megabytes)。可以使用其他單位,如k
表示千字節,g
表示千兆字節。在這個例子中,50m
意味著最大請求體為50兆字節。
這個指令的作用是為了防止客戶端上傳過大的請求體,以保護服務器免受濫用或惡意攻擊。如果超過了指定的client_max_body_size
大小,Nginx將拒絕接收該請求,并返回相應的錯誤(通常是413 Request Entity Too Large)。
配置合適的client_max_body_size
對于確保服務器的安全性和穩定性是很重要的。你可以根據你的應用需求和服務器資源來調整這個值,確保它既滿足你的業務需求又不容易受到濫用。
08-client_header_buffer_size 32k
client_header_buffer_size 32k;
這句語句client_header_buffer_size 32k;
位于Nginx配置文件的http
塊中,用于配置客戶端請求頭(Client Header)緩沖區的大小。以下是對這個語句的解釋:
-
client_header_buffer_size
: 這是Nginx的一個指令,用于設置客戶端請求頭緩沖區的大小。 -
32k
: 這個值表示客戶端請求頭緩沖區的大小為32千字節(kilobytes)。可以使用其他單位,例如m
表示兆字節。
客戶端請求頭緩沖區用于存儲從客戶端接收到的HTTP請求頭部信息。HTTP請求頭包含了客戶端發送給服務器的元數據,如User-Agent、Host、Cookie等。通過設置client_header_buffer_size
,可以調整這個緩沖區的大小,以適應特定的應用需求。
一般而言,這個值的調整通常是在處理大量或較大的請求頭時使用,例如在處理上傳文件或包含大量Cookie信息的請求時。如果請求頭比較大,而緩沖區大小不足以容納整個請求頭,可能會導致請求被拒絕或丟失部分頭信息。
注意:調整這個值時需要權衡內存占用和性能,過大的值可能導致服務器占用更多內存。因此,根據實際的應用場景和服務器資源,選擇一個合適的緩沖區大小是很重要的。
09-client_body_buffer_size 128k;
client_body_buffer_size 128k;
略,參見 08-client_header_buffer_size 32k
10-large_client_header_buffers 4 32k
large_client_header_buffers 4 32k
這句語句large_client_header_buffers 4 32k;
位于Nginx配置文件的http
塊中,用于配置處理較大的客戶端請求頭的緩沖區大小。以下是對這個語句的解釋:
-
large_client_header_buffers
: 這是Nginx的一個指令,用于設置用于緩存較大客戶端請求頭的緩沖區的數量和每個緩沖區的大小。 -
4
: 這個值表示設置4個緩沖區。這是指用于存儲大型客戶端請求頭的緩沖區的數量。 -
32k
: 這個值表示每個緩沖區的大小為32千字節(kilobytes)。這是指每個緩沖區能夠容納的字節數。
當客戶端發送大型的HTTP請求頭時,Nginx可能需要分配較大的緩沖區來容納完整的請求頭,以確保不會因為緩沖區不足而導致請求處理異常。通過配置large_client_header_buffers
,可以調整緩沖區的數量和大小,以適應較大的請求頭。
在處理包含大量或較大請求頭的請求時,適當調整這些值是很重要的。如果緩沖區太小,可能會導致請求頭被截斷,從而影響服務器的正常行為。但是,過大的緩沖區數量和大小也可能導致服務器內存占用過高,因此需要根據實際情況進行權衡和調整。
11-sendfile on
sendfile on;
這句語句sendfile on;
位于Nginx配置文件的http
塊中,用于啟用或禁用sendfile系統調用的使用。以下是對這個語句的解釋:
-
sendfile
: 這是Nginx的一個指令,用于配置是否使用sendfile系統調用來傳輸文件。 -
on
: 這個值表示啟用sendfile。即,Nginx將嘗試使用操作系統提供的sendfile系統調用來高效地將文件內容發送給客戶端。
sendfile
是一種零拷貝技術,允許在內核空間和用戶空間之間直接傳輸文件,而無需在中間進行額外的緩沖。這可以提高文件傳輸的效率,特別是對于大文件或高并發的情況。
在大多數情況下,將sendfile
設置為on
是一個良好的選擇,因為它通常能夠提供更好的性能。然而,在某些特殊情況下,可能需要將其設置為off
,例如當文件內容需要在傳輸過程中進行處理時,或者與某些模塊不兼容時。
總的來說,sendfile
指令的作用是控制Nginx是否使用操作系統提供的高效文件傳輸機制來優化文件的發送。
12-tcp_nopush on;
tcp_nopush on;
這句語句tcp_nopush on;
位于Nginx配置文件的http
塊中,用于配置TCP連接中的TCP_CORK
選項(在某些系統上也可能是TCP_NOPUSH
)是否啟用。以下是對這個語句的解釋:
-
tcp_nopush
: 這是Nginx的一個指令,用于控制TCP連接中的TCP_CORK
(或TCP_NOPUSH
)選項。 -
on
: 這個值表示啟用TCP_CORK
選項。TCP_CORK
選項通常用于延遲發送數據,將小的數據塊聚合成更大的數據塊,以減少網絡傳輸的開銷。
啟用tcp_nopush
相當于啟用TCP_CORK
,它在Nginx中的作用是將一系列小的數據塊合并成更大的塊,然后再發送給客戶端。這可以減少TCP包的數量,提高傳輸效率。
需要注意的是,啟用tcp_nopush
可能會導致一定的延遲,因為數據需要積累到足夠的大小才會被發送。在某些情況下,可能需要根據具體的應用場景來權衡是否啟用該選項。
總體而言,tcp_nopush
是一個用于優化TCP數據傳輸的配置選項,適用于需要高效利用網絡帶寬的場景。
13-tcp_nodelay on;
tcp_nodelay on;
這句語句tcp_nodelay on;
位于Nginx配置文件的http
塊中,用于配置TCP連接中的TCP_NODELAY
選項是否啟用。以下是對這個語句的解釋:
-
tcp_nodelay
: 這是Nginx的一個指令,用于控制TCP連接中的TCP_NODELAY
選項。 -
on
: 這個值表示啟用TCP_NODELAY
選項。TCP_NODELAY
是TCP協議中的一個選項,用于禁用Nagle算法,該算法通過將小的數據塊聚合成更大的塊來減少網絡傳輸的開銷。
啟用tcp_nodelay
意味著Nginx將禁用Nagle算法,不會等待數據緩沖區中的小數據塊,而是立即發送數據。這可以減少數據傳輸的延遲,特別是對于一些實時性要求較高的應用場景,如在線游戲、實時通信等。
需要注意的是,啟用tcp_nodelay
可以提高實時性,但也可能導致網絡利用率的下降,因為發送小數據塊可能會增加網絡開銷。因此,在選擇是否啟用tcp_nodelay
時,需要考慮應用的實際需求以及網絡性能的權衡。
14-keepalive_timeout 60;
keepalive_timeout 60;
這句語句keepalive_timeout 60;
位于Nginx配置文件的http
塊中,用于設置HTTP keep-alive連接的超時時間。以下是對這個語句的解釋:
-
keepalive_timeout
: 這是Nginx的一個指令,用于配置HTTP keep-alive連接的超時時間。 -
60
: 這個值表示keep-alive連接的超時時間為60秒。具體來說,如果客戶端與服務器之間的連接在60秒內沒有活動(沒有新的請求或響應),那么這個連接將被Nginx關閉。
HTTP keep-alive是一種機制,它允許在單個TCP連接上發送多個HTTP請求和響應,而不是每個請求都使用一個新的TCP連接。通過使用keep-alive,可以減少連接的建立和關閉開銷,提高性能。
keepalive_timeout
的配置對于控制長時間空閑的連接非常有用。在高流量的網站上,保持連接活躍一段時間可以減少客戶端和服務器之間的連接建立和斷開次數,從而提高性能。
要根據實際應用場景和流量模式調整keepalive_timeout
的值,以確保它既能夠減少連接的建立和斷開次數,又不會使連接過度持久,浪費服務器資源。、
015-FastCGI
配置
# fastcgifastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 256k;fastcgi_intercept_errors on;
這段配置位于Nginx的http
塊中,主要用于配置與FastCGI(Fast Common Gateway Interface)相關的參數。FastCGI是一種用于提高Web服務器與應用程序之間通信效率的協議。下面是對這段配置的解釋:
-
fastcgi_connect_timeout 300;
: 設置與FastCGI服務器建立連接的超時時間為300秒。如果在這個時間內無法建立連接,Nginx會放棄連接并返回錯誤。 -
fastcgi_send_timeout 300;
: 設置向FastCGI服務器發送請求的超時時間為300秒。如果在這個時間內無法完成發送,Nginx將關閉連接并返回錯誤。 -
fastcgi_read_timeout 300;
: 設置從FastCGI服務器接收響應的超時時間為300秒。如果在這個時間內沒有接收到響應,Nginx將關閉連接并返回錯誤。 -
fastcgi_buffer_size 64k;
: 設置用于存儲從FastCGI服務器接收到的響應的緩沖區大小為64千字節。 -
fastcgi_buffers 4 64k;
: 設置用于存儲響應數據的緩沖區的數量和大小。在這個例子中,每個緩沖區大小為64千字節,總共有4個緩沖區。 -
fastcgi_busy_buffers_size 128k;
: 設置用于存儲臨時文件的緩沖區大小為128千字節。當FastCGI服務器忙于處理請求時,這些緩沖區用于存儲響應的部分數據。 -
fastcgi_temp_file_write_size 256k;
: 設置用于存儲臨時文件的緩沖區大小為256千字節。這些緩沖區用于寫入臨時文件。 -
fastcgi_intercept_errors on;
: 啟用FastCGI錯誤攔截,允許Nginx攔截FastCGI返回的錯誤頁面,而不是直接將其傳遞給客戶端。
這些FastCGI配置參數可以根據具體的應用和服務器性能進行調整,以優化與FastCGI服務器的通信和性能。
FastCGI就類似于Python的Gunicorn的角色,它們之間的聯系和區別如下:
雖然Gunicorn是一個專門為運行WSGI應用程序設計的HTTP服務器,而FastCGI是一種通用的協議,但它們之間確實有一些關聯和相似之處。下面是它們之間的一些聯系:
-
適用范圍: Gunicorn和FastCGI都用于連接Web服務器和應用程序,以便有效地處理HTTP請求。
-
并發處理: Gunicorn和FastCGI都采用了并發處理的方式。Gunicorn可以通過多個工作線程或工作進程來處理并發請求,而FastCGI可以使用多個進程處理并發連接。
-
協議: Gunicorn作為一個WSGI服務器,實際上使用了HTTP作為通信協議。而FastCGI使用自己的二進制協議進行通信,可以通過套接字或本地進程間通信來傳遞數據。
-
性能: 兩者都旨在提高Web應用程序的性能,通過減少服務器和應用程序之間的通信開銷,以及實現并發處理。
盡管有這些相似之處,但值得注意的是,Gunicorn和FastCGI并不直接兼容。Gunicorn是專門為Python的WSGI應用程序設計的,而FastCGI通常用于其他Web服務器和編程語言的組合。如果你有一個使用FastCGI的應用程序,你需要使用FastCGI服務器來運行它,而不是Gunicorn。
問:如果我的Django項止通過Gunicorn啟動,并且通過Nginx反向代理到Gunicorn啟動的web服務,是不是Nginx中對fastcgi的配置對Gunicorn啟動的web服務是沒有影響的?
答:是的,你理解得正確。當你使用Gunicorn作為Django應用程序的WSGI服務器時,Nginx的配置中關于FastCGI的相關配置是不會直接影響Gunicorn的,因為Gunicorn并不是一個FastCGI程序。
Gunicorn是一個獨立的WSGI服務器,它與Nginx之間的通信是基于HTTP協議的,而不是FastCGI。因此,在Nginx的配置中,你需要使用proxy_pass
等相關指令來將請求代理到Gunicorn運行的地址。
016-對gzip的配置
# gzipgzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 6;gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;gzip_vary on;
這段Nginx配置用于配置gzip壓縮,以減小傳輸的數據量,提高網站的性能。以下是對這段配置的解釋:
-
gzip on;
: 啟用gzip壓縮。開啟后,Nginx會嘗試使用gzip算法對響應數據進行壓縮,以減小傳輸的數據量。 -
gzip_min_length 1k;
: 設置觸發gzip壓縮的最小文件大小為1千字節。小于這個大小的文件將不會被壓縮。 -
gzip_buffers 4 16k;
: 設置用于gzip壓縮的緩沖區的數量和大小。在這個例子中,每個緩沖區大小為16千字節,總共有4個緩沖區。 -
gzip_http_version 1.0;
: 設置啟用gzip壓縮的HTTP版本。在這里,僅啟用HTTP 1.0版本的gzip壓縮。 -
gzip_comp_level 6;
: 設置gzip壓縮的壓縮級別。壓縮級別為1(最低)到9(最高),6通常是一個合理的默認值,提供了很好的壓縮比和性能。 -
gzip_types
: 指定需要進行gzip壓縮的文件類型。在這個例子中,指定了一系列文本和應用程序類型的文件。 -
gzip_vary on;
: 啟用Vary頭信息,這會告訴緩存服務器基于Accept-Encoding頭(是否支持gzip壓縮)來緩存不同版本的響應。
總體來說,這段配置的作用是啟用gzip壓縮,并根據文件大小、HTTP版本、壓縮級別、文件類型等條件進行相應的設置,以提高傳輸效率,降低帶寬使用,同時確保壓縮操作不會對性能產生太大的影響。
017-反向代理相關參數設置
# http_proxyproxy_connect_timeout 75;proxy_send_timeout 75;proxy_read_timeout 75;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;
這段Nginx配置是關于HTTP代理的設置,用于配置Nginx作為反向代理時與后端服務器之間的連接和數據傳輸參數。以下是對這段配置的解釋:
-
proxy_connect_timeout 75;
: 設置連接到后端服務器的超時時間為75秒。如果在這個時間內無法建立連接,Nginx將放棄連接并返回錯誤。 -
proxy_send_timeout 75;
: 設置向后端服務器發送請求的超時時間為75秒。如果在這個時間內無法完成請求的發送,Nginx將關閉連接并返回錯誤。 -
proxy_read_timeout 75;
: 設置從后端服務器讀取響應的超時時間為75秒。如果在這個時間內沒有接收到響應,Nginx將關閉連接并返回錯誤。 -
proxy_buffer_size 4k;
: 設置用于存儲從后端服務器接收到的響應的緩沖區大小為4千字節。 -
proxy_buffers 4 32k;
: 設置用于存儲響應數據的緩沖區的數量和大小。在這個例子中,每個緩沖區大小為32千字節,總共有4個緩沖區。 -
proxy_busy_buffers_size 64k;
: 設置用于存儲臨時文件的緩沖區大小為64千字節。當后端服務器繁忙時,這些緩沖區用于存儲響應的部分數據。 -
proxy_temp_file_write_size 64k;
: 設置用于存儲臨時文件的緩沖區大小為64千字節。這些緩沖區用于寫入臨時文件。
這些參數的目的是調整Nginx與后端服務器之間的連接和數據傳輸行為,以適應不同的網絡環境和后端服務器性能。需要根據實際的應用場景和服務器資源來調整這些值,以確保在高并發或高負載情況下有良好的性能和穩定性。
018-server_tokens off;
server_tokens off;
這句語句server_tokens off;
位于Nginx配置文件的http
塊中,用于配置是否向客戶端發送Nginx服務器的版本信息。以下是對這個語句的解釋:
-
server_tokens
: 這是Nginx的一個指令,用于控制是否向客戶端發送服務器版本信息。 -
off
: 這個值表示禁用向客戶端發送服務器版本信息。也就是說,當設置為off
時,Nginx不會在HTTP響應頭中包含服務器的版本信息。
通過禁用server_tokens
,可以提高服務器的安全性。因為在安全實踐中,通常不建議將服務器的具體版本信息暴露給外部用戶,以防止潛在的安全風險。攻擊者可能會利用已知的漏洞來攻擊特定版本的服務器軟件,因此減少服務器信息的泄露可以增加系統的安全性。
設置server_tokens
為off
是一個常見的安全配置,特別是在生產環境中。然而,在開發和調試階段,為了方便排查問題,可能會將其設置為on
,以便能夠查看服務器的版本信息。在生產環境中,為了安全起見,通常應該禁用服務器版本信息的顯示。
019-限制單IP的并發連接數的相關配置語句
limit_conn_zone $binary_remote_addr zone=perip:10m;
這句語句limit_conn_zone $binary_remote_addr zone=perip:10m;
位于Nginx配置文件的http
塊中,用于配置并啟用基于連接數的限速。以下是對這個語句的解釋:
-
limit_conn_zone
: 這是Nginx的指令,用于配置連接數限制的相關參數。 -
$binary_remote_addr
: 這是Nginx的變量,表示客戶端的二進制形式的IP地址。每個客戶端都有唯一的IP地址。 -
zone=perip:10m
: 這部分配置用于定義連接數限制的存儲區。perip
是一個自定義的標識符,可以在后續的limit_conn
指令中引用。10m
表示分配給這個存儲區的內存大小為10兆字節。
這條配置的作用是在perip
存儲區中為每個客戶端IP地址分配10兆字節的內存,用于存儲該IP地址的連接數限制信息。
接下來,你可以在需要進行連接數限制的地方使用limit_conn
指令,引用先前定義的存儲區perip
,以設置具體的連接數限制。
例如:
server {location / {limit_conn perip 10; # 允許每個IP地址最多10個并發連接...}
}
這個配置的目的是限制每個客戶端IP地址的并發連接數,以確保系統資源不被一個IP地址的連接數耗盡。這在防范一些類型的攻擊(例如DDoS攻擊)方面很有用。
20-配置每個server name的并發數
每個server塊中都有server name,比如下面截圖中畫橫線的就是server name:
下面這條語句就與限制每個server name的并發數有關:
limit_conn_zone $server_name zone=perserver:10m;
這句語句limit_conn_zone $server_name zone=perserver:10m;
位于Nginx配置文件的http
塊中,用于配置并啟用基于連接數的限速。以下是對這個語句的解釋:
-
limit_conn_zone
: 這是Nginx的指令,用于配置連接數限制的相關參數。 -
$server_name
: 這是Nginx的變量,表示當前請求的服務器名稱。對于每個請求,$server_name
都會被替換為相應的服務器名稱。 -
zone=perserver:10m
: 這部分配置用于定義連接數限制的存儲區。perserver
是一個自定義的標識符,可以在后續的limit_conn
指令中引用。10m
表示分配給這個存儲區的內存大小為10兆字節。
這條配置的作用是在perserver
存儲區中為每個server name分配10兆字節的內存,用于存儲該server name的連接數限制信息。
接下來,你可以在需要進行連接數限制的地方使用limit_conn
指令,引用先前定義的存儲區perserver
,以設置具體的連接數限制。
例如:
server {location / {limit_conn perserver 10; # 允許每個服務器名稱最多10個并發連接...}
}
這個配置的目的是限制每個server name的并發連接數,以確保系統資源不被一個server name的連接數耗盡。這對于防范一些類型的攻擊(例如DDoS攻擊)以及確保每個server name能夠提供合理的服務質量非常有用。
顯然,如果一臺服務器上就一個站點,這個配置基本就沒用了。