Apache :這是中小型Web服務的主流,Web服務器中的老大哥,php
Nginx :大型網站Web服務的主流,曾經Web服務器中的初生牛犢,現已長大。html
Nginx 的分支 Tengine ( http://tengine.taobao.org/)目前也在飛速發展•前端
Lighttpd :這是一個不溫不火的優秀 Web軟件,社區不活躍,靜態解析效率很高.在 Nginx 流行前,它是大併發靜態業務的首選,國內百度貼吧、豆瓣等衆多網站都有Lighttpd奮鬥的身彩" mysql
* PHP ( FastCGI ):大中小型網站都會使用,動態網頁語言PHP程序的解析容器。它可配合Apache解析動態程序,不過,這裏的PHP不是FastCGI守護進程橫式,而是mod_php5.so ( module)也可配合Nginx解析動態程序,此時的PHP經常使用FastCGI守護進程模式提供服務。
* Tomcat :中小企業動態Web服務主流,互聯網Java容器主流(如jsp、do )
* Resin :大型動態Web服務主流,互聯網Java容器主流(如jsp、do )
* IIS ( Internet information services ):微軟 windows 下的 Web 服務軟件(如 asp、aspx )nginx
若是你據說或使用過 Apache軟件,那麼很快就會熟悉 Nginx軟件,與 Apache軟件相似, Nginx ( 「engme x")是一個開源的,支持高性能、高併發的 WWW服務器和代理服務軟件。它是由俄羅斯人 Igor Sysoev開發的,最初被應用在勘羅斯的大型網站 www.rambler.ru 上,後來做者將源代碼以類BSD許可證的形式開源出來供全球使用。c++
Nginx因具備高併發(特別是靜態資源)佔用系統資源少等特性,且功能豐富而逐漸流行起來。web
在功能應用發麪,Nginx不可是一個優秀的Web服務軟件,還具備反向代理負載均衡功能和緩存服務功能。在反向代理負載均衡功能方面,它相似於大名鼎鼎的LVS負載均衡及Haproxy等專業代理軟件,可是Nginx部署起來更爲簡單、方便;在緩存服務功能方面,它又相似於Squid等專業的緩存服務軟件。正則表達式
Nginx 能夠運行在 UNIX、Linux、BSD、Mac 0S X、Solaris,以及 Microsoft Windows 等操做系統中。隨着Nginx在國內不少大型網站中的穩定高效運行,近兩年它也逐漸被愈來愈多的中小型網站所使用。當前流行的Nginx Web組合被稱爲LNMP或LEMP(即Linux Nginx MySQL PHP),其中 LNMP 裏的 N 取自Nginx ( "engine x" ) redis
Nginx 的官方介紹見 http://nginx.org/ensql
u 支持高併發:能支持幾萬併發鏈接(特別是靜態小文件業務環境)
u 資源消耗少:在3萬併發鏈接下,開啓10個Nginx線程消耗的內存不到200MB
u 能夠作HTTP反向代理及加速緩存、即負載均衡功能,內置對RS節點服務器健康檢查功能,這至關於專業的Haproxy軟件或LVS的功能。
u 具有Squid等專業緩存軟件等的緩存功能。
u 支持異步網絡I/O事件橫型epoll(Linux2.6+)
Ø web網站服務
Ø 反向代理負載均衡(nginx /lvs /haproxy)
Ø nginx緩存服務(memcache /redis /mongodb)
業務類型 |
應用方案 |
靜態業務 |
如果高併發場景,儘可能採用Nginx或Lighttpd,兩者首選Nginx |
動態業務 |
理論上採用Nginx和Apache都可,建議選擇Nginx,爲了不相同業務的服務軟件多樣化,增長額外維護成本。動態業務能夠由Nginx兼作前端代理,再根據頁面元素的類型或目錄,轉發到後端相應的服務器處理進程。 ---首選tomcat |
既有靜態業務又有動態業務 |
採用Nginx 利用nginx軟件是沒法處理動態業務請求,要讓nginx結合php軟件處理動態業務請求,在加上mysql 即 LNMP架構 |
先來看看Apache軟件的特色,以下
² Apache2.2版本很是穩定強大,據官方說,Apache2.4版本性能更強。
² Prefork模式取消了進程建立開銷,性能很高。
² 處理動態業務數據時,因關聯到後端的引擎和數據庫,瓶頸不在Apache上。
² 高併發時消耗系統資源相對多一些。
² 基於傳統的select模型,高併發能力有限。
² 支持擴展庫,可經過DSO、apxs方法編譯安裝額外的插件功能,不須要從新編譯Apache
² 功能多,更穩定,更安全,插件也多。
² 市場份額在逐年遞減
再來看看Nginx軟件的特色,以下:
n 基於異步網結I/O模 型(epollk kqueue)
n 具有支持高性能,高併發的特性,併發鏈接可達數萬。
n 對小文件(小於1 MB的靜態文件)高併發支持很好,性能很高
n 不支持相似 Apache的DSO模式、擴展庫必須編譯進主程序(缺點)
n 進程佔用系統資源比較低。
n 支持Web、反向Proxy、Cache三大重點功能,幷且都很優秀。
n 市場份額在逐年快速增長。
最後是Lighttpd的特色,以下:
² 基於異步網絡 I/ O模型,性能、併發都與 Nginx相近。
² 擴展庫是 SO模式,比Nginx靈活
² 目前國內的使用率比較低,安全性沒有 Apache和Nginx好。
² 經過插件(mod_secdownload)可實現文件 URL地址加密(優勢)
² 社區不活躍,市場份額較低,
NGINX 使用的是epoll 和Kqueue 異步網絡I/O模型,而apache使用的是傳統的select模型
比喻:
第一個比喻:
假設你在大學讀書,住的宿舍樓有不少房間,你的朋友要來找你。select版宿管大媽就會帶着你的朋友到各房間挨個去找,直到找到你爲止。而epoll版宿管大媽會先記下每位入住同窗的房間號,你的朋友來找你時,只需告訴你的朋友你住在哪一個房間便可,不用親自帶着你的朋友滿宿舍樓找人了。若是同時來了100我的,都要找本身住這棟樓的同窗,select版和epoll版宿管大媽,誰的效率更高,就很明顯了。
第二個比喻:
select的調用複雜度是線性的,即O(n)。舉個例子,一個保姆照看照看一羣孩子,若是把孩子是否須要尿尿比做網絡I/O事件,select的做用就比如這個保姆挨個詢問每一個孩子"你要尿尿嗎?」若是孩子回答是,保姆則把孩子領出來放到另一個地方。當全部孩子詢問完以後,保姆領着這些要尿尿的孩子去上廁所(處理網絡I/O事件).在epoll機制下,保姆再也不須要挨個詢問每一個孩子是否須要尿尿。取而代之的是,若是孩子須要尿尿,他就本身主動站到事先約定好的地方,而保姆的職責就是查看事先約定好的地方是否有孩子。若是有小孩,則領着孩子去上廁所(網絡事件處理)。所以,epoll的這種機制,可以高效地處理成千上萬的併發鏈接,而且性能不會隨着鏈接數増加而降低太多。
指標 |
select |
epoll |
性能 |
隨着鏈接數的增長性能急劇降低。處理成千上萬的併發鏈接數,性能不好 |
隨着鏈接數的增長,性能基本上沒有降低。處理成千上萬鏈接時性能很好 |
鏈接數 |
鏈接數有限制,處理的最大鏈接數不超過1024,若是要處理的鏈接數超過1024個,則須要修改FD_SETSIZE宏,並從新編譯 |
鏈接數無限制 |
內在處理機制 |
線性輪詢 |
回調callback |
開發複雜性 |
低 |
中 |
[root@web01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@web01 ~]# uname -r 2.6.32-696.el6.x86_64
yum install -y pcre-devel openssl-devel
pcre:兼容perl語言正則表達式,perl compatible regular expressions
rewirte模塊 參數信息(perl方式定義正則表達式)
openssl:ssh---openssh/openssl---https
總結:全部安裝依賴軟件,後面都要加上-devel
wget http://nginx.org/download/nginx-1.10.2.tar.gz
說明:軟件很小,用心查看一下
解壓軟件
tar xf nginx-1.10.2.tar.gz
useradd -M -s /sbin/nologin www
軟件編譯安裝步驟
a>軟件解壓配置(將軟件程序安裝到哪一個目錄中 開啓nginx軟件的哪些功能)
b>軟件編譯過程
c>軟件編譯安裝過程
注意順序,順序不對軟件安裝會出錯
1、配置軟件,在軟件的解壓目錄中
[root@web01 nginx-1.10.2]# ./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
編譯參數說明:
--prefix 表示指定軟件安裝到哪一個目錄中,指定目錄不存在會自動建立
--user/--group nginx工做進程由哪一個用戶運行管理
--with-http_stub_status_module 啓動nginx狀態模塊功能(用戶訪問nginx的網絡信息)
--with-http_ssl_module 啓動https功能模塊
經過軟件編譯過程當中的返回值是否正確,確認配置是否正確
[root@web01 nginx-1.10.2]# echo $? 0
2、編譯軟件
[root@web01 nginx-1.10.2]# make
3、編譯安裝
[root@web01 nginx-1.10.2]# make install
[root@web01 application]# ln -s /application/nginx-1.10.2/ /application/nginx
[root@web01 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf
[root@web01 application]# /application/nginx/sbin/nginx [root@web01 application]#
檢查是否啓動
[root@web01 application]# ps -ef |grep nginx root 26548 1 0 20:13 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx www 26549 26548 0 20:13 ? 00:00:00 nginx: worker process root 26551 23431 3 20:13 pts/0 00:00:00 grep --color=auto nginx
檢查端口信息
[root@web01 application]# netstat -lntup |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26548/nginx
服務部署完成
至此軟件安裝完畢!
nginx命令簡化方法
echo 'export PATH=/application/nginx/sbin:$PATH'>>/etc/profile source /etc/profile which nginx
[root@web01 nginx]# ll total 36 drwxr-xr-x 2 root root 4096 Oct 21 19:34 conf #配置文件保存目錄 drwxr-xr-x 2 root root 4096 Oct 21 19:34 html #站點目錄 drwxr-xr-x 2 root root 4096 Oct 21 20:26 logs #nginx 服務相關日誌文件保存目錄(錯誤日誌訪問日誌) drwxr-xr-x 2 root root 4096 Oct 21 19:34 sbin # 服務命令目錄(只有一個nginx文件)
這樣的配置文件是經過精簡化配置文件獲得!
[root@web01 conf]# cat nginx.conf worker_processes 1; ← worker 進程數量 events { ←事件區塊 worker_connections 1024; ←每一個worker進程能夠處理的鏈接數 } ←事件區塊結束 http { ← HTTP 區塊 include mime.types; ←支持的媒體文件 default_type application/octet-stream;←默認的媒體類型 sendfile on; ←高效傳輸模式 keepalive_timeout 65; ←超時時間 server { ← server 區塊 listen 80; ←端口 server_name localhost; ←域名 location / { ←第一個location區塊 root html; ←站點目錄 index index.html index.htm; ←首頁文件 } ←第一個location區塊結束 error_page 500 502 503 504 /50x.html; ← 錯誤信息配置 location = /50x.html { 文件位置 root html; 在哪找:路徑 } } ← server 區塊結束 } ← HTTP 區塊結束
軟件依賴包未正確安裝問題---PCRE依賴包沒有安裝
./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.
解決方法:yum install pcre pcre-devel -y
軟件依賴包未正確安裝問題---OPENSSL依賴包沒有安裝
./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using --with-openssl=<path> option.
解決方法:yum install openssl openssl-devel -y
nginx軟件重複啓動產生的錯誤信息
[root@web01 nginx-1.10.2]# /application/nginx/sbin/nginx nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind()
解決方法:
nginx軟件已經啓動無需反覆啓動,若是須要從新啓動須要中止nginx進程或者用reload方式進行重啓
解答這是由於沒有對應的Nginx服務用戶,執行useradd nginx-s/sbin/no丨ogin-M建立 Nginx
用戶便可。爲了讓讀者理解問題,重現上述錯誤過程,命令以下:
[root@web01 tools]# pkill nginx [root@web01 tools]# userdel nginx [root@web01 tools]# /application/nginx/sbin/nginx nginx: [emerg] getpwnam(Mnginx") failed [root@web01 tools]# useradd nginx -s /sbin/nologin -M [root@web01 tools]# /application/nginx/sbin/nginx
報錯信息以下:
[root@gjlin2 pcre-8.30]# make && make install make all-am make[l] : Entering directory 7home/gjlin/tools/pcre-8.30' CXX pcrecpp.lo libtool : compile : unrecognized option '-DHAVE_CONFIG_H' libtool : compile : Try 'libtool --help* for more information. make[l】:*** [pcrecpp.lo】錯誤 1 make[l] : Leaving directory Vhome/gjlin/tools/pcre-8.30' make : *** [all]錯誤
解答:執行「yum -y install gcc-c++」命令安裝gcc-c++依賴包。
說明:編譯安裝步驟不對(配置 編譯 編譯安裝生成/appliation)
a 在客戶端上ping服務器端IP,檢查鏈路是否通暢
b 在客戶端上telnet服務器端IP、端口,檢查鏈路訪問是否通暢
c 在客戶端上wget檢測模擬頁面訪問是否正常
01. 服務阻止客戶端訪問
02. 服務端站點目錄中,沒有指定首頁文件信息
[root@web01 application]# /application/nginx/sbin/nginx
[root@web01 application]# /application/nginx/sbin/nginx -s stop
[root@web01 application]# /application/nginx/sbin/nginx -s reload
[root@web01 application]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[root@web01 application]# /application/nginx/sbin/nginx -V nginx version: nginx/1.10.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
①. nginx軟件語法檢查方法:
nginx -t
②. nginx軟件訪問測試過程:
curl -v www.baidu.com
③. nginx軟件編譯參數查看:
nginx -V <--- 查看原有的編譯參數信息
編寫配置文件
[root@web02 www]# cat ../../conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.zinx.top; location / { root html/www; index clsn.html index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
編寫靜態訪問頁面文件信息
[root@web1 www]# cat clsn.html <html> <meta charset="utf-8"> <head> <title>TEST</title> </head> <body> 慘綠少年 <table border=1> <tr> <td>01</td> <td> </td> </tr> <tr> <td>02</td> <td> </td> </tr> <tr> <td>03</td> <td> </td> </tr> </table> <a href="http://blog.znix.top"> <img src="znix.png" /> </a> </body> </html>
1、參看已安裝服務的配置參數信息
[root@web01 sbin]# /application/nginx/sbin/nginx -V nginx version: nginx/1.10.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
-V 參數能顯示軟件的詳細詳細,安裝配置參數
2、按照配置參數進行部署
[root@web01 nginx]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
經過配置 autoindex on; 參數
使用 autoindex參數,nginx能識別的直接顯示,不識別的直接下載
配置完 autoindex on; 參數之後 會顯示站點下的文件信息
對於nginx能夠解析的資源會解析相應的內容
對於nginx不能夠解析的資源會直接下載
[root@web02 ~]# echo 'web01 www' > /application/nginx/html/www/index.html
<- 在虛擬主機指定的站點目錄中建立首頁文件
[root@web02 ~]# curl www.nmtui.com <- 利用curl命令本地檢測nginx配置是否成功;已經存在首頁文件,測試成功
1)修改配置文件
[root@web01 www]# cat ../../conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 10.0.0.8:80; server_name www.nmtui.com; location / { root html/www; autoindex on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
2)重啓服務
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 conf]# /application/nginx/sbin/nginx -s reload
3)訪問測試
虛擬主機使用的是特殊的軟硬件技術,它把一臺運行在因特網上的服務器主機分紅一臺臺「虛擬」的主機,每臺虛擬主機均可以是一個獨立的網站,能夠具備獨立的域名,具備完整的Intemet服務器功能(WWW、FTP、Email等),同一臺主機上的虛擬主機之間是徹底獨立的。從網站訪問者來看,每一臺虛擬主機和一臺獨立的主機徹底同樣。
利用虛擬主機,不用爲每一個要運行的網站提供一臺單獨的Nginx服務器或單獨運行一組Nginx進程。虛擬主機提供了在同一臺服務器、同一組Nginx進程上運行多個網站的功能。
所謂虛擬主機,在Web服務裏就是一個獨立的網站站點,這個站點對應獨立的域名(也多是ip或端口.具備獨立的程序及資源目錄,能夠獨立地對外提供服務供用戶訪問。
這個獨立的站點在配置裏是由必定格式的標籤段標記的,對於Apache軟件來講,一個虛擬主機的標籤段一般被包含在以的此<VirtualHost></VirtualHost>,而Nginx軟件則使用一個server{}標籤來標示一個虛擬主機。一個Web服務裏能夠有多個虛擬主機標籤對,便可以同時支持多個虛擬主機站點。
常見的虛擬主機類型有以下幾種
1)基於域名的虛擬主機
所謂基於域名的虛擬主機,意思就是經過不一樣的域名區分不一樣的虛擬主機,基於域名的虛擬主機是企業應用最廣的虛擬主機類型,幾乎全部對外提供服務的網站使用的都是基於域名的虛擬主機,例如: www.znix.top。
2)基於端口的虛擬主機
同理,所謂基於端口的虛擬主機,意思就是經過不一樣的端口來區分不一樣的虛擬主機,此類虛擬主機對應的企業應用主要爲公司內部網站,例如:一些不但願直接對外提供用戶訪問的網站後臺等,訪問基於端口的虛擬主機,地址裏要帶有端口,例如:http://blog.znix.top:80
3)基於IP的虛擬主機
所謂基於IP的虛擬主機,意思是經過不一樣的IP區分不一樣的虛擬主機,
1)增長一個完整的server標籤段到結尾處。注意,要放在http的結束大括號前,也就是將server標籤段放入http標籤。
2)更改server_name及對應網頁的root根目錄,若是須要其餘參數,能夠增長或修改。
3)建立Seever_name域名對應網頁的根目錄,而且創建測試文件,若是沒有index首頁,訪問會出現403錯誤。
若是是apache軟件,沒有首頁文件,默認會把站點目錄下面的信息顯示出來
nginx出403錯誤解決方式:http://clsn.blog.51cto.com/2561410/1633952
autoindex on;#<==當找不到首頁文件時,會展現目錄結構,這個功能通常不要用除非有需求。
PS:顯示的目錄結構中,有些信息點擊就是下載,有的點擊就是顯示,由於擴展名稱不同
根本在於nginx軟件是否可以進行解析
nginx是否解析:
1.htmljpg認識顯示出內容
2.不認識不解析便直接下載
4)檢査Nginx配置文件語法,平滑重啓Nginx服務,快速檢査啓動結果。
5)在客戶端對server_name處配置的域名作host解析或DNS配置,並檢査(ping域名看返回的IP是否正確)。
6)在Win32瀏覽器中輸入地址訪問,或者在Linux客戶端作hosts解析,用wget或curl接地址訪問。
7)在服務重啓或關閉以前先進行一次配置文件檢查 /application/ngnix/sbin/nginx -t
Nginx虛擬主機的官方幫助網址爲:http://Nginx.org/en/docs/http/requestj3rocessing.html
修改配置文件
[root@web01 ~]# cat /application/nginx/conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.nmtui.com; location / { root html/www; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name bbs.nmtui.com; location / { root html/bbs; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name blog.nmtui.com; location / { root html/blog; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
檢查配置信息是否正確
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
重啓服務
[root@web01 conf]# /application/nginx/sbin/nginx -s reload
注意:服務沒有啓動的時候不能使用平滑重啓
建立站點目錄
[root@web01 conf]# for name in www blog bbs ;do mkdir ../html/$name -p ;done
建立主頁文件
[root@web01 conf]# for name in www blog bbs ;do echo "web01 $name" >../html/$name/index.html ;done
檢查主頁內容信息
[root@web01 conf]# for name in www blog bbs ;do cat ../html/$name/index.html ;done web01 www web01 blog web01 bbs
修改主機hosts文件
[root@web01 ~]# vim /etc/hosts 172.16.1.8 web01 www.nmtui.com blog.nmtui.com bbs.nmtui.com
測試
[root@web01 ~]# curl www.nmtui.com web01 www [root@web01 ~]# curl blog.nmtui.com web01 blog [root@web01 ~]# curl bbs.nmtui.com web01 bbs
修改配置文件內容
[root@web01 conf]# vim nginx.conf server { listen 81; server_name bbs.nmtui.com; location / { root html/bbs; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; "nginx.conf" 46L, 1098C written
重啓服務
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 conf]# /application/nginx/sbin/nginx -s reload
檢查端口信息
[root@web01 conf]# netstat -lntup |grep ng tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 40110/nginx tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 40110/nginx
測試訪問
[root@web01 ~]# curl bbs.nmtui.com:81 web01 bbs
注意:
採用基於IP的虛擬主機,配置文件修改後要重啓(-s stop)
配置和IP地址配置相關的都要採用(-s stop)重啓,不可以使用軟重啓的方式
修改配置文件
[root@web01 conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 10.0.0.8:80; server_name www.nmtui.com; location / { root html/www; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
檢查配置文件格式
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
重啓服務,注意使用的是直接重啓的方式
只要nginx配置文件中涉及到IP地址的更改只能正真的重啓才生效
[root@web01 conf]# /application/nginx/sbin/nginx -s stop [root@web01 conf]# /application/nginx/sbin/nginx [root@web01 conf]# netstat -lntup |grep ng tcp 0 0 10.0.0.8:80 0.0.0.0:* LISTEN 40592/nginx
訪問測試
[root@web01 conf]# pwd /application/nginx/conf [root@web01 conf]# mkdir extra
[root@web01 conf]# sed -n '10,21p' nginx.conf > extra/www.conf [root@web01 conf]# sed -n '22,33p' nginx.conf > extra/bbs.conf [root@web01 conf]# sed -n '34,45p' nginx.conf > extra/blog.conf
[root@web01 conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include extra/*; }
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[root@web01 conf]# netstat -lntup |grep ng tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 40714/nginx
[root@web01 logs]# /application/nginx/sbin/nginx -T
參數說明:
-T : test configuration, dump it and exit
測試配置文件,而且加載一遍,並顯示加載的順序
[root@web01 conf]# vim nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include extra/www.conf; include extra/bbs.conf; include extra/blog.conf; }
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 conf]# /application/nginx/sbin/nginx -s reload
這樣的配置可以讓用戶經過IP訪問的時候,訪問到的網站是www的網站。
在配置文件中添加別名
[root@web01 conf]# vim extra/www.conf server { listen 80; server_name www.nmtui.com nmtui.cn; location / { root html/www; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
重啓服務
[root@web01 conf]# /application/nginx/sbin/nginx -s reload
修改hosts 進行訪問測試
[root@web01 www]# curl nmtui.cn web01 www
修改配置文件,添加三status模塊
[root@web01 conf]# vim nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server{ listen 80; server_name status.nmtui.com; location / { stub_status on; access_log off; } } include extra/www.conf; include extra/bbs.conf; include extra/blog.conf; }
檢查配置文件是否正確
[root@web01 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
重啓服務
[root@web01 conf]# /application/nginx/sbin/nginx -s reload
訪問測試
說明:
以上頁面內容信息主要會被zabbix監控服務調取,造成圖像信息
根據圖形信息,從而判斷nginx網站服務用戶訪問量狀況
參數 |
參數說明 |
Active connections |
當前的活動客戶端鏈接數量 |
accepts |
接受客戶端鏈接的總數 |
handled |
處理的鏈接總數 |
requests |
客戶端請求的總數 |
Reading |
nginx正在讀請求頭的當前鏈接數。 |
Writing |
nginx正在將響應寫回客戶端的當前鏈接數。 |
Waiting |
當前空閒客戶端鏈接數等待一個請求。 |
nginx的兩種日誌種類
錯誤日誌:記錄nginx運行錯誤狀況信息
訪問日誌:記錄用戶訪問日誌信息
官方說明: http://nginx.org/en/docs/ngx_core_module.html#error_log
系統默認配置
#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
配置錯誤日誌,修改主配置文件
[root@web01 logs]# vim ../conf/nginx.conf worker_processes 1; error_log logs/error.log error; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server{ listen 80; server_name status.nmtui.com; location / { stub_status on; access_log off; } } include extra/www.conf; include extra/bbs.conf; include extra/blog.conf; }
重啓服務
[root@web01 logs]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 logs]# /application/nginx/sbin/nginx -s reload
查看錯誤日誌信息
[root@web01 logs]# tail error.log 2017/10/25 11:41:55 [error] 40842#0: *7 open() "/application/nginx-1.10.2/html/www/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: www.nmtui.com, request: "GET /favicon.ico HTTP/1.1", host: "www.nmtui.com", referrer: "http://www.nmtui.com/"
系統默認配置
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main;
修改訪問日誌配置--修改主配置文件
[root@web01 www]# cat ../../conf/nginx.conf worker_processes 1; error_log logs/error.log error; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server{ listen 80; server_name status.nmtui.com; location / { stub_status on; access_log off; } } include extra/www.conf; include extra/bbs.conf; include extra/blog.conf; }
修改訪問日誌配置--修改虛擬主機配置文件
[root@web01 www]# cat /application/nginx/conf/extra/www.conf server { listen 80; server_name www.nmtui.com nmtui.cn; location / { root html/www; index index.html index.htm; } access_log logs/access_www.log main; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
日誌內容
10.0.0.1 - - [22/Oct/2017:16:04:54 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"
配置文件
'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
日誌信息說明
參數 |
日誌內容 |
含義 |
$remote_addr |
10.0.0.1 |
客戶端ip地址 |
- |
- |
|
$remote_user |
- |
顯示遠程訪問者用戶信息 |
[$time_local] |
[22/Oct/2017:16:04:54 +0800] |
顯示訪問時間 |
$request |
GET / HTTP/1.1" |
請求行信息 |
$status |
304 |
狀態碼 |
$body_bytes_sent |
0 |
響應報文主體內容大小 |
$http_referer |
- |
|
$http_user_agent |
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 |
客戶端瀏覽網頁工具信息 |
$http_x_forwarded_for |
- |
反向代理轉發 |
詳細日誌詳細說明
Nginx日誌變量 |
說明 |
$remote_addr |
記錄訪問網站的客戶端地址;即源IP地址 |
$http_x_forwarded_for |
當前端有代理服務器時,設置web節點記錄客戶端地址的配置,此參數生效的 前提是代理服務器上也進行了相關的x_forwarded_for設置 能夠記錄用戶真實的IP地址信息 |
$remote_user |
遠程客戶端用戶名稱 |
$time_local |
記錄訪問時間與時區 |
$request |
用戶的http請求起始行信息 |
$status |
http狀態碼,記錄請求返回的狀態,例如:200 , 404 , 301等 |
$body_bytes_sents |
服務器發送給客戶端的響應body字節數 |
$http_referer |
記錄這次請求是從哪一個連接訪問過來的,能夠根據referer進行防盜鏈設置 即表示是哪一個網站介紹過來的 |
$http_user_agent |
記錄客戶端訪問信息,例如:瀏覽器、手機客戶端等 |
在沒有特殊要求的狀況下,採用默認的配置便可,更多能夠設置的記錄日誌信息的變量見:http://nginx.org/en/docs/http/ngx_httpJog_module.html1
切割日誌方式
01:利用腳本實現日誌切割
簡單腳本
[root@web01 logs]# cat /server/scripts/log_cut.sh #!/bin/bash mv /application/nginx/logs/access_www.log /application/nginx/logs/access_www_`date +%F`.log /application/nginx/sbin/nginx -s reload
包含判斷的腳本
[root@web01 logs]# cat /server/script/cut_nginx_log.sh # ! /bin/sh Dateformat='date +%Y%m%d' Basedir= "/application/nginx" Nginxlogdir="$Basedir/logs" Logname="access_www" [-d $Nginxlogdir ] && cd $Nginxlogdir || exit 1 [-f ${Logname}.log ] || exit 1 /bin/mv ${Logname}.log ${Dateformat}_${Logname}.log $Basedir/sbin/nginx -s reload
02.利用系統自帶切割軟件進行切割
cat /etc/logrotate.conf
1、搭建好一臺nginx的web服務器,配置好內網網卡地址與外網網卡地址
2、web服務器的網站域名爲www.nmtui.com 站點目錄爲 html/www
3、要求內網能夠訪問 www.nmtui.com/AV 資源
4、要求外網不能夠訪問 www.nmtui.com/AV 資源
1、定位須要控制的資源
location == if
修改配置文件
[root@web01 extra]# cat www.conf server { listen 80; server_name www.nmtui.com; location / { root html/www; index index.html index.htm; } location /AV { root html/www; index index.html index.htm; allow 172.16.1.0/24; deny all; } }
location 指令的做用是根據用戶請求的URI來執行不一樣的應用。
locationn使用的語法爲
location [=|~|~*|^~] uri {
....
}
location 語法說明表
location |
[=|~|~*|^~] |
uri |
{....} |
指令 |
匹配標識 |
匹配的網站地址 |
匹配URI後要執行的配置段 |
~ 與~* 的區別
u ~ 匹配內容區分大小寫
u ~* 匹配內容不區分的小寫
u !~ 取反
u ^~ 但多個匹配同時存在,優先匹配 ^~匹配的內容;不作正則表達式的檢查 (優先處理)
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
說明:
"/"請求將匹配配置A,
"/index.html"請求將匹配配置B,
"/documents/document.html"請求將匹配配置C,
"/images/1.gif"請求將匹配配置D,
"/documents/1.jpg"請求將匹配配置E.
不一樣uri及特殊字符組合匹配的順序說明
順序 |
不用URI及特殊字符組合匹配 |
匹配說明 |
1 |
location = / {} |
精確匹配 / |
2 |
location ^~ /image/{ |
匹配常規字符串,不作正則表達式匹配檢查 |
3 |
location ~* \.(gif|jpg|jpeg)$ { |
正則匹配 |
4 |
location /documents/ { |
匹配常規字符串,若是有正則,則優先匹配正則 |
5 |
location / { |
全部location 都不能匹配後的默認匹配 |
定義不一樣的location返回不一樣的數值
[root@web01 extra]# vim www.conf server { listen 80; server_name www.nmtui.com nmtui.com; root html/www; location / { return 401; } location = / { return 402; } location /documents/ { return 403; } location ^~ /images/ { return 404; } location ~* \.(gif|jpg|jpeg)$ { return 500; } access_log logs/access_www.log main; }
根據請求不一樣uri的返回值驗證 location的配置。
[root@nfs01 ~]# curl -I -w "%{http_code}\n" -o /dev/null -s www.nmtui.com/documents 401 [root@nfs01 ~]# curl -I -w "%{http_code}\n" -o /dev/null -s www.nmtui.com 402 [root@nfs01 ~]# curl -I -w "%{http_code}\n" -o /dev/null -s www.nmtui.com/documents/ss.jpg 500 [root@nfs01 ~]# curl -I -w "%{http_code}\n" -o /dev/null -s www.nmtui.com/documents 401 [root@nfs01 ~]# curl -I -w "%{http_code}\n" -o /dev/null -s www.nmtui.com/documents/ 403 [root@nfs01 ~]# curl -I -w "%{http_code}\n" -o /dev/null -s www.nmtui.com/images/1.jpg 404
將地址信息進行重寫
rewrite 語法格式
rewrite regex replacement [flag]
rewrite應用標籤:server、location、if
1. 實現網站地址信息跳轉
2. 實現僞靜態
[root@web01 extra]# cat www.conf server { listen 80; server_name www.nmtui.com nmtui.cn; if ($host ~* "^nmtui.com$") { rewrite ^/(.*) http://www.nmtui.com/$1 permanent; } location / { root html/www; index index.html index.htm; } access_log logs/access_www.log main; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
測試
[root@web01 www]# curl nmtui.com -L web01 www
server { server_name nmtui.com; rewrite ^/(.*) http://www.nmtui.com/$1 permanent; }
能夠調整用戶瀏覽的URL,使其看起來更規範,合乎開發及產品人員的需求。
爲了讓搜索引擎收錄網站內容,並讓用戶體驗更好,企業會將動態URL地址假裝成靜態地址提供服務。
網站換新域名後,讓舊域名的訪問跳轉到新的域名上,例如:讓京東的360buy換成了jd.com。
根據特殊變量、目錄、客戶端的信息進行URL跳轉等。
說明:開源軟件相似wordpress的,官方都會對僞靜態配置進行說明
vim extra/www.conf location / { root html/www; index index.html index.htm; auth_basic "clsn training"; auth_basic_user_file /application/nginx/conf/htpasswd; }
注: 這裏使用的htpasswd命令默認是沒有的,須要經過yum install httpd-tools -y 安裝
[root@web01 extra]# htpasswd -c /application/nginx/conf/htpasswd clsn New password: Re-type new password: Adding password for user clsn
參數說明:
-c Create a new file.
建立一個新的密碼文
-b Use the password from the command line rather than prompting for it.
採用免交互的方式輸入用戶的密碼信息
參數 |
參數說明 |
-c |
建立一個新文件。 |
-n |
不更新文件; 顯示結果。 |
-m |
強制MD5密碼加密。 |
-d |
強制CRYPT加密密碼(默認)。 |
-p |
不加密密碼(明文)。 |
-s |
強制SHA加密密碼。 |
-b |
使用命令行中的密碼,而不是提示。(免交互) |
-D |
刪除指定的用戶。 |
[root@web01 extra]# chmod 400 /application/nginx/conf/htpasswd [root@web01 extra]# chown -R www.www /application/nginx/conf/htpasswd [root@web01 extra]# cat /application/nginx/conf/htpasswd clsn:e3OfMiJThE0Qg
[root@web01 extra]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 extra]# /application/nginx/sbin/nginx -s reload
# 使用交互式輸入密碼 [root@web01 www]# curl www.nmtui.com -uclsn Enter host password for user 'clsn':123456 web01 www # 使用免交互輸入密碼 [root@web01 www]# curl www.nmtui.com -uclsn:123456 web01 www
401錯誤說明: 須要認證,可是沒有認證