nginx配置文件解讀

nginx

Nginx是一款開(kāi)源代碼的高性能HTTP服務(wù)器和反向代理服務(wù)器,同時(shí)支持IMAP/POP3/SMTP代理服務(wù)

Nginx由內(nèi)核和模塊組成猎唁,完成工作是通過(guò)查找配置文件將客戶端請(qǐng)求映射到一個(gè)locationblock(location是用于URL匹配的命令)椎组,location配置的命令會(huì)啟動(dòng)不同模塊完成工作泣洞。

Nginx模塊分為核心模塊宴抚,基礎(chǔ)模塊和第三方模塊。
核心模塊:HTTP模塊奠蹬、EVENT模塊(事件)、MAIL模塊嗡午。
基礎(chǔ)模塊:HTTP Access模塊囤躁、HTTP FastCGI模塊、HTTP Proxy模塊、HTTP Rewrite模塊狸演。
第三方模塊:HTTP Upstream Request Hash模塊言蛇、Notice模塊、HTTP Access Key模塊宵距。

nginx安裝

#安裝部署nginx所用到的安裝工具和相關(guān)庫(kù)
#默認(rèn)安裝的http_rewrite_module(使用正則對(duì)請(qǐng)求重寫(xiě))需pcre庫(kù)
#默認(rèn)安裝的httP_gzip_module(Gzip壓縮)需zlib庫(kù)
#安裝http_ssl_module(HTTPS/SLL)需openssl庫(kù)
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
#下載nginx源碼包腊尚,并解壓
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz
cd nginx-1.10.3
#設(shè)置參數(shù) 參數(shù)具體參考《Nginx編譯參數(shù)》
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module 
#編譯并安裝 
make && make install

nginx配置文件

配置文件主要由四部分組成:main(全局配置),server(主機(jī)配置)满哪,upstream(負(fù)載均衡服務(wù)器設(shè)置)婿斥,和location(URL匹配特定位置設(shè)置)。

全局變量

#Nginx的worker進(jìn)程運(yùn)行用戶以及用戶組
#user  nobody nobody;
#Nginx開(kāi)啟的進(jìn)程數(shù)
worker_processes  1;
#worker_processes auto;
#以下參數(shù)指定了哪個(gè)cpu分配給哪個(gè)進(jìn)程哨鸭,一般來(lái)說(shuō)不用特殊指定受扳。如果一定要設(shè)的話,用0和1指定分配方式.
#這樣設(shè)就是給1-4個(gè)進(jìn)程分配單獨(dú)的核來(lái)運(yùn)行兔跌,出現(xiàn)第5個(gè)進(jìn)程是就是隨機(jī)分配了勘高。
eg:
#worker_processes 4     #4核CPU 
#worker_cpu_affinity 0001 0010 0100 1000
#定義全局錯(cuò)誤日志定義類(lèi)型,[debug|info|notice|warn|crit]
#error_log  logs/error.log  info;
#指定進(jìn)程ID存儲(chǔ)文件位置
#pid        logs/nginx.pid;
#一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目坟桅,理論值應(yīng)該是最多打開(kāi)文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除华望,但是nginx分配請(qǐng)求并不是那么均勻,所以最好與ulimit -n的值保持一致仅乓。
worker_rlimit_nofile 65535;

事件配置

events {
    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內(nèi)核中的高性能網(wǎng)絡(luò)I/O模型赖舟,如果跑在FreeBSD上面,就用kqueue模型夸楣。
    use epoll;
    #每個(gè)進(jìn)程可以處理的最大連接數(shù)宾抓,理論上每臺(tái)nginx服務(wù)器的最大連接數(shù)為worker_processes*worker_connections。理論值:worker_rlimit_nofile/worker_processes
    #注意:最大客戶數(shù)也由系統(tǒng)的可用socket連接數(shù)限制(~ 64K)豫喧,所以設(shè)置不切實(shí)際的高沒(méi)什么好處
    worker_connections  65535;    
    #worker工作方式:串行(一定程度降低負(fù)載石洗,但服務(wù)器吞吐量大時(shí),關(guān)閉使用并行方式)
    #multi_accept on; 
}

http配置

http
{
    #文件擴(kuò)展名與文件類(lèi)型映射表
    include mime.types;
    #默認(rèn)文件類(lèi)型
    default_type application/octet-stream;

#日志相關(guān)定義
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #定義日志的格式紧显。后面定義要輸出的內(nèi)容讲衫。
    #1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;
    #2.$remote_user :用來(lái)記錄客戶端用戶名稱孵班;
    #3.$time_local :用來(lái)記錄訪問(wèn)時(shí)間與時(shí)區(qū)涉兽;
    #4.$request  :用來(lái)記錄請(qǐng)求的url與http協(xié)議;
    #5.$status :用來(lái)記錄請(qǐng)求狀態(tài)篙程; 
    #6.$body_bytes_sent :記錄發(fā)送給客戶端文件主體內(nèi)容大屑衔贰;
    #7.$http_referer :用來(lái)記錄從那個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的虱饿;
    #8.$http_user_agent :記錄客戶端瀏覽器的相關(guān)信息
    #連接日志的路徑拥诡,指定的日志格式放在最后丹允。
    #access_log  logs/access.log  main;
    #只記錄更為嚴(yán)重的錯(cuò)誤日志,減少I(mǎi)O壓力
    error_log logs/error.log crit;
    #關(guān)閉日志
    #access_log  off;

    #默認(rèn)編碼
    #charset utf-8;
    #服務(wù)器名字的hash表大小
    server_names_hash_bucket_size 128;
    #客戶端請(qǐng)求單個(gè)文件的最大字節(jié)數(shù)
    client_max_body_size 8m;
    #指定來(lái)自客戶端請(qǐng)求頭的hearerbuffer大小
    client_header_buffer_size 32k;
    #指定客戶端請(qǐng)求中較大的消息頭的緩存最大數(shù)量和大小袋倔。
    large_client_header_buffers 4 64k;
    #開(kāi)啟高效傳輸模式雕蔽。
    sendfile        on;
    #防止網(wǎng)絡(luò)阻塞
    tcp_nopush on;
    tcp_nodelay on;
    
    #客戶端連接超時(shí)時(shí)間,單位是秒
    keepalive_timeout 60;
    #客戶端請(qǐng)求頭讀取超時(shí)時(shí)間
    client_header_timeout 10;
    #設(shè)置客戶端請(qǐng)求主體讀取超時(shí)時(shí)間
    client_body_timeout 10;
    #響應(yīng)客戶端超時(shí)時(shí)間
    send_timeout 10;

#FastCGI相關(guān)參數(shù)是為了改善網(wǎng)站的性能:減少資源占用宾娜,提高訪問(wèn)速度批狐。
    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;

#gzip模塊設(shè)置
    #開(kāi)啟gzip壓縮輸出
    gzip on; 
    #最小壓縮文件大小
    gzip_min_length 1k; 
    #壓縮緩沖區(qū)
    gzip_buffers 4 16k;
    #壓縮版本(默認(rèn)1.1,前端如果是squid2.5請(qǐng)使用1.0)
    gzip_http_version 1.0;
    #壓縮等級(jí) 1-9 等級(jí)越高前塔,壓縮效果越好嚣艇,節(jié)約寬帶,但CPU消耗大
    gzip_comp_level 2;
    #壓縮類(lèi)型华弓,默認(rèn)就已經(jīng)包含text/html食零,所以下面就不用再寫(xiě)了,寫(xiě)上去也不會(huì)有問(wèn)題寂屏,但是會(huì)有一個(gè)warn贰谣。
    gzip_types text/plain application/x-javascript text/css application/xml;
    #前端緩存服務(wù)器緩存經(jīng)過(guò)壓縮的頁(yè)面
    
gzip_vary on;
}

