nginx 注释配置及详解
前言
? ? DMZ(Demilitarized Zone) 非軍事區(qū),生產(chǎn)環(huán)境 WEB 服務(wù)部署的區(qū)域,公司的架構(gòu)為一臺(tái)nginx 充當(dāng) load balance 服務(wù),負(fù)載到兩臺(tái) nginx 上面,反向代理至后臺(tái)服務(wù),但是nginx 用的全是默認(rèn)配置加上 proxy_pass?和 upstream,沒有進(jìn)行針對(duì)性的優(yōu)化。
?
nginx 進(jìn)程配置
? ? 除了可以使用 ulimit 命令對(duì)內(nèi)核參數(shù)進(jìn)行配置,nginx 也支持對(duì)自身使用內(nèi)核資源進(jìn)行配置。
? ? nginx 默認(rèn)使用一個(gè) cpu 資源,即開啟一個(gè)進(jìn)程處理 web 請(qǐng)求,默認(rèn)進(jìn)程打開的最大連接數(shù)為 1024,這在生產(chǎn)上面是遠(yuǎn)遠(yuǎn)不夠的。
? ? 配置如下:
????
#user user nobody; #pid file pid logs/nginx.pid;#--------------------------- 進(jìn)程--------------------------- #worker進(jìn)程數(shù),通常設(shè)置參考服務(wù)器 CPU 數(shù)量,auto為自動(dòng)檢測(cè) #worker_process 1; worker_processes auto; #進(jìn)程分配的 cpu worker_cpu_affinity 000000001 00000010 00000100 00010000 00100000 01000000 10000000; #worker進(jìn)程打開最大文件描述符數(shù),最好與 ulimit -u 保持一致 worker_rlimit_nofile 100000; #全局錯(cuò)誤日志 error_log logs/error.log;#events模塊中包含nginx中所有處理連接的設(shè)置 events {#worker進(jìn)程同時(shí)打開的最大連接數(shù),理論上每臺(tái) nginx 服務(wù)器的最大連接數(shù)為 worker_process * worker_connectionsworker_connections 102400;#告訴nginx收到一個(gè)新鏈接通知后接受盡可能多的鏈接multi_accept on;#設(shè)置用于復(fù)用客戶端線程的輪訓(xùn)方法,使用 epoll 的 I/O 模型use epoll; }?
http 域配置
? ? http 模塊配置 nginx 處理 http 請(qǐng)求,是 nginx 的核心配置,也是優(yōu)化 nginx 的關(guān)鍵,大多數(shù) nginx 的功能都是圍繞著 http 域來進(jìn)行的。
????
http {#打開或關(guān)閉錯(cuò)誤頁面中的nginx版本號(hào),生產(chǎn)環(huán)境中這些是需要關(guān)閉的,降低版本號(hào)帶來的漏洞概率。server_tokens off;#server_tag off;#server_info off;#優(yōu)化磁盤IO設(shè)置,指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,普通應(yīng)用設(shè)為on,下載等磁盤IO高的應(yīng)用,可設(shè)為offsendfile on;#設(shè)置nginx在一個(gè)數(shù)據(jù)包里發(fā)送所有頭文件,而不是一個(gè)接一個(gè)的發(fā)送tcp_nopush on;#設(shè)置nginx不要緩存數(shù)據(jù),而是一段一段的發(fā)送,當(dāng)需要及時(shí)發(fā)送數(shù)據(jù)時(shí),就應(yīng)該給應(yīng)用設(shè)置這個(gè)屬性,這樣發(fā)送一小塊數(shù)據(jù)信息時(shí)就不能立即得到返回值tcp_nodelay on;#---------------------------日志---------------------------#設(shè)置nginx是否記錄訪問日志,關(guān)閉這個(gè)可以讓讀取磁盤IO操作更快access_log on;#設(shè)置nginx只記錄嚴(yán)重錯(cuò)誤#error_log logs/error.log crit;#定義日志格式,變量的意思另附博客詳解,定義的日志格式可在 access_log logs/access.log main 中選取log_format main '$remote_addr - $remote_user [$time_local] '' "$request" $status $body_bytes_sent '' "$http_referer" "$http_user_agent" ';log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '' "$request" $status $body_bytes_sent '' "$http_referer" "$http_user_agent" ';?#設(shè)置日志文件緩存(默認(rèn)是 off),max 設(shè)置緩存中最大文件描述符數(shù)量,inactive 存活時(shí)間,valid 檢查頻率,min_users 在 inactive 時(shí)間內(nèi)最少使用次數(shù),達(dá)到的日志文件描述符記入緩存open_log_file_cache max=1000 inactive=20s valid=1m min_users=2;??#記錄重寫日志rewrite_log off;????????#給客戶端分配keep-alive鏈接超時(shí)時(shí)間keepalive_timeout 30;#--------------------------- 限流 ---------------------------#limit_conn 和 limit_req 可添加到特定 Server 或 location 節(jié)點(diǎn)#1、控制 session#設(shè)置用戶保存各種key的共享內(nèi)存的參數(shù),5m指的是5兆,$binary_remote_addr 根據(jù)遠(yuǎn)程客戶端地址,$server_name 根據(jù)服務(wù)器名稱limit_conn_zone $binary_remote_addr zone=addr:5m;#為給定的key設(shè)置最大的連接數(shù),這里的key是addr,設(shè)定的值是100,根據(jù)上面的定義說允許每一個(gè)IP地址最多同時(shí)打開100個(gè)連接,如果共享內(nèi)存定義的是 $server_name 那么這里是允許服務(wù)器最多同時(shí)打開100個(gè)連接。limit_conn addr 100;#限制流量limit_rate 100k;#2、漏桶方法#定義共享內(nèi)存,與上面的一樣,rate 定義請(qǐng)求次數(shù)(1 秒 20次)limit_req_zone $binary_remote_addr zone=addr:5m rate=20r/s;#burst=5 漏桶數(shù)為5,即如果第1、2、3、4秒請(qǐng)求為19,那么第5秒25次是可以允許的,nodelay 如果沒有則嚴(yán)格使用平均速率限制請(qǐng)求數(shù)limit_raq zone=addr burst=5 nodelay;#include指在當(dāng)前文件中包含另一個(gè)文件內(nèi)容,一般 Server 域是放在另一個(gè)配置文件中的,主配置文件中包含下即可。include porxy.types;#設(shè)置文件使用默認(rèn)的mine-typedefault_type text/html;#設(shè)置默認(rèn)字符集charset UTF-8;#-----------------------------gzip 數(shù)據(jù)-----------------------------#設(shè)置nginx采用gzip壓縮的形式發(fā)送數(shù)據(jù),減少發(fā)送數(shù)據(jù)量,但會(huì)增加請(qǐng)求處理時(shí)間及CPU處理時(shí)間,需要權(quán)衡gzip on;#加vary給代理服務(wù)器使用,針對(duì)有的瀏覽器支持壓縮,有個(gè)不支持,根據(jù)客戶端的HTTP頭來判斷是否需要壓縮gzip_vary on;#nginx在壓縮資源之前,先查找是否有預(yù)先gzip處理過的資源#gzip_static on;#為指定的客戶端禁用gzip功能gzip_disable "MSIE[1-6]\.";#允許或禁止壓縮基于請(qǐng)求和相應(yīng)的響應(yīng)流,any代表壓縮所有請(qǐng)求gzip_proxied any;#設(shè)置對(duì)數(shù)據(jù)啟用壓縮的最少字節(jié)數(shù),如果請(qǐng)求小于10240字節(jié)則不壓縮,會(huì)影響請(qǐng)求速度gzip_min_length 10240;#設(shè)置數(shù)據(jù)壓縮等級(jí),1-9之間,9最慢壓縮比最大gzip_comp_level 2;#設(shè)置需要壓縮的數(shù)據(jù)格式gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; #-----------------------------cache 文件-----------------------------#開發(fā)緩存的同時(shí)也指定了緩存文件的最大數(shù)量,20s如果文件沒有請(qǐng)求則刪除緩存open_file_cache max=100000 inactive=20s;#指多長(zhǎng)時(shí)間檢查一次緩存的有效信息open_file_cache_valid 60s;#文件緩存最小的訪問次數(shù),只有訪問超過5次的才會(huì)被緩存open_file_cache_min_uses 5;#當(dāng)搜索一個(gè)文件時(shí)是否緩存錯(cuò)誤信息open_file_cache_errors on;#允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)client_max_body_size 8m;#沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)client_header_buffer_size 32k;#-----------------------------代理-----------------------------proxy_redirect off;#后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)IP,如果不配置那么web服務(wù)器只能獲取到代理服務(wù)器的ipproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))proxy_connect_timeout 60;#連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))proxy_read_timeout 120;#后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))proxy_send_timeout 20;#設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小proxy_buffer_size 32k;#proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的設(shè)置proxy_buffers 4 128k;#高負(fù)荷下緩沖大小(proxy_buffers*2)proxy_busy_buffers_size 256k;#設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳proxy_temp_file_write_size 256k;#1G內(nèi)存緩沖空間,3天不用刪除,最大磁盤緩沖空間2Gproxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;#-----------------------------負(fù)載均衡-----------------------------#設(shè)定負(fù)載均衡服務(wù)器列表參考博客 nginx 負(fù)載均衡配置upstream myServer{#后端服務(wù)器訪問規(guī)則#ip_hash;server 192.168.0.1:10001 weight=3 max_files=2 file_timeout=30;server 192.168.0.2:10002 weight=3 max_conns=10000;server 192.168.0.3:10003 weight=4;server 192.168.0.4:10004 backup;}?
Server 域配置
? ? 虛擬主機(jī)配置模塊,反向代理或負(fù)載均衡掛載的站點(diǎn)。
????
server {#虛擬主句監(jiān)聽的端口listen 80;#定義訪問的域名server_name www.myserver.com;#設(shè)定本虛擬主機(jī)的訪問日志,使用 main 格式access_log logs/myserver.com.access.log main;#可以在 Server 域中配置限流,具體通過什么方式限流是前面建立共享內(nèi)存區(qū)時(shí)定義的,這里只是配置具體限流多少limit_raq zone=addr burst=5 nodelay;limit_conn addr 100; #默認(rèn)請(qǐng)求# 語法規(guī)則:location [=|~|~*|^~] /uri/ {...} 先匹配普通location,在匹配正則location# = 開頭表示精確匹配# ^~ 開頭表示uri以某個(gè)常規(guī)字符串開頭,理解為匹配url路徑即可,無需考慮編解碼# ~ 開頭表示區(qū)分大小寫的正則匹配# ~* 開頭表示不區(qū)分大小寫的正則匹配# !~ 開頭表示區(qū)分大小寫的不匹配的正則# !~* 開頭表示不區(qū)分大小寫的不匹配的正則# / 通用匹配,任何請(qǐng)求都會(huì)被匹配到location / {#定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置root html;#定義首頁索引文件的名稱index index.html index.htm;#使用 myServer 負(fù)載均衡服務(wù)器組proxy_pass http://myServer;#當(dāng)然也可以在 location 域中配置限流limit_raq zone=addr burst=5 nodelay;limit_conn addr 100; }#定義錯(cuò)誤提示頁面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}#靜態(tài)文件,nginx自己處理location ~ ^/(images|javascript|js|css|flash|media|static)/{root /var/www/virtual/htdocs;#過期時(shí)間1天expires 1d;#關(guān)閉媒體文件日志access_log off;log_not_found off;}#設(shè)定查看Nginx狀態(tài)的地址location /NginxStatus {#!stub_status on; #無此關(guān)鍵字access_log off;auth_basic "NginxStatus";auth_basic_user_file conf/htpasswd;}#禁止訪問的文件.htxxxlocation ~ /\.ht {deny all;}}?
? ? 簡(jiǎn)單的配置,nginx 還有很多功能,包括第三方集成的功能,很強(qiáng)大,后續(xù)慢慢添加。
轉(zhuǎn)載于:https://www.cnblogs.com/muhy/p/10528576.html
總結(jié)
以上是生活随笔為你收集整理的nginx 注释配置及详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: OS实验xv6 6.S081 开坑
- 下一篇: htc one m7 linux驱动,H
