Nginx源碼安裝和調優技巧

本文內容php

  1. Nginx與apache的對比
  2. 實戰1:在「騰訊雲主機」上源碼編譯安裝Nginx
  3. 實戰2:Nginx調優之隱藏版本信息防止黑客掃描識別漏洞
  4. 實戰3:設置網頁緩存

實驗環境: 使用RHEL6.5/centos6.5   64位html

nginx概述: 前端

      Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理服務器。 Nginx 是由 Igor Sysoev(伊戈爾·塞索耶夫)爲俄羅斯訪問量第二的 rambler.ru 站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。mysql

         Nginx可以選擇高效的epoll(Linux2.6內核)做爲網絡I/O)模型,在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品,它可以支持高達5000個併發鏈接數的響應,而內存、CPU等系統資源消耗卻很是低,運行很是穩定。nginx

nginx的官方網站:c++

http://nginx.org/en/download.htmlweb

https://oscimg.oschina.net/oscnet/f4f307d86117f4a98178f382bccee0f4297.jpg

Mainline version  主線版本sql

Stable version  穩定版本shell

Legacy versions  遺產版本 /歷史版本apache

版本命名的常識:偶數爲穩定,奇數是測試版或開發版本

 

Tengine概述:
Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了不少高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等獲得了很好的檢驗。

官方網站:http://tengine.taobao.org/

 

Nginx和Apache的區別:

nginx或apache 服務器自己能夠解析php文件嗎?  

apache和nginx在處理php代碼時有什麼區別?

 

       1:Nginx是經過php-fpm這個服務來處理php文件

       2:Apache是經過libphp5.so這個模塊來處理php文件

 

Nginx

https://oscimg.oschina.net/oscnet/4292ccec6fe2e135a58099df9757fa7fcdb.jpg

Apache

https://oscimg.oschina.net/oscnet/0acad75ba7c614e02bb784d86ad3f7b6172.jpg

 

總結:

Apache的libphp5.so隨着apache服務器一塊兒運行,而Nginx和php-fpm是各自獨立運行,因此在運行過程當中,Nginx和php-fpm都須要分別啓動!

 

實戰場景: 公司如今要上一臺web服務器, 併發數據要達5000人同時在線。 這時應該選擇apache或nginx ?  你選擇哪一個?

 

nginx相對於apache的優勢: 
輕量級,一樣起web 服務,比apache 佔用更少的內存及資源 ;高併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能;高度模塊化的設計,編寫模塊相對簡單;社區活躍,各類高性能模塊出品迅速。

apache 相對於nginx 的優勢: 
apache 超穩定 ,通常來講,須要併發性高的web 服務,用nginx 。若是不須要性能只求穩定,那就apache 。

nginx處理動態請求是雞肋,通常動態請求要apache去作,nginx只適合靜態和反向。

 

安裝nginx

登陸騰訊雲主機: https://www.qcloud.com/

雲主機裝系統使用的鏡像: 不是rhel.iso  用的是 centos.img  或 centos.qcow2

聽風格, 開眼界 !

 

1、安裝nginx時必須先安裝相應的編譯工具
[root@localhost ~]#yum -y install gcc gcc-c++ autoconf automake 

注意  :默認是最小化安裝

gcc                            c語言編譯器

gcc-c++                    c++語言編譯器

autoconf automake           用於make編譯的工具


[root@localhost ~]#yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

zlib  : nginx提供gzip模塊,須要zlib庫支持
openssl : nginx提供ssl功能
pcre  : 支持地址重寫rewrite功能

 

安裝nginx:

上傳nginx軟件包對

[root@localhost ~]# yum install lrzsz -y

 

[root@localhost ~]# tar zxvf nginx-1.10.2.tar.gz

[root@localhost ~] cd nginx-1.10.2

 

[root@localhost  nginx-1.10.2]# useradd  -s /sbin/noligin    -M     nginx                           # 添加nginx用戶,但沒有登陸權限

#vi /etc/passwd                    #查看配置文件,/sbin/noligin表示不能登陸

https://oscimg.oschina.net/oscnet/fe206a7699464fa9e4d107e3fb0f794a076.jpg

#建立一個nginx用戶

-s      指定登陸shell

-M     不建立家目錄

 

[root@localhost nginx-1.10.2]#./configure --prefix=/usr/local/nginx   --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module  --with-http_gzip_static_module  --with-pcre  #檢查編譯環境

 

參數說明:

--prefix=/usr/local/nginx       指定安裝路徑

--user=nginx --group=nginx    指定運行nginx進程的用戶和組

--with-http_ssl_module         支持ssl加密

--with-http_realip_module      此模塊支持顯示真實來源IP地址,主要用於NGINX作前端負載均衡服務器使用

--with-http_gzip_static_module  這個模塊指定壓縮

--with-pcre                   此模塊支持rewrite功能          