虛擬主機(jī)配置

#虛擬主機(jī)的配置
server
{
    #監(jiān)聽(tīng)端口
    listen 80;

    #域名可以有多個(gè),用空格隔開(kāi)
    server_name www.jd.com jd.com;
    index index.html index.htm index.php;
    root /data/www/jd;

    #對(duì)******進(jìn)行負(fù)載均衡
    location ~ .*.(php|php5)?$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
     
    #圖片緩存時(shí)間設(shè)置
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 10d;
    }
     
    #JS和CSS緩存時(shí)間設(shè)置
    location ~ .*.(js|css)?$
    {
        expires 1h;
    }
     
    #日志格式設(shè)定
    #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址迁霎;
    #$remote_user:用來(lái)記錄客戶端用戶名稱吱抚;
    #$time_local: 用來(lái)記錄訪問(wèn)時(shí)間與時(shí)區(qū);
    #$request: 用來(lái)記錄請(qǐng)求的url與http協(xié)議考廉;
    #$status: 用來(lái)記錄請(qǐng)求狀態(tài)秘豹;成功是200,
    #$body_bytes_sent :記錄發(fā)送給客戶端文件主體內(nèi)容大胁痢既绕;
    #$http_referer:用來(lái)記錄從那個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的;
    #$http_user_agent:記錄客戶瀏覽器的相關(guān)信息涮坐;
    #通常web服務(wù)器放在反向代理的后面凄贩,這樣就不能獲取到客戶的IP地址了,通過(guò)$remote_add拿到的IP地址是反向代理服務(wù)器的iP地址膊升。反向代理服務(wù)器在轉(zhuǎn)發(fā)請(qǐng)求的http頭信息中怎炊,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來(lái)客戶端的請(qǐng)求的服務(wù)器地址廓译。
    log_format access '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
     
    #定義本虛擬主機(jī)的訪問(wèn)日志
    access_log  /usr/local/nginx/logs/host.access.log  main;
    access_log  /usr/local/nginx/logs/host.access.404.log  log404;
     
    #對(duì) "/" 啟用反向代理
    location / {
        proxy_pass http://127.0.0.1:88;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
         
        #后端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶真實(shí)IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         
        #以下是一些反向代理的配置,可選债查。
        proxy_set_header Host $host;

        #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)
        client_max_body_size 10m;

        #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)非区,
        #如果把它設(shè)置為比較大的數(shù)值,例如256k盹廷,那么征绸,無(wú)論使用firefox還是IE瀏覽器,來(lái)提交任意小于256k的圖片,都很正常管怠。如果注釋該指令淆衷,使用默認(rèn)的client_body_buffer_size設(shè)置,也就是操作系統(tǒng)頁(yè)面大小的兩倍渤弛,8k或者16k祝拯,問(wèn)題就出現(xiàn)了。
        #無(wú)論使用firefox4.0還是IE8.0她肯,提交一個(gè)比較大佳头,200k左右的圖片,都返回500 Internal Server Error錯(cuò)誤
        client_body_buffer_size 128k;

        #表示使nginx阻止HTTP應(yīng)答代碼為400或者更高的應(yīng)答晴氨。
        proxy_intercept_errors on;

        #后端服務(wù)器連接的超時(shí)時(shí)間_發(fā)起握手等候響應(yīng)超時(shí)時(shí)間
        #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
        proxy_connect_timeout 90;

        #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
        #后端服務(wù)器數(shù)據(jù)回傳時(shí)間_就是在規(guī)定時(shí)間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù)
        proxy_send_timeout 90;

        #連接成功后康嘉,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
        #連接成功后_等候后端服務(wù)器響應(yīng)時(shí)間_其實(shí)已經(jīng)進(jìn)入后端的排隊(duì)之中等候處理(也可以說(shuō)是后端服務(wù)器處理請(qǐng)求的時(shí)間)
        proxy_read_timeout 90;

        #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
        #設(shè)置從被代理服務(wù)器讀取的第一部分應(yīng)答的緩沖區(qū)大小,通常情況下這部分  應(yīng)答中包含一個(gè)小的應(yīng)答頭籽前,默認(rèn)情況下這個(gè)值的大小為指令proxy_buffers中指定的一個(gè)緩沖區(qū)的大小亭珍,不過(guò)可以將其設(shè)置為更小
        proxy_buffer_size 4k;

        #proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的設(shè)置
        #設(shè)置用于讀取應(yīng)答(來(lái)自被代理服務(wù)器)的緩沖區(qū)數(shù)目和大小枝哄,默認(rèn)情況也為分頁(yè)大小块蚌,根據(jù)操作系統(tǒng)的不同可能是4k或者8k
        proxy_buffers 4 32k;

        #高負(fù)荷下緩沖大小(proxy_buffers*2)
        proxy_busy_buffers_size 64k;

        #設(shè)置在寫(xiě)入proxy_temp_path時(shí)數(shù)據(jù)的大小膘格,預(yù)防一個(gè)工作進(jìn)程在傳遞文件時(shí)阻塞太長(zhǎng)
        #設(shè)定緩存文件夾大小峭范,大于這個(gè)值,將從upstream服務(wù)器傳
        proxy_temp_file_write_size 64k;
 }

