1. 程式人生 > >centos7.4編譯安裝nginx

centos7.4編譯安裝nginx

編譯 nginx

前言

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模型。這裏稍微給大家稍微介紹一下兩者區別。

指標
selectepoll
性能隨著連接數的增加性能急劇下降,處理成千上萬並發連接數時,性能很差隨著連接數的增加,性能基本上沒有下降。處理成千上萬並發連接時,性能很好
連接數連接數有限制,處理的最大連接數不超過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

centos7.4編譯安裝nginx