一、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文件。