nginx狀態(tài)監(jiān)控

#Nginx運(yùn)行狀態(tài)瘪贱,StubStatus模塊獲取Nginx自啟動(dòng)的工作狀態(tài)(編譯時(shí)要開(kāi)啟對(duì)應(yīng)功能)
#location /NginxStatus {
#    #啟用StubStatus的工作訪問(wèn)狀態(tài)    
#    stub_status    on;
#    #指定StubStaus模塊的訪問(wèn)日志文件
#    access_log    logs/Nginxstatus.log;
#    #Nginx認(rèn)證機(jī)制(需Apache的htpasswd命令生成)
#    #auth_basic    "NginxStatus";
#    #用來(lái)認(rèn)證的密碼文件
#    #auth_basic_user_file    ../htpasswd;    
#}

反向代理


#以下配置追加在HTTP的全局變量中
#nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
proxy_connect_timeout      5;
#后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
proxy_send_timeout         5;
#連接成功后纱控,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
proxy_read_timeout         60;
#設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffer_size          16k;
#proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的話菜秦,這樣設(shè)置
proxy_buffers              4 32k;
#高負(fù)荷下緩沖大刑鸷Α(proxy_buffers*2)
proxy_busy_buffers_size    64k;
#設(shè)定緩存文件夾大小,大于這個(gè)值球昨,將從upstream服務(wù)器傳
proxy_temp_file_write_size 64k;
#反向代理緩存目錄
proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;
#levels=1:2 設(shè)置目錄深度尔店,第一層目錄是1個(gè)字符,第2層是2個(gè)字符
#keys_zone:設(shè)置web緩存名稱和內(nèi)存緩存空間大小
#inactive:自動(dòng)清除緩存文件時(shí)間主慰。
#max_size:硬盤(pán)空間最大可使用值嚣州。
#指定臨時(shí)緩存文件的存儲(chǔ)路徑(路徑需和上面路徑在同一分區(qū))
proxy_temp_path 
/data/proxy/temp

