nginx之詳細配置記錄
一、前言
在平時用的nginx挺多,但是并不熟悉nginx的配置,所以打算查閱網上資料整理一篇筆記方便自己以后回顧。
二、nginx目錄結構
三、配置文件
1. 結構
# 全局塊 ... # events塊 events { ... } # http塊 http { # http全局塊 ... # 虛擬主機server塊 server { # server全局塊 ... # location塊 location [PATTERN] { ... } location [PATTERN] { ... } } server { ... } # http全局塊 ... }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
說明:以下配置并未很明確標明作用域,關于其作用范圍可查閱官方文檔。
main全局塊
配置影響nginx全局的指令。
user nginx;
配置用戶或者組
worker_processes auto;
允許生成的進程數,一般代表系統cpu核數一到兩倍最好
worker_cpu_affinity 01 10;
表示開啟兩個進程,第一個進程對應著第一個CPU內核,第二個進程對應著第二個CPU內核。
error_log /var/log/nginx/error.log;
制定日志路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg
pid /run/nginx.pid;
設置pid存放路徑,pid是控制系統中的一個重要的控制文件
include /usr/share/nginx/modules/*.conf;
加載動態模塊配置
worker_rlimit_nofile 65535;
更改worker進程的最大打開文件數限制。如果沒設置的話,這個值為操作系統的限制。設置后你的操作系統和Nginx可以處理比“ulimit -a”更多的文件,所以把這個值設高,這樣nginx就不會有“too many open files”問題了。
[nginx允許的最大連接數=(worker_connections)*(worker_processes)]<=worker_rlimit_nofile,另外worker_connections events塊 配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。 worker_connections 1024; 最大連接數。 accept_mutex on; 設置網路連接序列化,防止驚群現象發生,默認為on multi_accept on; 設置一個進程是否同時接受多個網絡連接,默認為off use epoll; 設置用于復用客戶端線程的輪詢方法。如果你使用Linux 2.6+,你應該使用epoll。如果你使用FREEBSD,你應該使用kqueue。select|poll|kqueue|epoll|resig|/dev/poll|eventport http塊 可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; 自定義日志格式 access_log /var/log/nginx/access.log main; 指令指定日志文件的存放路徑和名稱 egaccess_log [PATH] [日志名],取消改為access_log off。 sendfile on; 指定是否使用sendfile系統調用來傳輸文件。sendfile系統調用在兩個文件描述符之間直接傳遞數據(完全在內核中操作),從而避免了數據在內核緩沖區和用戶緩沖區之間的拷貝,操作效率很高,被稱之為零拷貝。 sendfile_max_chunk 1M; 限制最大sendfile的文件大小,防止過大的文件占據整個工作進程 tcp_nopush on; 告訴nginx在一個數據包里發送所有頭文件,而不一個接一個的發送。 tcp_nopush 必須和 sendfile 搭配使用。 tcp_nodelay on; 為了解決Nagle和DelayedAcknowledgment的延遲問題。詳情:TCP_NODELAY 和 TCP_NOPUSH的解釋 keepalive_timeout 65; 連接超時時間,這個設置可以放入http塊、server塊、location塊 client_header_timeout 10; 請求頭超時時間 client_body_timeout 10; 請求體超時時間 reset_timedout_connection on; 告訴nginx關閉不響應的客戶端連接。這將會釋放那個客戶端所占有的內存空間。 send_timeout 10; 指定客戶端的響應超時時間。這個設置不會用于整個轉發器,而是在兩次客戶端讀取操作之間。如果在這段時間內,客戶端沒有讀取任何數據,nginx就會關閉連接。 limit_conn_zone $binary_remote_addr zone=addr:5m; 設置用于保存各種key(比如當前連接數)的共享內存的參數。5m就是5兆字節,這個值應該被設置的足夠大以存儲(32K*5)32byte狀態或者(16K*5)64byte狀態。 limit_conn addr 100; 為給定的key設置最大連接數。這里key是addr,設置的值是100,也就是說允許每一個IP地址最多同時打開有100個連接。 types_hash_max_size 2048; 影響散列表的沖突率。types_hash_max_size越大,就會消耗更多的內存,但散列key的沖突率會降低,檢索速度就更快。types_hash_max_size越小,消耗的內存就越小,但散列key的沖突率可能上升。 gzip on; 開啟壓縮,可作用于http,server, location塊中,內置變量 $gzip_ratio 可以獲取到gzip的壓縮比率。gzip壓縮器需要在用戶態進行,因此無法和sendfile共存,如果gizp設置為on,那么sendfile就會失去作用。 gzip_types text/html text/plain text/css; 表示壓縮的文件類型,還可以添加web字體格式、ioc圖標和SVG圖像等其他類型文件。 gzip_min_length 512; 告訴Nginx不要壓縮小于512字節的文件。這是非常小的文件,可以不用壓縮 gzip_comp_level 2; 壓縮級別,越高壓縮比越大,越消耗cpu gzip_http_version 1.0 gzip支持http協議 gzip_proxied any; Nginx作為反向代理的時候啟用,開啟或者關閉后端服務器返回的結果. 參數: off - 關閉所有的代理結果數據的壓縮 expired - 啟用壓縮,如果header頭中包含 “Expires” 頭信息 no-cache - 啟用壓縮,如果header頭中包含 “Cache-Control:no-cache” 頭信息 no-store - 啟用壓縮,如果header頭中包含 “Cache-Control:no-store” 頭信息 private - 啟用壓縮,如果header頭中包含 “Cache-Control:private” 頭信息 no_last_modified - 啟用壓縮,如果header頭中不包含 “Last-Modified” 頭信息 no_etag - 啟用壓縮 ,如果header頭中不包含 “ETag” 頭信息 auth - 啟用壓縮 , 如果header頭中包含 “Authorization” 頭信息 any - 無條件啟用壓縮 gzip_buffers 16 8k; 設置用于處理請求壓縮的緩沖區數量和大小。 gzip_vary on; 增加響應頭”Vary: Accept-Encoding”,首先判斷客戶端是否支持gzip壓縮技術,不支持的不就不進行gzip技術壓縮 gzip_disable "MSIE [1-6].(?!.*SV1)" 表明哪些UA頭不使用gzip壓縮 include /etc/nginx/mime.types; 文件擴展名與文件類型映射表 default_type application/octet-stream; 默認文件類型 server_tokens off; 隱藏版本號,加強安全性。 open_file_cache max=100000 inactive=20s; 打開緩存的同時也指定了緩存最大數目,以及緩存的時間。可以設置一個相對高的最大時間,這樣可以在它們不活動超過20秒后清除掉。 open_file_cache_valid 30s; 在open_file_cache中指定檢測正確信息的間隔時間。 open_file_cache_min_uses 2 定義了open_file_cache中指令參數不活動時間期間里最小的文件數。 open_file_cache_errors on 指定了當搜索一個文件時是否緩存錯誤信息,也包括再次給配置中添加文件。我們也包括了服務器模塊,這些是在不同文件中定義的。如果你的服務器模塊不在這些位置,你就得修改這一行來指定正確的位置。 include /etc/nginx/conf.d/*.conf; 引入子配置文件 server塊 配置虛擬主機的相關參數,一個http中可以有多個server。 keepalive_requests 120; 單連接請求上限次數。 listen 80; 監聽端口 server_name ztool.cloud; 監聽地址(ip或域名) location塊 root /data/java; 根目錄。 index /data/java/index.html; 默認首頁 proxy_pass http://127.0.0.1:8080; 代理轉發 proxy_connect_timeout 15s; 代理連接超時時間 proxy_send_timeout 15s; 服務器數據發送超時時間 proxy_read_timeout 15s; 數據讀取超時時間 proxy_http_version 1.1; http協議 proxy_buffer_size 4k; 設置代理服務器(nginx)從后端服務器讀取并保存用戶頭信息的緩沖區大小。它僅用于限定 headers 的 buffer 區,所以它的值比 proxy_buffers 更低。 proxy_buffers 4 32k; 指定請求緩存的數量和大小 proxy_busy_buffers_size 64k; 高負荷下緩沖大小 proxy_temp_file_write_size 64k; 指定proxy緩存臨時文件的大小 proxy_temp_path /usr/local/nginx/proxy_temp 1 2; 當緩存被代理的服務器響應到臨時文件時,這個選項限制每次寫臨時文件的大小。 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 設置由后端服務器獲取用戶主機或真實IP地址,以及代理者的真實IP。 add_header X-Frame-Options SANEORIGIN; proxy_set_header是Nginx設置請求頭信息給上游服務器,add_header是Nginx設置響應頭信息給瀏覽器。 ·· 四、附錄 附錄1 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#腳本文件請求的路徑,也就是說當訪問127.0.0.1/index.php的時候,需要讀取網站根目錄下面的index.php文件,如果沒有配置這一配置項時,nginx不回去網站根目錄下訪問.php文件,所以返回空白 fastcgi_param QUERY_STRING $query_string; #請求的參數;如?app=123 fastcgi_param REQUEST_METHOD $request_method; #請求的動作(GET,POST) fastcgi_param CONTENT_TYPE $content_type; #請求頭中的Content-Type字段 fastcgi_param CONTENT_LENGTH $content_length; #請求頭中的Content-length字段。 fastcgi_param SCRIPT_NAME $fastcgi_script_name; #腳本名稱 fastcgi_param REQUEST_URI $request_uri; #請求的地址不帶參數 fastcgi_param DOCUMENT_URI $document_uri; #與$uri相同。 fastcgi_param DOCUMENT_ROOT $document_root; #網站的根目錄。在server配置中root指令中指定的值 fastcgi_param SERVER_PROTOCOL $server_protocol; #請求使用的協議,通常是HTTP/1.0或HTTP/1.1。 fastcgi_param GATEWAY_INTERFACE CGI/1.1; #cgi 版本 fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; #nginx 版本號,可修改、隱藏 fastcgi_param REMOTE_ADDR $remote_addr; #客戶端IP fastcgi_param REMOTE_PORT $remote_port; #客戶端端口 fastcgi_param SERVER_ADDR $server_addr; #服務器IP地址 fastcgi_param SERVER_PORT $server_port; #服務器端口 fastcgi_param SERVER_NAME $server_name; #服務器名,域名在server配置中指定的server_name fastcgi_param PATH_INFO $path_info; #可自定義變量 -- PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 五、參考 Nginx服務學習(4)-目錄說明 Nginx 配置詳解 Nginx配置性能優化的方法 Nginx的配置文件詳解(超詳細) Nginx
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。