Nginx的server層外層的常見配置語句的解讀

有下面的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塊中,用于配置與事件處理相關的參數。下面是對每個指令的解釋:

  1. use epoll;: 這個指令指定Nginx在Linux系統上使用epoll作為事件驅動模型。epoll是一種高效的I/O多路復用機制,用于處理大量并發連接,特別適用于高性能的網絡服務器。

  2. worker_connections 51200;: 這個指令設置每個工作進程能夠同時處理的最大連接數。在這個例子中,每個工作進程可以處理的最大連接數被設置為51200。這個值應該根據服務器的負載和性能需求來調整。如果系統上有大量的并發連接,這個值可能需要增加。

  3. 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服務器與應用程序之間通信效率的協議。下面是對這段配置的解釋:

  1. fastcgi_connect_timeout 300;: 設置與FastCGI服務器建立連接的超時時間為300秒。如果在這個時間內無法建立連接,Nginx會放棄連接并返回錯誤。

  2. fastcgi_send_timeout 300;: 設置向FastCGI服務器發送請求的超時時間為300秒。如果在這個時間內無法完成發送,Nginx將關閉連接并返回錯誤。

  3. fastcgi_read_timeout 300;: 設置從FastCGI服務器接收響應的超時時間為300秒。如果在這個時間內沒有接收到響應,Nginx將關閉連接并返回錯誤。

  4. fastcgi_buffer_size 64k;: 設置用于存儲從FastCGI服務器接收到的響應的緩沖區大小為64千字節。

  5. fastcgi_buffers 4 64k;: 設置用于存儲響應數據的緩沖區的數量和大小。在這個例子中,每個緩沖區大小為64千字節,總共有4個緩沖區。

  6. fastcgi_busy_buffers_size 128k;: 設置用于存儲臨時文件的緩沖區大小為128千字節。當FastCGI服務器忙于處理請求時,這些緩沖區用于存儲響應的部分數據。

  7. fastcgi_temp_file_write_size 256k;: 設置用于存儲臨時文件的緩沖區大小為256千字節。這些緩沖區用于寫入臨時文件。

  8. fastcgi_intercept_errors on;: 啟用FastCGI錯誤攔截,允許Nginx攔截FastCGI返回的錯誤頁面,而不是直接將其傳遞給客戶端。

這些FastCGI配置參數可以根據具體的應用和服務器性能進行調整,以優化與FastCGI服務器的通信和性能。

FastCGI就類似于Python的Gunicorn的角色,它們之間的聯系和區別如下:
雖然Gunicorn是一個專門為運行WSGI應用程序設計的HTTP服務器,而FastCGI是一種通用的協議,但它們之間確實有一些關聯和相似之處。下面是它們之間的一些聯系:

  1. 適用范圍: Gunicorn和FastCGI都用于連接Web服務器和應用程序,以便有效地處理HTTP請求。

  2. 并發處理: Gunicorn和FastCGI都采用了并發處理的方式。Gunicorn可以通過多個工作線程或工作進程來處理并發請求,而FastCGI可以使用多個進程處理并發連接。

  3. 協議: Gunicorn作為一個WSGI服務器,實際上使用了HTTP作為通信協議。而FastCGI使用自己的二進制協議進行通信,可以通過套接字或本地進程間通信來傳遞數據。

  4. 性能: 兩者都旨在提高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壓縮,以減小傳輸的數據量,提高網站的性能。以下是對這段配置的解釋:

  1. gzip on;: 啟用gzip壓縮。開啟后,Nginx會嘗試使用gzip算法對響應數據進行壓縮,以減小傳輸的數據量。

  2. gzip_min_length 1k;: 設置觸發gzip壓縮的最小文件大小為1千字節。小于這個大小的文件將不會被壓縮。

  3. gzip_buffers 4 16k;: 設置用于gzip壓縮的緩沖區的數量和大小。在這個例子中,每個緩沖區大小為16千字節,總共有4個緩沖區。

  4. gzip_http_version 1.0;: 設置啟用gzip壓縮的HTTP版本。在這里,僅啟用HTTP 1.0版本的gzip壓縮。

  5. gzip_comp_level 6;: 設置gzip壓縮的壓縮級別。壓縮級別為1(最低)到9(最高),6通常是一個合理的默認值,提供了很好的壓縮比和性能。

  6. gzip_types: 指定需要進行gzip壓縮的文件類型。在這個例子中,指定了一系列文本和應用程序類型的文件。

  7. 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作為反向代理時與后端服務器之間的連接和數據傳輸參數。以下是對這段配置的解釋:

  1. proxy_connect_timeout 75;: 設置連接到后端服務器的超時時間為75秒。如果在這個時間內無法建立連接,Nginx將放棄連接并返回錯誤。

  2. proxy_send_timeout 75;: 設置向后端服務器發送請求的超時時間為75秒。如果在這個時間內無法完成請求的發送,Nginx將關閉連接并返回錯誤。

  3. proxy_read_timeout 75;: 設置從后端服務器讀取響應的超時時間為75秒。如果在這個時間內沒有接收到響應,Nginx將關閉連接并返回錯誤。

  4. proxy_buffer_size 4k;: 設置用于存儲從后端服務器接收到的響應的緩沖區大小為4千字節。

  5. proxy_buffers 4 32k;: 設置用于存儲響應數據的緩沖區的數量和大小。在這個例子中,每個緩沖區大小為32千字節,總共有4個緩沖區。

  6. proxy_busy_buffers_size 64k;: 設置用于存儲臨時文件的緩沖區大小為64千字節。當后端服務器繁忙時,這些緩沖區用于存儲響應的部分數據。

  7. 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_tokensoff是一個常見的安全配置,特別是在生產環境中。然而,在開發和調試階段,為了方便排查問題,可能會將其設置為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能夠提供合理的服務質量非常有用。

