日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx系列之二:配置文件解读

發布時間:2024/4/11 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx系列之二:配置文件解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

**

前言

**

nginx系列之一:nginx入門
nginx系列之二:配置文件解讀
nginx系列之三:日志配置
nginx系列之四:web服務器
nginx系列之五: 負載均衡
nginx系列之六:cache服務
nginx系列之七:限流配置
nginx系列之八:使用upsync模塊實現負載均衡

轉自:在此感謝原博主的整理分享

nginx配置文件主要分為四個部分:

main{ #(全局設置)
http{ #服務器
upstream{} #(負載均衡服務器設置:主要用于負載均衡和設置一系列的后端服務器)
server{ #(主機設置:主要用于指定主機和端口)
location{} #(URL匹配特點位置的設置)
}
}
}

server繼承main,location繼承server,upstream即不會繼承其他設置也不會被繼承。

一、main 全局配置

nginx在運行時與具體業務功能(比如http服務或者email服務代理)無關的一些參數,比如工作進程數,運行的身份等。

user www www; worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; error_log /var/logs/nginx_error.log crit; pid /usr/local/webserver/nginx/nginx.pid; worker_rlimit_nofile 65535;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • user www www;: 指定nginx進程使用什么用戶啟動
  • worker_processes 4; : 指定啟動多少進程來處理請求,一般情況下設置成CPU的核數,如果開啟了ssl和gzip更應該設置成與邏輯CPU數量一樣甚至為2倍,可以減少I/O操作。使用grep ^processor /proc/cpuinfo | wc -l查看CPU核數。
  • worker_cpu_affinity 0001 0010 0100 1000;: 在高并發情況下,通過設置將CPU和具體的進程綁定來降低由于多核CPU切換造成的寄存器等現場重建帶來的性能損耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。
  • error_log /var/logs/nginx_error.log crit;: error_log是個主模塊指令,用來定義全局錯誤日志文件。日志輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日志最為最詳細,而crit輸出日志最少。
  • pid /usr/local/webserver/nginx/nginx.pid;: 指定進程pid文件的位置。
  • worker_rlimit_nofile 65535;: 用于指定一個nginx進程可以打開的最多文件描述符數目,這里是65535,需要使用命令“ulimit -n 65535”來設置。

二、events模塊

events{use epoll;worker_connections 65536; }
  • 1
  • 2
  • 3
  • 4
  • use epoll;use是個事件模塊指令,用來指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平臺上,而kqueue用在BSD系統中。對于Linux系統,epoll工作模式是首選。在操作系統不支持這些高效模型時才使用select。
  • worker_connections 65536;每一個worker進程能并發處理(發起)的最大連接數(包含與客戶端或后端被代理服務器間等所有連接數)。nginx作為反向代理服務器,計算公式 最大連接數 = worker_processes * worker_connections/4,所以這里客戶端最大連接數是65536,這個可以增到到8192都沒關系,看情況而定,但不能超過后面的worker_rlimit_nofile。當nginx作為http服務器時,計算公式里面是除以2。進程的最大連接數受Linux系統進程的最大打開文件數限制,在執行操作系統命令ulimit -n 65536后worker_connections的設置才能生效。

三、http服務器

