前言
nginx作爲後起之秀,最然目前市場份額現在遠不足apache,但是從增長速度和發展前景來看,nginx是未來的趨勢。具體數據可以參考https://www.netcraft.com/。截至到寫博客的時間,全球的web server的佔用率參考下圖,可以看出明顯的趨勢。
nginx的特性
1、可針對靜態資源高速併發訪問及緩存
2、可使用反向代理加速,並且可進行數據緩存
3、具有簡單負載均衡、節點健康檢查和容錯功能
4、支持遠程FastCGI服務的緩存加速
5、支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和緩存
6、支持SSL、TLS、SNI
7、具有模塊化的架構:過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT、SSI及圖像縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,如果經由FastCGI或反向代理處理,可被並行處理。
8、同時具備其他web server的特性
nginx的特點
1、基於異步網絡I/O模型
2、具備支持高性能,高併發的特性,併發連接可高達數萬
3、對小文件高併發支持很好,性能很高
4、不支持類似Apache的DSO模式,擴展庫必須編譯進主程序(缺點)
5、進程佔用資源比較低
6、支持Web、反向Proxy、Cache三大重點功能,並且都很優秀
7、市場份額在逐年快速增加
爲何nginx性能要強?
nginx使用最新的epoll和kqueue異步網絡I/O模型,而Apache使用的傳統的select模型。目前Linux下能夠承受高併發訪問的Squid、Memcached軟件採用的都是epoll模型。這裏稍微給大家稍微介紹一下兩者區別。
指標 | select | epoll |
性能 | 隨着連接數的增加性能急劇下降,處理成千上萬併發連接數時,性能很差 | 隨着連接數的增加,性能基本上沒有下降。處理成千上萬併發連接時,性能很好 |
連接數 | 連接數有限制,處理的最大連接數不超過1024。如果要處理的連接數超過1024個,需要重新編譯 | 連接數無限制 |
內在處理機制 | 線性輪詢 | 回調callback |
參考資料:《跟老男孩學Linux運維:Web集羣實戰》
編譯安裝nginx
1、安裝編譯環境
]#yum install -y "development tools" ]#yum install -y pcre-devel ]#yum install -y openssl-devel
2、通過官網下載相對應的源碼。http://nginx.org/
3、上傳解壓並根據需要修改參數
]#vim src/http/ngx_http_header_filter_module.c static u_char ngx_http_server_string[] = "Server: Apache" CRLF; <===這裏更改是server_tokens off的情況下顯示的內容 ]#vim src/core/nginx.h # define NGINX_VERSION "2.4.2" <===這裏是更改默認的版本和名稱 # define NGINX_VER "Tengine/" NGINX_VERSION ]#./configure --prefix=/usr/local/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_dav_module \ --with-http_stub_status_module \ --with-threads \ --with-file-aio \ ]#make && make install ]#vim /etc/profile.d/nginx.sh <===配置環境變量 1 export PATH=/usr/local/nginx/sbin:$PATH ]#nginx <===啓動服務
爲什麼要修改這兩個參數?先找個客戶端測試一下
]#curl -I 192.168.32.112 HTTP/1.1 200 OK Server: Tengine/2.4.2 <===完美的隱藏了我們本身的web server,讓***者蒙圈 Date: Sun, 29 Oct 2017 12:17:13 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sun, 29 Oct 2017 10:22:52 GMT Connection: keep-alive ETag: "59f5abfc-264" Accept-Ranges: bytes ]#vim /etc/nginx/nginx.conf http{ server_tokens off; } ]#curl -I 192.168.32.112 HTTP/1.1 200 OK Server: Apache <===關閉後顯示的是src/http/ngx_http_header_filter_module.c中的名字,兩種方法都可以進行隱藏實際的web server。提高安全性 Date: Sun, 29 Oct 2017 12:30:34 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sun, 29 Oct 2017 10:22:52 GMT Connection: keep-alive ETag: "59f5abfc-264" Accept-Ranges: bytes