顯然,如果一臺服務器上就一個站點,這個配置基本就沒用了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

推薦4個優秀的 Python 時間序列分析庫

時間序列分析在金融和醫療保健等領域至關重要,在這些領域,理解隨時間變化的數據模式至關重要。在本文中,我們將介紹四個主要的Python庫——statmodels、tslearn、tssearch和tsfresh——每個庫都針對時間序列分析的不同方面進行了定制。這些庫…

最長子字符串的長度 (一) - 華為OD統一考試(C卷)

OD統一考試(C卷) 分值: 100分 題解: Java / Python / C 題目描述 給你一個字符串 s,字符串s首尾相連成一個環形,請你在環中找出字符出現了偶數次最長子字符串的長度。 輸入描述 輸入是一串小寫字母組成的…

VS2015編譯GDAL3.2.0+opencl+C#

參考借鑒https://www.cnblogs.com/litou/p/15004877.html 參考借鑒https://www.cnblogs.com/xiaowangba/p/6313903.html 參考借鑒gdal、proj、geos、sqlite等在VS2015下編譯和配置_vs2015編譯sqlite3-CSDN博客 參考借鑒Windows下GDAL3.1.2編譯 (VS2015)_gdal windows編譯-CS…

字符串String

字符串字面量 let s "hello";變量s屬于字符串字面量,它們屬于硬編碼進程序的字符串值,屬于不可變的類型。但并不是所有字符串的值都能夠在編寫代碼時確定。 String類型 String類型會在堆上分配到自己需要的存儲空間,所以它能夠…

Nacos簡介

1.Nacos簡介 1.1.為什么叫Nacos? 前四個字母分別為Naming和Configuration的前兩個字母,最后的s為service。 1.2.Nacos是什么? nacos是第二代微服務SpringCloudAlibaba開源的一款注冊中心和分布式配置中心組件,其功能上為第一代微…

聲明式數據建模、定義簡單易懂:下一代 ORM 助你效率倍增 | 開源日報 No.102

prisma/prisma Stars: 34.0k License: Apache-2.0 Prisma 是一個下一代 ORM,包括以下工具: Prisma Client:為 Node.js 和 TypeScript 自動生成的類型安全查詢構建器Prisma Migrate:聲明式數據建模和遷移系統Prisma Studio&#…

山人求道篇:五、交易中的大道至簡與奧卡姆剃刀

量化的剃刀不是減去因子、減去代碼,而是減去冗余信息量 市面上有的策略對各品種設置了不同參數,每個品種進場不一樣就算了,出場參數還不一樣,那你說他到底賺的是什么利潤呢? 他自己也不知道,主要目的是為…

鴻蒙應用開發(二)環境搭建