http{include mime.types;default_type application/octet-stream;#charset gb2312;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • include是個主模塊指令,實現對配置文件所包含的文件的設定,可以減少主配置文件的復雜度。類似于Apache中的include方法。
  • default_type屬于HTTP核心模塊指令,這里設定默認類型為二進制流,也就是當文件類型未定義時使用這種方式,例如在沒有配置PHP環境時,Nginx是不予解析的,此時,用瀏覽器訪問PHP文件就會出現下載窗口。
  • charset gb2312; 指定客戶端編碼格式。

3.1 HTTP參數之客戶端head緩存

server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 128k; client_max_body_size 10m; client_body_buffer_size 128k; sendfile on ; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65 : client_body_timeout 60s; send_timeout 60s;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • server_names_hash_bucket_size 128;: 服務器名字的hash表大小。
  • client_header_buffer_size 32k;:用來指定來自客戶端請求頭的header buffer 大小。對于大多數請求,1K的緩存已經足夠了,如果自定義了消息頭或有更大的cookie,可以增大緩存區大小。
  • large_client_header_buffers 4 128k;:用來指定客戶端請求中較大的消息頭的緩存最大數量和大小,4為個數,128k為大小,最大緩存為4個128KB。
  • client_max_body_size 8m; : 客戶端請求的最大的單個文件字節數。
  • client_max_body_size 10m; : 允許客戶端請求的最大單文件字節數。如果有上傳較大文件,請設置它的限制值。
  • client_body_buffer_size 128k;: 緩沖區代理緩沖用戶端請求的最大字節數。
  • sendfile on ; : 開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,減少用戶空間到內核空間的上下文切換。對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。開啟 tcp_nopush on; 和tcp_nodelay on; 防止網絡阻塞。
  • keepalive_timeout 65 : : 長連接超時時間,單位是秒,這個參數很敏感,涉及瀏覽器的種類、后端服務器的超時設置、操作系統的設置,可以另外起一片文章了。長連接請求大量小文件的時候,可以減少重建連接的開銷,但假如有大文件上傳,65s內沒上傳完成會導致失敗。如果設置時間過長,用戶又多,長時間保持連接會占用大量資源。
  • client_body_timeout 60s; : 用于設置客戶端請求主體讀取超時時間,默認是60s。如果超過這個時間,客戶端還沒有發送任何數據,nginx將返回Request time out(408)錯誤。
  • send_timeout : : 用于指定響應客戶端的超時時間。這個超時僅限于兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連接。

3.2 HTTP參數之FastCGI參數

FastCGI相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。下面參數看字面意思都能理解。

fastcgi_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 128k; fastcgi_cache TEST; fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • fastcgi_connect_timeout 300; 指定連接到后端FastCGI的超時時間。
  • fastcgi_send_timeout 300;指定向FastCGI傳送請求的超時時間,這個值是已經完成兩次握手后向FastCGI傳送請求的超時時間。
  • fastcgi_read_timeout 300;指定接收FastCGI應答的超時時間,這個值是已經完成兩次握手后接收FastCGI應答的超時時間。
  • fastcgi_buffer_size 64k; 用于指定讀取FastCGI應答第一部分需要多大的緩沖區,這個值表示將使用1個64KB的緩沖區讀取應答的第一部分(應答頭),可以設置為fastcgi_buffers選項指定的緩沖區大小。
  • fastcgi_buffers 4 64k; 指定本地需要用多少和多大的緩沖區來緩沖FastCGI的應答請求。如果一個PHP腳本所產生的頁面大小為256KB,那么會為其分配4個64KB的緩沖區來緩存;如果頁面大小大于256KB,那么大于256KB的部分會緩存到fastcgi_temp指定的路徑中,但是這并不是好方法,因為內存中的數據處理速度要快于硬盤。一般這個值應該為站點中PHP腳本所產生的頁面大小的中間值,如果站點大部分腳本所產生的頁面大小為256KB,那么可以把這個值設置為“16 16k”、“4 64k”等。
  • fastcgi_busy_buffers_size 128k; 默認值是fastcgi_buffers的兩倍。
  • fastcgi_temp_file_write_size 128k; 表示在寫入緩存文件時使用多大的數據塊,默認值是fastcgi_buffers的兩倍。
  • fastcgi_cache TEST; 表示開啟FastCGI緩存并為其指定一個名稱。開啟緩存非常有用,可以有效降低CPU的負載,并且防止502錯誤的發生。但是開啟緩存也會引起很多問題,要視具體情況而定。
  • fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; FastCGI緩存指定一個文件路徑、目錄結構等級、關鍵字區域存儲時間和非活動刪除時間。
  • fastcgi_cache_valid 200 302 1h; 用來指定應答代碼的緩存時間。實例中的值表示將200和302應答緩存一個小時,將301應答緩存1天,其他應答均緩存1分鐘。

3.3. HTTP參數之gzip模塊設置

gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • gzip on;開啟gzip壓縮輸出
  • gzip_min_length 1k; 最小壓縮文件大小,頁面字節數從header頭的Content-Length中獲取。默認值為0,不管多大頁面都壓縮,建議設置成大于1K的字節數,小于1K可能會越壓越大。
  • gzip_buffers 4 16k; 壓縮緩沖區,表示申請四個16K的內存作為壓縮結果流緩存,默認是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果。
  • gzip_http_version 1.1; 用于設置識別HTTP協議版本,默認是1.1,目前主流瀏覽器都已成指出。(默認1.1,前端如果是squid2.5請使用1.0)
  • gzip_comp_level 6; 壓縮等級,1壓縮比最小,處理速度最快,9壓縮比最大,傳輸速度快,但是消耗CPU資源。
  • gzip_types text/plain application/x-javascript text/css application/xml;壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
  • gzip_vary on; 和http頭有關系,會在響應頭加個 Vary: Accept-Encoding ,可以讓前端的緩存服務器緩存經過gzip壓縮的頁面,例如,用Squid緩存經過Nginx壓縮的數據。
  • gzip_proxied any; Nginx作為反向代理的時候啟用,決定開啟或者關閉后端服務器返回的結果是否壓縮,匹配的前提是后端服務器必須要返回包含”Via”的 header頭。
  • limit_zone crawler $binary_remote_addr 10m; 開啟限制IP連接數的時候需要使用

四、nginx 配置虛擬主機

4.1 配置虛擬主機流程

  • 復制一段完整的server標簽段,到結尾。注意:要放在http的結束大括號前,也就是server標簽段放入http標簽。
  • 更改server_name 及對應網頁的root根目錄。
  • 檢查配置文件語法,平滑重啟服務。
  • 創建server_name 對應網頁的根目錄,并且建立測試文件,如果沒有index首頁會出現403錯誤。
  • 對客戶端server_name 的主機做host 解析或DNS配置。并檢查(ping)。
  • 瀏覽器訪問,或者在Linux客戶端做host解析,用wget或curl 訪問。
  • http服務上支持若干虛擬主機。每個虛擬主機一個對應的server配置項,配置項里面包含該虛擬主機相關的配置。在提供mail服務的代理時,也可以建立若干server。每個server通過監聽地址或端口來區分。

    server{listen 80 default;server_name _;index index.html index.htm index.php;root /data/htdocs/www;#server_name_in_redirect off; location ~ .*\.(php|php5)?${#fastcgi_pass unix:/tmp/php-cgi.sock;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf; }location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d; }location ~ .*\.(js|css)?${expires 1h; }

    }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • listen 80; 監聽端口,默認80,小于1024的要以root啟動??梢詾閘isten *:80、listen 127.0.0.1:80等形式。
    • server_name blog.biglittleant.cn; 服務器名,如localhost、www.example.com,可以通過正則匹配。
    • root /var/www/html 定義服務器的默認網站根目錄位置。如果locationURL匹配的是子目錄或文件,root沒什么作用,一般放在server指令里面或/下。
    • index index.jsp index.html index.htm 定義路徑下默認訪問的文件名,一般跟著root放。

    4.2 sever模塊下location模塊的寫法

    關于location匹配規則的寫法,參考死磕nginx系列–使用nginx做負載均衡

    proxy_pass http://backend

    請求轉向backend定義的服務器列表,即反向代理,對應upstream負載均衡器。也可以proxy_pass http://ip:port。

    proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    • 1
    • 2
    • 3
    • 4

    五、其它nginx參數

    5.1 訪問控制 allow/deny

    Nginx 的訪問控制模塊默認就會安裝,而且寫法也非常簡單,可以分別有多個allow,deny,允許或禁止某個ip或ip段訪問,依次滿足任何一個規則就停止往下匹配。如:

    location /nginx-status {stub_status on;access_log off; # auth_basic "NginxStatus"; # auth_basic_user_file /usr/local/nginx-1.6/htpasswd;allow 192.168.10.100;allow 172.29.73.0/24;deny all; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    我們也常用 httpd-devel 工具的 htpasswd 來為訪問的路徑設置登錄密碼:

    # htpasswd -c htpasswd admin New passwd: Re-type new password: Adding password for user admin # htpasswd htpasswd admin //修改admin密碼 # htpasswd htpasswd sean //多添加一個認證用戶
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    這樣就生成了默認使用CRYPT加密的密碼文件。打開上面nginx-status的兩行注釋,重啟nginx生效。

    5.2 列出目錄 autoindex

    Nginx默認是不允許列出整個目錄的。如需此功能,打開nginx.conf文件,在location,server 或 http段中加入如下參數:

    location /images {root /var/www/nginx-default/images;autoindex on;autoindex_exact_size off;autoindex_localtime on;}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • autoindex on;運行列出目錄內容。另外兩個參數最好也加上去。
    • autoindex_exact_size off; 默認為on,顯示出文件的確切大小,單位是bytes。改為off后,顯示出文件的大概大小,單位是kB或者MB或者GB。
    • autoindex_localtime on; 默認為off,顯示的文件時間為GMT時間。改為on后,顯示的文件時間為文件的服務器時間。

    六、附錄:通用配置文件

    user www www; worker_processes 2; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; events {use epoll;worker_connections 2048; } 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"';#access_log logs/access.log main;sendfile on;# tcp_nopush on;keepalive_timeout 65;# gzip壓縮功能設置gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 6;gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;gzip_vary on;

    http_proxy 設置

    client_max_body_size 10m; client_body_buffer_size 128k; proxy_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; proxy_temp_path /usr/local/nginx/proxy_temp 1 2;

    設定負載均衡后臺服務器列表

    upstream backend { #ip_hash; server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ; }

    很重要的虛擬主機配置,多個虛擬機可以復制修改此部分

    server {listen 80;server_name test.example.com;root /apps/oaapp;charset utf-8;access_log logs/host.access.log main;#對 / 所有做負載均衡+反向代理location / {root /apps/oaapp;index index.php index.html index.htm;proxy_pass http://backend; proxy_redirect off;# 后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IPproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}#靜態文件,nginx自己處理,不去backend請求后端的服務location ~* /download/ { root /data/app/nginx/downloads; }location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /data/app/nginx/images; expires 7d; }location /nginx_status {stub_status on;access_log off;allow 192.168.10.0/24;deny all;}location ~ ^/(WEB-INF)/ { deny all; }#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;} }

    }

    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97

    六、附錄:如何查看是否開啟了gzip壓縮

    如果response header中包含Content-Encoding:gzip則表示開啟gzip壓縮。

    Connection:keep-alive Content-Encoding:gzip Content-Type:text/html Date:Wed, 29 Mar 2017 10:55:54 GMT ETag:W/"58db92af-331a6" Last-Modified:Wed, 29 Mar 2017 10:55:43 GMT Server:nginx/1.10.3 Transfer-Encoding:chunked Vary:Accept-Encoding
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    參考文檔

    Full Example Configuration
    優化Nginx中FastCGI參數的實例
    博客 Nginx 配置之性能篇

    總結

    以上是生活随笔為你收集整理的nginx系列之二:配置文件解读的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。