#服務(wù)配置
server {
    #偵聽(tīng)的80端口
    listen       80;
    server_name  localhost;
    location / {
        #反向代理緩存設(shè)置命令(proxy_cache zone|off,默認(rèn)關(guān)閉所以要設(shè)置)
        proxy_cache cache_one;
        #對(duì)不同的狀態(tài)碼緩存不同時(shí)間
        proxy_cache_valid 200 304 12h;
        #設(shè)置以什么樣參數(shù)獲取緩存文件名
        proxy_cache_key $host$uri$is_args$args;
        #后7端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶真實(shí)IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  
        #代理設(shè)置
        proxy_pass   http://IP; 
        #文件過(guò)期時(shí)間控制
        expires    1d;
    }
    #配置手動(dòng)清楚緩存(實(shí)現(xiàn)此功能需第三方模塊 ngx_cache_purge)
    #http://www.123.com/2017/0316/17.html訪問(wèn)
    #http://www.123.com/purge/2017/0316/17.html清楚URL緩存
    location ~ /purge(/.*) {
        allow    127.0.0.1;
        deny    all;
        proxy_cache_purge    cache_one    $host$1$is_args$args;
    }
    #設(shè)置擴(kuò)展名以.jsp、.php共螺、.jspx結(jié)尾的動(dòng)態(tài)應(yīng)用程序不做緩存
    location ~.*\.(jsp|php|jspx)?$ { 
        proxy_set_header Host $host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  
        proxy_pass http://http://IP;
    }   

負(fù)載均衡

#負(fù)載均衡配置
upstream piao.jd.com {
    #upstream的負(fù)載均衡该肴,weight是權(quán)重,可以根據(jù)機(jī)器配置定義權(quán)重藐不。weigth參數(shù)表示權(quán)值匀哄,權(quán)值越高被分配到的幾率越大秦效。
    server 192.168.80.121:80 weight=3;
    server 192.168.80.122:80 weight=2;
    server 192.168.80.123:80 weight=3;

    #nginx的upstream目前支持4種方式的分配
    #1、輪詢(默認(rèn))
    #每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器涎嚼,如果后端服務(wù)器down掉阱州,能自動(dòng)剔除。
    #2法梯、weight
    #指定輪詢幾率苔货,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況鹊汛。
    #例如:
    #upstream bakend {
    #    server 192.168.0.14 weight=10;
    #    server 192.168.0.15 weight=10;
    #}
    #2蒲赂、ip_hash
    #每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器刁憋,可以解決session的問(wèn)題滥嘴。
    #例如:
    #upstream bakend {
    #    ip_hash;
    #    server 192.168.0.14:88;
    #    server 192.168.0.15:80;
    #}
    #3、fair(第三方)
    #按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求至耻,響應(yīng)時(shí)間短的優(yōu)先分配若皱。
    #upstream backend {
    #    server server1;
    #    server server2;
    #    fair;
    #}
    #4、url_hash(第三方)
    #按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求尘颓,使每個(gè)url定向到同一個(gè)后端服務(wù)器走触,后端服務(wù)器為緩存時(shí)比較有效。
    #例:在upstream中加入hash語(yǔ)句疤苹,server語(yǔ)句中不能寫(xiě)入weight等其他的參數(shù)互广,hash_method是使用的hash算法
    #upstream backend {
    #    server squid1:3128;
    #    server squid2:3128;
    #    hash $request_uri;
    #    hash_method crc32;
    #}

    #tips:
    #upstream bakend{#定義負(fù)載均衡設(shè)備的Ip及設(shè)備狀態(tài)}{
    #    ip_hash;
    #    server 127.0.0.1:9090 down;
    #    server 127.0.0.1:8080 weight=2;
    #    server 127.0.0.1:6060;
    #    server 127.0.0.1:7070 backup;
    #}
    #在需要使用負(fù)載均衡的server中增加 proxy_pass http://bakend/;

    #每個(gè)設(shè)備的狀態(tài)設(shè)置為:
    #1.down表示單前的server暫時(shí)不參與負(fù)載
    #2.weight為weight越大,負(fù)載的權(quán)重就越大卧土。
    #3.max_fails:允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí)惫皱,返回proxy_next_upstream模塊定義的錯(cuò)誤
    #4.fail_timeout:max_fails次失敗后,暫停的時(shí)間尤莺。
    #5.backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候旅敷,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕颤霎。

    #nginx支持同時(shí)設(shè)置多組的負(fù)載均衡媳谁,用來(lái)給不用的server來(lái)使用。
    #client_body_in_file_only設(shè)置為On 可以講client post過(guò)來(lái)的數(shù)據(jù)記錄到文件中用來(lái)做debug
    #client_body_temp_path設(shè)置記錄文件的目錄 可以設(shè)置最多3層目錄
    #location對(duì)URL進(jìn)行匹配.可以進(jìn)行重定向或者進(jìn)行新的代理 負(fù)載均衡
}

URL重寫(xiě)

#根據(jù)不同的瀏覽器URL重寫(xiě)
if($http_user_agent ~ Firefox){
rewrite ^(.*)$  /firefox/$1 break; 
}
if($http_user_agent ~ MSIE){
rewrite ^(.*)$  /msie/$1 break; 
}

#實(shí)現(xiàn)域名跳轉(zhuǎn)
location / {
    rewrite ^/(.*)$ https://web8.example.com$1 permanent;
}

IP限制

#限制IP訪問(wèn)
location / {
    deny 192.168.0.2友酱;
    allow 192.168.0.0/24;
    allow 192.168.1.1;
    deny all;
}

Nginx相關(guān)命令

#啟動(dòng)nginx
nginx 
#關(guān)閉nginx
nginx -s stop
#平滑重啟
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

nginx配置優(yōu)化

基本安全優(yōu)化

隱藏版本信息

一般來(lái)說(shuō)晴音,軟件的漏洞都和版本相關(guān),所以我們要隱藏或消除web服務(wù)對(duì)訪問(wèn)用戶顯示的各種敏感信息粹污。

[root@db01 rpm]# curl -I 10.0.0.8
HTTP/1.1 401 Unauthorized
Server: nginx   #隱藏版本號(hào)
Date: Thu, 21 Jul 2016 03:23:38 GMT
Content-Type: text/html
Content-Length: 188
Connection: keep-alive
WWW-Authenticate: Basic realm="oldboy training"
過(guò)程:
vim /application/nginx/conf/nginx.conf
在http模塊下加入:
server_tokens off;
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx -s reload

隱藏nginx要修改源代碼

要修改內(nèi)容的路徑:

第一路徑:
/home/oldboy/tools/nginx-1.6.3/src/core/nginx.h 第14段多,16行
#define NGINX_VERSION  "1.6.2" 修改為想要的版本號(hào)如2.4.3
#define NGINX_VER "nginx/" NGINX_VERSION 將nginx修改為想要修改的軟件名稱,如Apache壮吩。

第二路徑
/home/oldboy/tools/nginx-1.6.3/src/http/ngx_http_header_filter_module.c第49行
grep 'Server:nginx' ngx_http_header_filter_module.cstatic
sed -i 's#Server:nginx#Server:Apache#g' ngx_http_header_filter_module.c

第三路徑
/home/oldboy/tools/nginx-1.6.3/src/http/ngx_http_special_response.c第21,30行
"<hr><center>"NGINX_VER "(http://oldboy.blog.51cto.com)</center>" CRLF
"<hr><center>OWS</center>" CRLF

然后重新編譯

更改nginx服務(wù)的默認(rèn)用戶

第一種方法:
直接更改配置文件nginx.conf.default參數(shù)进苍,將默認(rèn)的#user nobody;改為user nginx.nginx;

第二種方法:
直接在編譯nginx的時(shí)候指定用戶和用戶組命令如下:
./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module

降權(quán)啟動(dòng)nginx

useradd inca
cd /home/inca/
mkdir conf logs www
echo inca >www/index.html
chown -R inca.inca *
ln -s /application/nginx/conf/mime.types conf/mime.types  #mime.types媒體類(lèi)型文件
egrep -v "#|^$" /application/nginx/conf/nginx.conf.default >conf/nginx.conf

nginx.conf配置文件
worker_processes  1;
error_log  /home/inca/logs/error.log;
pid /home/inca/logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                 '$status $body_bytes_sent "$http_referer" '
                                 '"$http_user_agent" "$http_x_forwarded_for"';
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8080;
        server_name  localhost;
        location / {
            root   /home/inca/www;
            index  index.html index.htm;
            }
            access_log /home/inca/logs/access.log main;
}
}

su - inca -c "/application/nginx/sbin/nginx -c /home/inca/conf/nginx.conf"   #啟動(dòng)nginx服務(wù)

重點(diǎn)強(qiáng)調(diào):
1.nginx.conf里面的相關(guān)路徑都要更改
2.普通用戶的端口問(wèn)題

根據(jù)參數(shù)優(yōu)化nginx服務(wù)性能

優(yōu)化nginx進(jìn)程個(gè)數(shù)的策略

在高并發(fā)、高訪問(wèn)量的web服務(wù)場(chǎng)景鸭叙,需要事先啟動(dòng)好更多的nginx進(jìn)程觉啊,以保證快速響應(yīng)并處理大量并發(fā)用戶的請(qǐng)求。

worker_processes  1; #一般調(diào)整到與CPU的顆數(shù)相同

查看LInux可查看CPU個(gè)數(shù)及總核數(shù)

grep processor /proc/cpuinfo|wc -l

查看CPU總顆數(shù)

grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l

