nginx全面的配置和調優

一、nginx相關介紹
nginx是如今應用比較廣法的web程序,它是支持模塊化的,若是不指定安裝,默認最小安裝,若是須要實現某些特定的功能,只需安裝相應的模塊便可。它很好地節約了所佔用的內存資源。
二、nginx安裝前設置
nginx安裝通常都會選擇源碼包編譯安裝,源碼包安裝的好處是不容易出現漏洞,能夠作個性化設置,好比,能夠在源碼包安裝以前,隱藏或修改所使用的web服務器及其版本。nginx隱藏版本的方法以下:javascript

(1)在安裝以前,進入到nginx源碼包中的src/目錄中,修改nginx頭文件:./src/core/nginx.h   +13 #define nginx_version
#define NGINX_VERSION  "1.12.2"
#define NGINX_VER  "nginx/"  NGINX_VERSION
#define NGINX_VAR "NGINX"
(2)vim +48 src/http/ngx_http_header_filter_modle.c 文件中的nginx相關的字樣
static u_char ngx_http_server_string[ ]="server:nginx"
(3)修改錯誤網頁的底部提示信息(也能夠經過修改錯誤網頁的內容來修改)
vim /src/http/ngx_http_special_response.c
static u_char ngx_http_error_tail[  ]=  

就上面的信息,按照本身的需求修改掉便可,有人說爲什麼要隱藏版本信息,由於可能有些人知道哪些web服務的某些版本存在bug,隱藏信息是爲了安全考慮。
三、源碼編譯安裝
(1)設置一個用戶爲nginx,bash爲noligin,也是爲了安全考慮,防止用root帳戶去關聯上nginx,若是有人經過nginx這個服務×××系統,也不能登陸到系統中來。
(2)源碼編譯安裝
tar解包---./configure配置,根據報錯安裝相應的依賴包-----make編譯-------make install。php

在./configure中能夠配置相信的參數:
--prefix  /usr/local/nginx 安裝目錄
--user nginx 指定用戶
--group nginx  指定組
--with  模塊   指定安裝哪些模塊
--without  模塊  指定不安裝哪些模塊

(3)設置軟鏈接及開機啓動css

ln -s /usr/local/nginx/sbin/nginx    /sbin/
echo "nginx"  >> /etc/rc.d/rc

四、經過修改配置文件來調優及控制安全
vim /usr/local/nginx/conf/nginx.conf
(1)設置worker最大併發鏈接數,默認爲1024html

events {
    worker_connections  65535;
        }

#改完這個以後還要修改ulimit -Hn/Sn 或者修改配置文件:/etc/security/limits.conf
(2)限制併發,防止doc×××前端

http {
……
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
……
server {
limit_req zone=one burst=5;       //當同一地址同一時間發來的鏈接數超過5個數以後的請求則再也不處理。
}
}

(3)拒絕非法請求
通常網頁的訪問請求中,GET和POST這兩個請求爲正常的,其餘的請求都不算正常的大衆請求,這樣的請求要拒絕掉。GET——請求指定的頁面信息,並返回實體主體;POST——向指定資源提交數據進行處理,如上傳文件等。java

server {
……
if  ($request_method   !~^(GET|POST)$) {
return 444;
}
……
}
null

(4)防止buffer溢出nginx

http{
……
client_body_buffer_size 8k;
client_header_buffer_size 1k;
client_max_body_size 16k;
large_client_header_buffers  4 4k;     //後面的參數能夠按照實際狀況修改。
server {
……
} }

五、nginx配置文件實現不一樣的功能
(1)動靜分離
把配置文件中下面的這一段註釋打開web

location ~ \.php$ {   #作動靜分離,動態網站走這.
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;   
        include        fastcgi.conf;
    }

(2)支持加密的web網頁==>https
須要安裝--with-http_ssl_module模塊,而後把443 ssl那一段的配置前面的註釋去掉。
(3)支持4層反向代理json

http {
……
upstream webs{
server 192.168.2.100:80  weight=2 max_fails=2 fail_timeout=10;
server 192.168.2.200:80  weight=1 max_fails=1 fail_timeout=10;
}
server {
……
        location / {
    proxy_pass http://webs;
    ……
把前端的請求轉達給後端的web服務器。
#weight 爲權重;max_fails 爲最大失敗次數;fail_timeout失敗超時時間,單位爲秒.

(4)支持地址重寫
好比公司網頁的域名改了,可是用戶已經習慣用原來的域名來訪問公司的web網頁了,這個時候就須要用到地址重寫,讓用戶訪問a網頁時自動調轉到b網頁vim

rewrite /a.html     /b.html   redirect臨時(permament永久);     //a網頁轉成b網頁
rewrite ^/(.*) http://www.baidu.com/$1;   //整個網站轉發

(5)網頁的監控
若是公司沒有用到zabbix等監控軟件,能夠用--with-http_stub_status_module這個模塊來實現對nginx網頁的健康監控。

server {
……
location /status {
    stub_status on; 
    allow ip;(寫本身的ip,管理員看)
    deny all;
} }
能夠經過curl http://ip/status 來查看網頁的信息

(6)支持不一樣的請求來源給不一樣的頁面
例以下面寫的,若是是firefox這個瀏覽器來的訪問,就給它/firefox下面的網頁。

server {
……
    if ($http_user_agent ~* firefox){
    rewirte ^/(.*)$  /firefox/$1;
    } 
    ……
    }

(7)支持設置客戶端緩存

server {
……
    location ~* \.(jpg|png|js|xml|ico|css|gif|jpeg)$ {
    expires 30d;   #定義客戶端緩存哪些東西及緩存時間
    }
    ……
    }

(8)設置工做進程數

worker_processes 1;
設置爲與cpu內核數量一致。
(9)支持對網頁進行壓縮處理

http {
……
gzip on;    //開啓壓縮
gzip_min_length 1000;   //小文件布壓縮,越壓縮越大。
gzip_comp_level 4;  //壓縮比率
gzip_types text/plain  text/css application/json application/x-javascript application/xml text/xml application/xml+rss text/javascript;
}

壓縮比率從1~9,數字越高壓縮效果越好,可是壓縮時間越長。對特定文件壓縮,通常mp3/mp4/圖片等不要壓縮,它們都是壓縮了的。通常壓縮文檔類字符。類型參考配置文件下面的mime.types文件。

相關文章
相關標籤/搜索