開發流程 IDE下載 首先下載HUAWEI DevEco Studio,介紹首次啟動DevEco Studio的配置向導: 運行已安裝的DevEco Studio,首次使用,請選擇Do not import settings,單擊OK。安裝Node.js與ohpm。node.js 是基于 V8 引擎構…

JavaScript常用技巧專題二

文章目錄 一、前言二、生成隨機字符串三、轉義HTML特殊字符四、單詞首字母大寫五、將字符串轉換為小駝峰六、刪除數組中的重復值七、移除數組中的假值八、獲取兩個數字之間的隨機數九、將數字截斷到固定的小數點十、日期10.1、計算兩個日期之間天數10.2、從日期中獲取是一年中的…

【Java編程實現 9 * 9 乘法表格打印四種形態,七種打法】

Java編程實現 9 * 9 乘法表格打印四種形態,七種方法打印 廢話篇打印 9 * 9 乘法表格嵌套for循環實現左下角打印嵌套for循環實現左上角打印嵌套for循環實現右上角打印嵌套for循環實現右下角打印 使用while循環打印 9 * 9 乘法表格(一)使用whil…

1003 我要通過!

“答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬于 PAT 的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字符串中必須僅有 P、 A、 T這三種…

詳解Keras3.0 Layers API: Core layers

1、Input keras.Input(shapeNone,batch_sizeNone,dtypeNone,sparseNone,batch_shapeNone,nameNone,tensorNone, ) 參數說明 shape: 輸入張量的形狀。如果為None,則可以動態地指定形狀。batch_size: 批處理大小。如果為None,則可以動態地指定批處理大小…

基于SpringBoot+Vue前后端分離的景點數據分析平臺(Java畢業設計)

大家好,我是DeBug,很高興你能來閱讀!作為一名熱愛編程的程序員,我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里,我將會結合實際項目經驗,分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

awt中文亂碼-Intellij IDEA

亂碼的根本原因在于秦始皇嘎太早了(bushi 解決方法:肉眼可見的編碼設置統一為GBK 1.打開設置找到文件編碼 2.肉眼可見的編碼統統改成GBK 有人該問了,為什么不改成utf-8,因為awt的編碼由操作系統決定,我的是win家庭中…

Nextui使用

安裝和使用 https://nextui.org/docs/frameworks/nextjs 自定義主題 https://nextui.org/docs/customization/customize-theme // tailwind.config.js const {nextui} require("nextui-org/react");/** type {import(tailwindcss).Config} */ module.exports {…

deepstream docker安裝

介紹 deepstream為dGPU和Jetson平臺提供dockers containers,這些鏡像可以方便開發者很快地部署deepstream應用。deepstream的docker images可以在NGC web中得到。 安裝Docker Docker 是一個開源的容器化平臺,它允許你構建,測試&#xff0c…

29. 如何在Spring所有BeanDefinition注冊完后做擴展?

如何在Spring所有BeanDefinition注冊完后做擴展? 通常可以使用beanFactoryPostProcessor 對已注冊的BeanDefinition進行修改或者通過它的子接口BeanDefinitionRegistryPostProcessor 再進行注冊額外擴展 BeanDefinitionRegistryPostProcessor 1、概述 public interface Bea…

0基礎學java-day18-( 坦克大戰【2】)

課件資源放在文末 1.線程-應用到坦克大戰 1.1 坦克大戰 0.3 【坦克類:包括坦克的基本屬性,以及坦克的移動方法】 package com.hspedu.tankgame03;/*** author 韓順平* version 1.0*/ public class Tank {private int x;//坦克的橫坐標private int y;…

XMemcached network layout exception java.nio.channels.ClosedChannelException

java.nio.channels.ClosedChannelException 表示嘗試在已關閉的通道上進行 I/O 操作,通常發生在網絡連接意外關閉后嘗試在關閉的通道上執行讀取或寫入操作。 XMemcached network layout exception 可能是由于 XMemcached 客戶端在嘗試與 Memcached 服務器通信時發生…

一些AG10K FPGA 調試的建議-Douglas

PLL AGM FPGA 在配置成功時,PLL 已經完成鎖定,lock 信號已經變高;如果原設計中用 lock 信號輸出實現系統 reset 的復位功能,就不能正確完成上電復位;同時,為了保證 PLL 相移的穩定,我們需要在 P…