通過(guò)執(zhí)行top命令沈贝,然后按數(shù)字1杠人,即可顯示所有的CPU核數(shù)

top  #按1鍵就會(huì)顯示第一個(gè)的信息
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0

優(yōu)化綁定不同的nginx進(jìn)程到不同的CPU上

默認(rèn)情況下,nginx的進(jìn)程跑在某一個(gè)CPU或CPU的某一個(gè)核上宋下,導(dǎo)致nginx進(jìn)程使用硬件的資源不均嗡善,本節(jié)的優(yōu)化是不同的nginx進(jìn)程給不同的CPU處理,充分有效的利用有效的硬件資源

四核cpu配置
worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

雙核配置
worker_processes    2;
worker_cpu_affinity 0101 1010;

還有一個(gè)命令taskset -c用來(lái)分配服務(wù)給CPU

nginx事件處理模型優(yōu)化

nginx的連接處理機(jī)制在于不同的操作系統(tǒng)會(huì)采用不同的IO模型学歧,Linux下罩引,nginx使用epoll的I/O多路復(fù)用模型,在freebsd使用kqueue的IO多路復(fù)用模型枝笨,在solaris使用/dev/pool方式的IO多路復(fù)用模型袁铐,在windows使用的icop等等。

要根據(jù)系統(tǒng)類(lèi)型不同選擇不同的事務(wù)處理模型横浑,選擇有“use [ kqueue | rtsig | epool |dev/pool | select | pllo ];”我們使用的是Centos6.5的linux剔桨,因此將nginx的事件處理模型調(diào)整為epool模型。

events {
worker_connections  1024;
use epoll;
}

官方說(shuō)明:在不指定事件處理模型時(shí)徙融,nginx默認(rèn)會(huì)自動(dòng)的選擇最佳的事件處理模型服務(wù)

調(diào)整nginx單個(gè)進(jìn)程允許的客戶端最大連接數(shù)

參數(shù)語(yǔ)法:worker_connections number
默認(rèn)配置:worker_connections 512
放置位置:events 標(biāo)簽

events {
    worker_connections  1024;    #一個(gè)worker進(jìn)程的并發(fā)
}

總并發(fā)= worker_processes* worker_connections

配置nginx worker進(jìn)程最大打開(kāi)文件數(shù)

參數(shù)語(yǔ)法:worker_rlimit_nofile number
放置位置:主標(biāo)簽段
說(shuō)明:作用是改變worker processes能打開(kāi)的最大文件數(shù)

worker_rlimit_nofile 65535;

這各參數(shù)受系統(tǒng)文件的最大打開(kāi)數(shù)限制洒缀,解決方法:

[root@admin nginx]# cat /proc/sys/fs/file-max
8192

文件系統(tǒng)最大可打開(kāi)文件數(shù)

[root@admin nginx]# ulimit -n
1024

程序限制只能打開(kāi)1024個(gè)文件

使用# ulimit -n 8192調(diào)整一下

或者永久調(diào)整打開(kāi)文件數(shù) 可在啟動(dòng)文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=xxx無(wú)效)

開(kāi)啟高效文件傳輸模式

設(shè)置參數(shù) sendfile on;

sendfile參數(shù)用于開(kāi)啟文件的高效傳輸模式。同時(shí)將tcp_nopush和tcp_nodelay兩個(gè)指令設(shè)置為on欺冀,可防止網(wǎng)絡(luò)及磁盤(pán)i/o阻塞树绩,提升nginx工作效率。

http {
  sendfile        on;     #放在http脚猾,server葱峡,location都可以
}

設(shè)置參數(shù)tcp_nopush;

激活tcp_nopush參數(shù)可以允許把httpresponse header和文件的開(kāi)始放在一個(gè)文件里發(fā)布龙助,積極的作用是減少網(wǎng)絡(luò)報(bào)文段的數(shù)量(只有sendfile on開(kāi)啟才生效)
復(fù)制代碼

例:

    sendfile   on;
    tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;
    server_names_hash_bucket_size 128;
    server_names_hash_max_size 512;
    keepalive_timeout  65;
    client_header_timeout 15s;
    client_body_timeout 15s;
    send_timeout 60s;

FastCGI相關(guān)參數(shù)調(diào)優(yōu)

fastcgi參數(shù)是配合nginx向后請(qǐng)求PHP動(dòng)態(tài)引擎服務(wù)的相關(guān)參數(shù)砰奕。
fastcgi_connect_timeout 240;
fastcgi_send_timeout 240;
fastcgi_read_timeout 240;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#fastcgi_temp_path /data/ngx_fcgi_tmp;
fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;

配置nginx gzip壓縮實(shí)現(xiàn)性能優(yōu)化

nginx壓縮功能的介紹:
  nginx gzip壓縮模塊提供了壓縮文件內(nèi)容的功能,用戶請(qǐng)求的內(nèi)容在發(fā)送給客戶端之前提鸟,nginx服務(wù)器會(huì)根據(jù)一些具體的策略實(shí)施壓縮军援,以節(jié)省網(wǎng)站出口帶寬,同時(shí)加快了數(shù)據(jù)傳輸效率称勋,提升了用戶的訪問(wèn)體驗(yàn)胸哥。

壓縮的優(yōu)點(diǎn):
  提升網(wǎng)站用戶體驗(yàn):由于發(fā)給用戶的內(nèi)容小了,所以用戶訪問(wèn)單位大小的頁(yè)面就快了赡鲜,用戶體驗(yàn)就提升了
  節(jié)約網(wǎng)站帶寬成本:由于數(shù)據(jù)時(shí)壓縮傳輸?shù)目昭幔虼寺瑫?huì)消耗一些cpu資源

壓縮的對(duì)象:
  純文本內(nèi)容壓縮比很高,因此嘲更,純文本的內(nèi)容最好要壓縮
  被壓縮的純文本文件必須要大于1KB筐钟,由于壓縮算法的特殊原因,極小的文件壓縮反而變大
  圖片赋朦、視頻(流媒體)等文件盡量不要壓縮篓冲,因?yàn)檫@些文件大多都是經(jīng)過(guò)壓縮的,如果再壓縮很可能不會(huì)減小或減小很少宠哄,或者有可能增大壹将,而在壓縮時(shí)還會(huì)消耗大量的CPU、內(nèi)存資源

