本文內容php
實驗環境: 使用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
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:
Apache:
總結:
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表示不能登陸
#建立一個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/
實戰2: nginx調優--隱藏版本信息
爲何要屏蔽nginx版本信息?
答:由於黑客能夠掃描出nginx版本信息,能夠查看對應的版本信息的漏洞,而後攻擊
如何查nginx版本信息?
查看nginx版本信息:
[root@localhost ~]# curl -I www.baidu.com
[root@localhost ~]# curl -I www.tencent.com
查看本機使用的服務是nginx仍是apache
Nginx 漏洞
[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處調優
看到以下顯示nginx.conf syntax is ok
nginx.conf test is successful
說明配置文件正確!
重啓Nginx服務
方法一:進入nginx可執行目錄sbin下,輸入命令./nginx -s reload 便可