日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Nginx配置詳解

 

Nginx配置詳解

Nginx的配置是在nginx.conf中進行配置的

主要由三部分組成

  • 全局塊
  • events塊
  • http塊

全局塊

從配置文件開始到events塊之間的內容是全局塊,主要用來配置Nginx服務器整體運行的配置指令,主要包括配置運行Nginx的用戶組、允許生成的worker process數,進行PID存放路徑、日志存放路徑和類型以及配置文件的引入

#nginx的用戶和用戶組
#user  nobody;
# nginx處理并發的數量,值越大,處理并發數量越多
# 通常為cpu數量
worker_processes  1;
#全局錯誤日志定義 位置 級別([ debug | info | notice | warn | error | crit ])
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#進程文件
#pid        logs/nginx.pid;

#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求并不均勻,所以建議與ulimit -n的值保持一致.
worker_rlimit_nofile 65535;

events塊

主要是影響Nginx服務器與用戶網絡的連接,常用的配置包括是否開啟對多worker process下的網絡連接進行序列化,是否允許同時接受多個網絡連接,選取那種事件驅動模型來處理連接請求,每個worker process可以同時支持的并發數

events {
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
    #epoll模型是linux內核中的高性能網絡I/O模型,如果在mac上面,就用kqueue模型。
    use kqueue;
# 每個worker process可以同時支持的連接數為1024
# nginx支持的最大并發數是worker_processes*worker_connections
#如果是作為反向代理服務器的話,最大并發數是worker_processes*worker_connections/2,因為反向代理服務器,每個并發會建立與客戶端的連接和與后端的連接,會占用兩個連接
    worker_connections  1024;
}

http塊

Nginx配置中修改最頻繁的配置就是http塊的配置

http塊又分為了http全局塊和server塊

http全局塊

主要配置的是文件的引入、MIME-TYPE定義、日志自定義、連接超時時間、單鏈接請求上限等

server塊主要是虛擬主機的配置

又分為了server全局塊和location塊