參數(shù)介紹及配置說(shuō)明:

gzip on;                   #表示開(kāi)啟壓縮功能

gzip_min_length  1k;       #表示允許壓縮的頁(yè)面最小字節(jié)數(shù)毛嫉,頁(yè)面字節(jié)數(shù)從header頭的Content-Length中獲取诽俯。默認(rèn)值是0,表示不管頁(yè)面多大都進(jìn)行壓縮狱庇,建議設(shè)置成大于1K惊畏。如果小于1K可能會(huì)越壓越大

gzip_buffers     4 32k;    #壓縮緩存區(qū)大小

gzip_http_version 1.1;    #壓縮版本

gzip_comp_level 9;      #壓縮比率

gzip_types  text/css text/xml application/javascript;  #指定壓縮的類(lèi)型

gzip_vary on;        #vary header支持

完美配置:
nginx.conf  http模塊
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 32k;
  gzip_http_version 1.1;
  gzip_comp_level 9;
  gzip_types  text/css text/xml application/javascript;
  gzip_vary on;

nginx expires功能

為用戶訪問(wèn)網(wǎng)站的內(nèi)容設(shè)定一個(gè)過(guò)期時(shí)間,當(dāng)用戶第一次訪問(wèn)到這些內(nèi)容時(shí)密任,會(huì)把這些內(nèi)容存儲(chǔ)在用戶瀏覽器本地颜启,這樣用戶第二次及之后繼續(xù)訪問(wèn)該網(wǎng)站,瀏覽器就會(huì)檢查已經(jīng)緩存在用戶瀏覽器本地的內(nèi)容浪讳,就不會(huì)去瀏覽器下載了缰盏,直到緩存的內(nèi)容過(guò)期或者被清除為止。

expires作用和優(yōu)點(diǎn):
  expires可以降低網(wǎng)站的帶寬淹遵,節(jié)約成本
  加快用戶訪問(wèn)網(wǎng)站的速度口猜,提升了用戶訪問(wèn)體驗(yàn)
  服務(wù)器訪問(wèn)量降低,服務(wù)器壓力就減輕了透揣,服務(wù)器的成本也會(huì)降低济炎,甚至可以節(jié)約人力成本
  幾乎對(duì)于所有web服務(wù)來(lái)說(shuō),這是非常重要的功能之一辐真,apache服務(wù)也有此功能须尚。

nginx expires 配置詳解:

## Add expires header according to URI(path or dir).

location ~ ^/(images|javascript|js|css|flash|media|static)/ {
    expires 360d;
}

expire缺點(diǎn)及解決辦法:
  當(dāng)網(wǎng)站被緩存的頁(yè)面或數(shù)據(jù)更新了,此時(shí)用戶端看到的可能還是舊的已經(jīng)緩存的內(nèi)容侍咱,這樣就會(huì)影響用戶體驗(yàn)耐床,那么如何解決這個(gè)問(wèn)題呢?
  第一:對(duì)于經(jīng)常需要的變動(dòng)圖片等文件,可以縮短對(duì)象緩存時(shí)間楔脯,例如撩轰,百度、谷歌等網(wǎng)站的首頁(yè)圖片經(jīng)常會(huì)換成一些節(jié)日的圖,這里可以將緩存期修改為1天
  第二:當(dāng)網(wǎng)站改版或更新內(nèi)容時(shí)堪嫂,可以在服務(wù)器將緩存的對(duì)象改名(網(wǎng)站代碼程序)
  對(duì)于網(wǎng)站的圖片偎箫、附件,一般不會(huì)被用戶直接修改溉苛,用戶層面上的修改圖片镜廉,實(shí)際上是重新傳到服務(wù)器弄诲,雖然內(nèi)容一樣但是一個(gè)新的圖片名了
  網(wǎng)站改版升級(jí)會(huì)修改JS愚战、CSS元素,若改版的時(shí)候?qū)@些元素改了名齐遵,會(huì)使得前端的CDN以及用戶端需要重新緩存內(nèi)容

nginx日志的優(yōu)化

編寫(xiě)腳本實(shí)現(xiàn)日志輪詢
  編寫(xiě)腳本實(shí)現(xiàn)nginx access日志輪詢
  用戶咋請(qǐng)求一個(gè)軟件時(shí)寂玲,絕大多數(shù)軟件都會(huì)記錄用戶的訪問(wèn)情況,nginx軟件目前沒(méi)有類(lèi)似apache通過(guò)cronolog或者rotatelog對(duì)日志分隔處理的功能梗摇,但是拓哟,運(yùn)維人員可以通過(guò)利用腳本開(kāi)發(fā)、nginx的信號(hào)控制功能或reload重新加載伶授,來(lái)實(shí)現(xiàn)日志的自動(dòng)切割断序、輪詢。

操作步驟:

#寫(xiě)一個(gè)定時(shí)任務(wù)
mv www_access.log www_access_$(date +F -d -1day).log
/applocation/nginx/sbin/nginx -s reload

不記錄不需要的日志

 在實(shí)際工作中糜烹,對(duì)于負(fù)載均衡器健康檢查節(jié)點(diǎn)或某些特定的文件(圖片违诗、JS、CSS)的日志疮蹦,一般不需要記錄下來(lái)诸迟,因?yàn)樵诮y(tǒng)計(jì)PV時(shí)是按照頁(yè)面計(jì)算的,而且日志寫(xiě)入的太頻繁會(huì)消耗磁盤(pán)i/o愕乎,降低服務(wù)的性能

具體配制方法:

location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
    access_log off;
}

訪問(wèn)日志的權(quán)限設(shè)置

假如日志目錄為/app/logs阵苇,則授權(quán)方法為:

  chown -R root.root /app/logs
  chmod -R 600 /app/logs

不需要在日志目錄上給nginx用戶讀寫(xiě)或者讀寫(xiě)許可,很多人都沒(méi)有注意這個(gè)問(wèn)題感论,這就稱為了安全隱患绅项。

nginx站點(diǎn)目錄及文件URL訪問(wèn)控制

