nginx配置文件詳細解析

1.worker_processes=8
設置 worker_processes 來更改 Nginx 的進程數量,設置數值一般與服務器邏輯cpu個數相同,目的是把不同的worker_processes進程分配到不同的cpu上運行
  • 查看邏輯cpu個數方法  cat /proc/cpuinfo | grep "processor" | wc -l
  • 查看物理cpu的個數  cat /proc/cpuinfo | grep "physical id" | sort | uniq |wc -l
  • 查看cpu是幾核 cat /proc/cpuinfo | grep "cored" | uniq

2.全局錯誤日誌和pid文件
error_log /var/log/nginx/error.log;
pid //var/run/nginx.pid;

3.工作模式和連接數上限
events{
    use epoll;  #epoll是多路複用IO(I/O Multiplexing) 中的一種方式,但僅用於linux2.6內核,可以大大提高nginx的性能
    worker_connections 1024; #單個後臺worker process進程的最大併發鏈接數
                調整方式 查看 ulimit -n   系統句柄配置
                系統可以打開的文件句柄數是 cat /proc/sys/fs/file-max
                併發鏈接總數是worker_processes 和 worker_connections的乘積
                即max_clients=worker_processes*worker_connections
                在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4 爲什麼         
          # 爲什麼上面反向代理要除以4,應該說是一個經驗值
                併發連接總輸小於系統可以打開的文件句柄總數,這樣就在操作系統可以承受的範圍之內
    #multi_accept on;

}


4.設定http服務器
http{
    include mime.types ; //設定mime類型,類型由mime.type文件定義,文件擴展名與文件類型映射表
    default_type application/octet-stream; //默認文件類型
    access_log /var/log/nginx/access.log; //設定日誌格式
    
    sendfile on;
    #sendfile指令指定nginx是否調用sendfile函數(zero copy方式)來輸出文件
    #對於剖通應用,必須設爲on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime時間。如果圖片顯示不正常把這個改成off
    tcp_nopush on;防止網絡阻塞
    tcp_nodelay on;防止網絡阻塞
    keepalive_timeout 120;長連接超時時間,單位是秒
    
    server_tokens 並不會讓nginx執行的速度更快,但它可以關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的
    gzip on; gzip告訴nginx採用gzip壓縮的形式發送數據,這將會減少我們發送的數據量
    gzip_disable 爲指定的客戶端禁用gzip功能
    gzip_min_length 設置對數據啓用壓縮的最少字節數,如果一個請求小於1000,我們最好不要壓縮它,因爲壓縮小的數據會降低處理此請求的所有進程的速度
    gzip_comp_level 設置數據的壓縮等級,這個等級可以是1-9之間的任意數值,9是最慢但是壓縮比最大的,我們設置成4,這是一個比較折中的設置
    gzip_buffers 4 16k 壓縮緩衝區
    gzip_http_version 1.0 壓縮版本 默認是1.1
    gzip_type設置需要壓縮的數據格式

    
    
    FastCGI相關參數是爲了改善網站的性能,減少資源佔用,提高訪問速度
    

}

nginx日誌的指令主要有兩條:
log_format , 設置日誌的格式
access_log  指定日誌文件的存放路徑、格式和緩存大小
兩條指令在nginx配置文件中的位置可以在http{ }之間,也可以在虛擬主機之間,即server{ } 兩大括號之間
log_format語法如下:
log_format name format [format ...]
name表示定義的格式名稱(name名稱在nginx配置文件中是不能重複的)
format 表示定義的格式樣式。log_format有一個默認的、無須設置的combined日誌格式設置


但這個日誌格式得不到客戶端的真實ip
原因在客戶端和web服務器之間增加了中間層(比如反向代理服務器,CDN加速), 因此web服務器無法直接拿到客戶端的IP,通過$remote_addr變量拿到的將是反向代理服務器的IP地址。但是反向代理服務器在轉發請求的http頭信息中,可以增加X-Forwarded-For信息,用以記錄原有的客戶端IP地址和原來客戶端請求的服務器地址。這時候就要用log_format指令來設置日誌格式,讓日誌記錄X-Forwarded-For信息中的IP地址,即客戶的真實IP

log_format main '$http_x_forwarded_for $remote_port [$time_local] '
                            '"$request" $status $body_bytes_sent"'
                            '"http_referer" "$http_user_agent" "$cookie_id"';
access_log  logs/logs.log  main;
error_log  logs/error.log warn;



access_log語法如下
access_log path [format [buffer=size | off ] ]
其中path表示日誌文件的存放路徑,format表示使用log_format指令設置的日誌格式的名稱,buffer=size表示設置內存緩衝區的大小,例如可以設置buffer=32k
1)如果不想記錄日誌,可以使用以下指令關閉日誌記錄
access_log off
2)如果想使用默認的combined格式的日誌記錄,可以直接寫
access_log /xxx/access.log
或者access_log /xxx/access.log combined;
3)如果想使用自定義格式的日誌記錄,可以使用以下示例,其中的mylogformat是日誌格式名稱


4)在nginx 0.7.4之後的版本中,access_log 指令中的日誌文件路徑可包含變量 如
access_log /data/logs/$server_name.log combined;

設定虛擬主機配置
server{
    listen 80;
    server_name 172.16.110.3 weixin.shike001.com;
    index index.php index.html index.htm;
    
    access_log logs/access.log main;
    error_log /var/log/nginx/error.log warn;
    
    定義錯誤提示頁面
    error_page 404 500 502 503 504 /404/index.htm;

    #靜態文件,nginx自己處理
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {  
        #過期30天,靜態文件不怎麼更新,過期可以設大一點,
        #如果頻繁更新,則可以設置得小一點。
        expires 30d;
    }
    
    #PHP腳本請求全部轉發到FastCGI處理,使用FastCGI默認配置
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    #禁止訪問 .htxx 文件
    location  ~/.ht {
        deny all;
    }

    #設定查看Nginx狀態的地址
    location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
            #htpasswd文件的內容可以用apache提供的htpasswd工具來產生。
        }
    

SSI:Server Side Include,是一種基於服務端的網頁製作技術,大多數(尤其是基於Unix平臺)的web服務器如Netscape Enterprise Server等均支持SSI命令。
它的工作原因是:在頁面內容發送到客戶端之前,使用SSI指令將文本、圖片或代碼信息包含到網頁中。對於在多個文件中重複出現內容,使用SSI是一種簡便的方法,將內容存入一個包含文件中即可,不必將其輸入所有文件。通過一個非常簡單的語句即可調用包含文件,此語句指示 Web 服務器將內容插入適當網頁。而且,使用包含文件時,對內容的所有更改只需在一個地方就能完成。

二.如何在nginx上配置SSI
需要的選項主要是以下三個:
ssi: 默認值off,啓用ssi時將其設爲on
ssi_silent_errors: 默認值off,開啓後在處理SSI文件出錯時不輸出錯誤提示"[an error occurred while processing the directive]"。
ssi_types: 默認是text/html,所以如果需支持html,則不需要設置這句,如果需要支持shtml則需要設置:ssi_types text/shtml
三個參數可以放在http, server或location作用域下。


        

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章