http {
        # 文件擴展名與文件類型映射表
    include       mime.types;
    # 默認文件類型
    default_type  Application/octet-stream;

    #默認編碼
    #charset utf-8; 
    #服務器名字的hash表大小
    server_names_hash_bucket_size 128; 
    #上傳文件大小限制
    client_header_buffer_size 32k; 
    #設定請求緩沖
    large_client_header_buffers 4 64k; 
     #設定請求緩沖
    client_max_body_size 8m;

    # 開啟目錄列表訪問,合適下載服務器,默認關閉.
    # 顯示目錄
    autoindex on; 
    # 顯示文件大小 默認為on,顯示出文件的確切大小,單位是bytes 改為off后,顯示出文件的大概大小,單位是kB或者MB或者GB
    autoindex_exact_size on; 
    # 顯示文件時間 默認為off,顯示的文件時間為GMT時間 改為on后,顯示的文件時間為文件的服務器時間
    autoindex_localtime on; 


        #日志格式化
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
        # 日志保存 日志的格式使用main
    #access_log  logs/access.log  main;


        # sendfile  高效傳輸文件的模式
    sendfile        on;
    # 將文件一次性一起傳輸給客戶端,提高網絡包的傳輸效率
    #tcp_nopush     on;
    # 開啟實時傳輸,與tcp_nopush相反,只在長連接下有效
    #tcp_nodelay on;

        #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 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;

        #gzip壓縮
    #gzip  on;
    #允許壓縮的頁面的最小字節數,頁面字節數從header偷得content-length中獲取.默認是0,不管頁面多大都進行壓縮.建議設置成大于1k的字節數,小于1k可能會越壓越大
    gzip_min_length 1k; 
    #表示申請4個單位為16k的內存作為壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果
    gzip_buffers 4 16k; 
    #壓縮版本(默認1.1,目前大部分瀏覽器已經支持gzip解壓.前端如果是squid2.5請使用1.0)
    gzip_http_version 1.1; 
    #壓縮等級.1壓縮比最小,處理速度快.9壓縮比最大,比較消耗cpu資源,處理速度最慢,但是因為壓縮比最大,所以包最小,傳輸速度快
    gzip_comp_level 2; 
    #壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn.
    gzip_types text/plain application/x-JAVAscript text/css application/xml;
    #選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面.例如:用squid緩存經過nginx壓縮的數據
    gzip_vary on;

    #實際的服務器列表
    #upstream myserver {
    #    server 127.0.0.1:8080;
    #    server 127.0.0.1:8082;
    #}

        # 虛擬主機設置
    server {
            #監聽的端口號
        listen       8080;
        #訪問域名
        server_name  localhost;
                #編碼格式
        #charset koi8-r;
                #虛擬主機訪問日志定義
        #access_log  logs/host.access.log  main;
                # url匹配
        location / {
            root   html;
            index  index.html index.htm;
        }

        #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;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # 禁止訪問.ht文件
        #location ~ /.ht {
        #    禁止下載
        #    deny  all;
        #}
    }

    server
    {
        # 監聽端口 HTTPS
        listen 443 ssl;
        server_name ably.com;

        # 配置域名證書
        ssl_certificate      /server/Certs/certificate.crt;
        ssl_certificate_key  /WebServer/Certs/private.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers  on;

        index index.html index.htm index.php;
        root /data/www/;
        location ~ .*.(php|php5)?$
        {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }

        # 配置地址攔截轉發,解決跨域驗證問題
        location /oauth/{
            proxy_pass https://localhost:13580/oauth/;
            proxy_set_header HOST $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # 圖片緩存時間設置
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 10d;
        }

        # JS和CSS緩存時間設置
        location ~ .*.(js|css)?$ {
            expires 1h;
        }

        # 日志格式設定
        log_format access '$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 access;

        # 設定查看Nginx狀態的地址.StubStatus模塊能夠獲取Nginx自上次啟動以來的工作狀態,此模塊非核心模塊,需要在Nginx編譯安裝時手工指定才能使用
        location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
            #htpasswd文件的內容可以用apache提供的htpasswd工具來產生.
        }
    }
    include servers/*;
}

location配置

匹配規則

location有多種匹配規則[=|~|~*|^~] /url/

  • =表示精確匹配,優先級最高
  • ^~表示uri以某個字符串開頭,即^~/spring/ 可以被所有以/spring/開頭的匹配到
  • ~為區分大小寫的正則匹配,如果使用!~則表示取反,不匹配的正則
  • ~*為不區分大小寫的正則匹配,如果使用!~*則表示取反,不匹配的正則
  • /通用匹配,任何請求都會匹配到

靜態文件路徑

可以使用root或alias來指定靜態資源文件路徑,root可以配置在http塊、server塊、location塊以及if塊中,alias只能配置在location塊中

root

使用root來表示請求的url時會進行完整的拼接,即如果請求使用的uri是/pic/index.html的話,使用root實際獲取的是
/data/www/web/pic/index.html

location /pic/ {
    root /data/www/web;
}

alias

alias會將location中配置的路徑丟棄掉,即即如果請求使用的uri是/pic/index.html的話,使用alias實際獲取的是/data/www/web/index.html

location /pic/ {
    alias /data/www/web;
}

Nginx常見配置參數

  • servernameshashmaxsize 1024;
  • servernameshashbucketsize 512;
  • clientheaderbuffer_size 32k; # 客戶端請求頭部的緩沖區大
  • largeclientheader_buffers 4 32k;
  • clientmaxbody_size 10m;#設置最大的允許客戶端請求主體的大小(上傳文件大小限制), 默認為1m
  • clientbodybuffer_size 128k;
  • keepalive_timeout 60; #客戶端連接超時時間,單位是秒, 默認是75秒
  • sendfile on; # 開啟高效傳輸模式,默認為off
  • tcp_nopush on;
  • tcp_nodelay on;
  • ssi on; # 開啟ssi支持,默認為false
  • ssisilenterrors on; # 設置為on表示在處理ssi文件時不輸出錯誤信息,默認為false
  • ssitypes text/html; # 默認支持html ,如果需要支持shtml(服務器執行腳本),需要設置為ssitypes text/shtml
  • server_tokens off; # 關閉nginx版本號的顯示,默認為on

Nginx優化相關參數

  • worker_processes 2; # 配置生成的worker process數量,一般為cpu核數
  • workerrlimitnofile 65536; # 一個nginx進程打開的最多文件描述符數目,一般設置為與系統設定的值相同(ulimit -n)
  • workercpuaffinity 01 10;# 為每個進程分配CPU的工作內核
  • use epoll; # 事務模型
events {
 use epoll; # 事務模型
 worker_connections 20000; # 一個nginx進程的連接數,nginx服務器允許的同事連接的客戶端最大數量Client = worker_processes * worker_connections/2;
}

Nginx常見用法

依據UA屏蔽爬蟲

if ($http_user_agent ~* "qihoobot|Baiduspider|googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou
spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
    return 403;
}

屏蔽IP訪問

allow 133.27.182.82;
allow 113.106.18.0/24;
allow 121.201.104.0/24;
deny all;

使用Auth權限訪問

auth_basic "bbs-auth";
auth_basic_user_file /usr/local/nginx/conf/bbsauthpwd;

限制帶寬

# 用戶下載達到 500k 后,便控制其速度在 50k 以內
location /download/ {
    limit_rate_after 500k;
    limit_rate 50k;
}

限制連接

# 定義了一個名為“down”,10M大小,以連接IP為key的連接數據存儲空間
limit_conn_zone $binary_remote_addr zone=down:10m;

# 讀取名為`down`連接數據存儲空間的數據,限制每個key(上面是以ip作為IP) 最大同時連接數為4
location ~ .*.(rar|zip|apk)?$ {
    limit_conn down 4;
    limit_rate 150k;
}

limit_conn_log_level notice: 指定當觸發limit的時候日志打印級別

限制請求

# 定義一個名為”one”, 10M大小,每秒1個請求的請求數據存儲空間
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

# 引用名為“one”的存儲空間,burst為等待請求數量數,當等待請求數量超過50個時,則拋出503錯誤,nodelay 針對的是 burst 參數,burst=50 nodelay 表示這50個請求立馬處理,不能延遲,相當于特事特辦。不過,即使這20個突發請求立馬處理結束,后續來了請求也不會立馬處理。burst=50 相當于緩存隊列中占了50個坑,即使請求被處理了,這20個位置這只能按 100ms一個來釋放
limit_req zone=one burst=50 nodelay;
limit_req_log_level notice: 指定當觸發limit的時候日志打印級別

實時顯示Nginx運行狀況

在安裝nginx是編譯httpstubstatusmodule即可,使用參數為–with-httpstubstatusmodule

location /ngx_status {
    stub_status on;
    access_log on;
}

設置錯誤頁面

error_page 404 /404.html

Nginx 常見錯誤碼

  • 301 永久重定向
  • 302 臨時重定向
  • 403 禁止訪問
  • 404 文件不存在
  • 413 文件上傳超過限制
  • 500 服務器錯誤
  • 502 后臺服務器無響應
  • 504 Nginx超時,請求過多,工作進程不足

分享到:
標簽:配置 Nginx
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定