根據(jù)擴(kuò)展名限制程序和文件訪問(wèn)

web2.0時(shí)代,絕大多數(shù)網(wǎng)站都是以用戶為中心的比肄,這些產(chǎn)品有一些共同點(diǎn)快耿,就是不允許用戶發(fā)布內(nèi)容到服務(wù)器,還允許用戶發(fā)圖片甚至附件上傳到服務(wù)器上薪前,給用戶開(kāi)啟了上傳的功能润努。帶來(lái)了很大的安全隱患。

下面將利用nginx配置禁止訪問(wèn)上傳資源目錄下的PHP,SHELL,PERL,PYTHON程序文件示括,這樣就算是用戶上傳了木馬文件也沒(méi)辦法執(zhí)行

location ~ ^/images/.*\.(php|php5|.sh|.pl|.py)$
{
    deny all;
}
location ~ ^/static/.*\.(php|php5|.sh|.pl|.py)$
{
  deny all;
}
location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$
{
  deny all;
}

對(duì)于上述目錄的限制必須寫(xiě)在nginx處理PHP服務(wù)配置的前面

禁止訪問(wèn)指定目錄下的所有文件和目錄

配置禁止訪問(wèn)指定的單個(gè)或多個(gè)目錄

location ~ ^/(static)/ {
    deny all;
}



location ~ ^/static {
    deny all;
}

禁止訪問(wèn)目錄并且返回代碼404

server {

    listen       80;

    server_name  www.etiantian.org etiantian.org;

    root   /data0/www/www;

    index  index.html index.htm;

    access_log  /app/logs/www_access.log  commonlog;

    location /admin/ { return 404; }

    location /templates/ { return 403; }

}

限制網(wǎng)站來(lái)源的IP訪問(wèn)
使用ngx_http_access_module限制網(wǎng)站來(lái)源IP訪問(wèn)铺浇。
范例1:禁止外界訪問(wèn),但允許某個(gè)IP訪問(wèn)該目錄

location ~ ^/oldboy/ {

       allow 202.111.12.211;

       deny all;

}

范例2:限制及指定IP或IP段訪問(wèn)垛膝。

location / {

       deny 192.168.1.1;

       allow 192.168.1.0/24;

       allow 10.1.1.0/16;

       deny all;

}

配置nginx禁止非法域名解析訪問(wèn)企業(yè)網(wǎng)站

問(wèn)題:nginx如何防止用戶IP訪問(wèn)網(wǎng)站(惡意域名解析鳍侣,相當(dāng)于直接使用IP訪問(wèn)網(wǎng)站)

方法1:直接報(bào)錯(cuò)丁稀,用戶體驗(yàn)不好


server {

listen 80 default_server;

server_name _;

return 501;

}

方法2:通過(guò)301跳轉(zhuǎn)到主頁(yè)

server {

listen 80 default_server;

server_name _;

rewrite ^(.*) http//:blog.etiantian.org/$1 permanent;

}

nginx圖片防盜鏈解決方案。

簡(jiǎn)單的說(shuō)倚聚,沒(méi)有經(jīng)過(guò)你的允許在自己網(wǎng)站嵌入你的圖片线衫。

常見(jiàn)的防盜鏈解決方案的基本原理
根據(jù)HTTP referer實(shí)現(xiàn)防盜鏈
根據(jù)cookie防盜鏈

防盜鏈實(shí)戰(zhàn)

被盜鏈的網(wǎng)站配置


  #Preventing hot linking of images and other file types
  location ~* ^.+\.(jpg|png|swf|flv|rar|zip)$ {
      valid_referers none blocked *.etiantian.org etiantian.org;
      if ($invalid_referer) {

          rewrite ^/ http://bbs.etiantian.org/img/nolink.gif;

     }

     root html/www;

15 }

nginx錯(cuò)誤頁(yè)面的優(yōu)雅顯示

范例:當(dāng)出現(xiàn)403錯(cuò)誤會(huì)跳轉(zhuǎn)到403.html頁(yè)面

error_page  403  /403.html;

部署網(wǎng)站程序權(quán)限設(shè)置

wordpress站點(diǎn)目錄權(quán)限設(shè)置

方案1:推薦方案

目錄:755

文件:644

所有者:root

圖片及上傳目錄設(shè)置所有者為www

cd /application/apache/html/

chown -R root.root blog

find ./blog/ -type f|xargs chmod 644

find ./blog/ -type d|xargs chmod 755

nginx防爬蟲(chóng)優(yōu)化

配置

if  ($http_user_agent   ~*  LWP:Simple|BBBike|wget)  {

return  403 ;

rewrite ^(.*) http://blog.etiantian.org/$1 permanent;

}

利用nginx限制HTTP的請(qǐng)求方法

配置:

if ($request_method  !~  ^(GET|HEAD|POST)$ ) {

return  501;

}

配置上傳服務(wù)器限制HTTP的GET的配置


#Only allow these request methods ##

if ($request_method ~*(GET)$ ) {

   return 501;

}

使用CDN做網(wǎng)站內(nèi)容加速

cdn特點(diǎn)

本地Cache加速 提高了企業(yè)站點(diǎn)(尤其含有大量圖片和靜態(tài)頁(yè)面站點(diǎn))的訪問(wèn)速度,并大大提高以上性質(zhì)站點(diǎn)的穩(wěn)定性

鏡像服務(wù) 消除了不同運(yùn)營(yíng)商之間互聯(lián)的瓶頸造成的影響惑折,實(shí)現(xiàn)了跨運(yùn)營(yíng)商的網(wǎng)絡(luò)加速授账,保證不同網(wǎng)絡(luò)中的用戶都能得到良好的訪問(wèn)質(zhì)量。

遠(yuǎn)程加速 遠(yuǎn)程訪問(wèn)用戶根據(jù)DNS負(fù)載均衡技術(shù)智能自動(dòng)選擇Cache服務(wù)器惨驶,選擇最快的Cache服務(wù)器白热,加快遠(yuǎn)程訪問(wèn)的速度