[root@xuegod63 nginx-1.10.2]# echo $?

0

 

編譯和安裝:

[root@localhost  nginx-1.10.2]# make -j 4    #編譯,把源代碼編譯成可執行的二進制文件(只有一核,就直接make)。

-j 4  #以4個進程同時編譯

編譯:mysql 內核 1個小時。  -j 4  20分鐘。

 

[root@localhost  nginx-1.10.2]# make  install   #安裝

 

nginx主要目錄結構:

[root@localhost  nginx-1.10.2]# ls /usr/local/nginx/

conf  html  logs  sbin

conf              #配置文件

html            #網站根目錄

logs             #日誌

sbin             #nginx啓動腳本

 

啓動nginx :

[root@localhost  ~]# /usr/local/nginx/sbin/nginx   

測試:

http://123.207.157.107/

https://oscimg.oschina.net/oscnet/20e8d9d70650221e810fccf421088ded43f.jpg

 

實戰2: nginx調優--隱藏版本信息

 

爲何要屏蔽nginx版本信息?

答:由於黑客能夠掃描出nginx版本信息,能夠查看對應的版本信息的漏洞,而後攻擊

如何查nginx版本信息?

 

查看nginx版本信息:

[root@localhost ~]# curl -I www.baidu.com

[root@localhost ~]#  curl -I www.tencent.com

查看本機使用的服務是nginx仍是apache

 

Nginx 漏洞

https://oscimg.oschina.net/oscnet/7ca2a7f6ae3d2076ea3c2abdaa992292dba.jpg

 

[root@localhost ~]# curl -I www.taobao.com

HTTP/1.1 302 Found

Server: Tengine  基於nginx作了二次開發

 

查看本身的服務器:

[root@localhost ~]# curl  -I 123.207.157.107

HTTP/1.1 200 OK

Server: nginx/1.10.2   #這裏暴露了目標信息

 

完全讓版本等敏感信息消失

[root@localhost nginx-1.10.2]# cd /root/nginx-1.10.2

[root@localhost nginx-1.10.2]# vim src/core/nginx.h          //目的更改源碼隱藏軟件名稱和版本號

13

#define NGINX_VERSION       "8.8.2"                 #此行修改的是你想要的版本號

#define NGINX_VER          "XWS/" NGINX_VERSION   #XWS爲此行修改的是你想修改的軟件名稱

[root@localhost nginx-1.9.12]# vim src/http/ngx_http_header_filter_module.c

修改HTTP頭信息中的connection字段,防止回顯具體版本號

改:49 static char ngx_http_server_string[] = "Server: nginx" CRLF;

爲:49 static char ngx_http_server_string[] = "Server: XWS" CRLF;

 

這個文件定義了http錯誤碼的返回,有時候咱們頁面程序出現錯誤,Nginx會代咱們返回相應的錯誤代碼,回顯的時候,會帶上nginx和版本號,咱們把他隱藏起來

[root@localhost nginx-1.9.12]# vim src/http/ngx_http_special_response.c

29

static u_char ngx_http_error_full_tail[] =

"<hr><center>" NGINX_VER "</center>" CRLF

"</body>" CRLF

"</html>" CRLF

 

static u_char ngx_http_error_tail[] =

"<hr><center>XWS</center>" CRLF

"</body>" CRLF

"</html>" CRLF

;

 

須要從新進行nginx安裝:

 [root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop

[root@localhost~]# rm -rf /usr/local/nginx/

[root@localhost nginx-1.10.2]# pwd

/root/nginx-1.10.2

[root@localhost nginx-1.10.2]# make clean           #清空以前編譯安裝的內容。

rm -rf Makefile objs

編譯和安裝:

[root@localhost nginx-1.10.2]#./configure --prefix=/usr/local/nginx   --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module  --with-http_gzip_static_module  --with-pcre && make && make install

 

 

啓動服務:[root@localhost nginx]# /usr/local/nginx/sbin/nginx

 

測試是否隱藏了版本和軟件名

啓動服務:[root@localhost nginx]# /usr/local/nginx/sbin/nginx

測試是否隱藏了版本和軟件名

[root@localhost ~]# curl -I 123.207.157.107

HTTP/1.1 200 OK

Server: XWS/8.8.2

或:

http://123.207.157.107/aaa.html

nginx有24處調優

 

重啓

1、驗證nginx配置文件是否正確

方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t

看到以下顯示nginx.conf syntax is ok

nginx.conf test is successful

說明配置文件正確!

方法二:在啓動命令-c前加-t

 

重啓Nginx服務

 方法一:進入nginx可執行目錄sbin下,輸入命令./nginx -s reload 便可

方法二:查找當前nginx進程號,而後輸入命令:kill -HUP 進程號 實現重啓nginx服務

相關文章
相關標籤/搜索