帶寬優(yōu)化 自動(dòng)生成服務(wù)器的遠(yuǎn)程Mirror(鏡像)cache服務(wù)器,遠(yuǎn)程用戶訪問(wèn)時(shí)從cache服務(wù)器上讀取數(shù)據(jù)粗卜,減少遠(yuǎn)程訪問(wèn)的帶寬屋确、分擔(dān)網(wǎng)絡(luò)流量、減輕原站點(diǎn)WEB服務(wù)器負(fù)載等功能续扔。

集群抗攻擊 廣泛分布的CDN節(jié)點(diǎn)加上節(jié)點(diǎn)之間的智能冗余機(jī)制攻臀,可以有效地預(yù)防黑客入侵以及降低各種D.D.o.S攻擊對(duì)網(wǎng)站的影響,同時(shí)保證較好的服務(wù)質(zhì)量 纱昧。

使用普通用戶啟動(dòng)Nginx(監(jiān)牢模式)

解決方案

給Nginx服務(wù)降權(quán),用普通用戶跑Nginx服務(wù)刨啸,給開(kāi)發(fā)及運(yùn)維設(shè)置普通賬號(hào)

開(kāi)發(fā)人員使用普通賬號(hào)即可管理nginx服務(wù)及站點(diǎn)下的程序和日志

責(zé)任劃分:網(wǎng)絡(luò)問(wèn)題:運(yùn)維責(zé)任,網(wǎng)站打不開(kāi)開(kāi)發(fā)責(zé)任砌些。(共同承擔(dān))

實(shí)戰(zhàn)配置:


useradd inca

cd /home/inca

mkdir conf www log

echo inca >www/index.html

修改配置文件

error_log /home/inca/log/error.log

pid /home/inca/log/nginx.pid

控制Nginx并發(fā)連接數(shù)量

ngx_http_limit_conn_module這個(gè)模塊用于限制每個(gè)定義key值得連接數(shù)呜投,特別是單個(gè)TP的連接數(shù)。
不是所有的連接數(shù)都會(huì)被計(jì)算存璃。一個(gè)符合計(jì)數(shù)要求的連接是整個(gè)請(qǐng)求頭已經(jīng)被讀取的連接仑荐。

控制Nginx并發(fā)連接數(shù)量參數(shù)的說(shuō)明
limit_conn_zone參數(shù):
語(yǔ)法:limit_conn_zone key zone=name:size;
上下文:http
用于設(shè)置共享內(nèi)存區(qū)域,key可以是字符串纵东、Nginx自帶變量或前兩個(gè)組合粘招。name為內(nèi)存區(qū)域的名稱,size為內(nèi)存區(qū)域的大小偎球。

limit_conn參數(shù)
語(yǔ)法:limit_conn zone number;
上下文:http洒扎、server、location
用于指定key設(shè)置最大連接數(shù)衰絮。當(dāng)超時(shí)最大連接數(shù)時(shí)袍冷,服務(wù)器會(huì)返回503報(bào)錯(cuò)。

控制客戶端請(qǐng)求Nginx的速率

ngx_http_limit_req_module模塊用于限制每個(gè)IP訪問(wèn)每個(gè)定義key的請(qǐng)求速率猫牡。

limit_req_zone參數(shù)說(shuō)明如下胡诗。
語(yǔ)法:limit_req_zone key zone=name:size rate=rate;
上下文:http
用于設(shè)置共享內(nèi)存區(qū)域,key可以是字符串,Nginx自帶變量或前兩個(gè)組合煌恢。name為內(nèi)存區(qū)域的名稱骇陈,size為內(nèi)存區(qū)域的大小,rate為速率瑰抵,單位為r/s,每秒一個(gè)請(qǐng)求你雌。

limit_req參數(shù)說(shuō)明如下:
語(yǔ)法:limit_req zone=name [burst-number] [nobelay]
上下文:http、server二汛、location
這里運(yùn)用了令牌桶原理婿崭,burst=num,一個(gè)有num快令牌习贫,令牌發(fā)完后逛球,多出來(lái)的那些請(qǐng)求就會(huì)返回503。
  
nodelay默認(rèn)在不超過(guò)burst值得前提下會(huì)排隊(duì)等待處理苫昌,如果使用此參數(shù),就會(huì)處理完num+1次請(qǐng)求幸海,剩余的請(qǐng)求為超時(shí)祟身,返回503。

一個(gè)完整的配置

user www-data;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 100000;
events
 {
worker_connections 2048;
multi_accept on;
use epoll;
}
http
{
    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    access_log off;
    error_log /var/log/nginx/error.log crit;
    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;
    include /etc/nginx/mime.types;
    default_type text/html;
    charset UTF-8;
    gzip on;
    gzip_disable "msie6";
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/x-javascript text/xml       application/xml application/xml+rss text/javascript;
    open_file_cache max=100000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

請(qǐng)關(guān)注我的訂閱號(hào)

訂閱號(hào).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末物独,一起剝皮案震驚了整個(gè)濱河市袜硫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挡篓,老刑警劉巖婉陷,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異官研,居然都是意外死亡秽澳,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)戏羽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)担神,“玉大人,你說(shuō)我怎么就攤上這事始花⊥叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵酷宵,是天一觀的道長(zhǎng)亥贸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)浇垦,這世上最難降的妖魔是什么炕置? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上讹俊,老公的妹妹穿的比我還像新娘垦沉。我一直安慰自己,他們只是感情好仍劈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布厕倍。 她就那樣靜靜地躺著,像睡著了一般贩疙。 火紅的嫁衣襯著肌膚如雪讹弯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天这溅,我揣著相機(jī)與錄音组民,去河邊找鬼。 笑死悲靴,一個(gè)胖子當(dāng)著我的面吹牛臭胜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播癞尚,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼耸三,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了浇揩?” 一聲冷哼從身側(cè)響起仪壮,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胳徽,沒(méi)想到半個(gè)月后积锅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡养盗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年缚陷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笛厦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝶缀,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布薄货,位于F島的核電站翁都,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谅猾。R本人自食惡果不足惜柄慰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一鳍悠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坐搔,春花似錦藏研、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至凳忙,卻和暖如春业踏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涧卵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工勤家, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柳恐。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓伐脖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親胎撤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晓殊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容