niginx
nginx是一個開源的,支持高性能,高併發的www服務和代理服務軟件。它是一個俄羅斯人lgor sysoev開發的,作者將源代碼開源出來供全球使用。
目前能夠提供 Web 網絡服務的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互聯網信息服務)是 Windows 系統中默認的 Web 服務程序
特點:
支持高併發、資源消耗少、可以做http反向代理和負載均衡、支持異步網絡i/o事件模型epoll
Tengine
Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
安裝
1.下載tengine
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
2.解壓tengine
tar -zxvf tengine-2.3.2.tar.gz
3.進入解壓後的文件夾進行編譯安裝
cd tengine-2.3.2
./configure --prefix=/opt/tbnginx/
make && make install
4.配置nginx的環境變量
#查看PATH值
echo $PATH
#編輯文件
vim /etc/profile
#寫入PATH值,在開頭添加nginx的路徑,以冒號分割
PATH="/opt/tbnginx/sbin:/opt/python367/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#讀取文件,讓配置生效
source /etc/profile
5.啓動nginx
nginx
nginx指令
nginx # 啓動nginx
nginx -s stop # 停止nginx
nginx -s reload #平滑重啓,不停止進程,重新讀取配置文件
nginx -t #檢測nginx.conf語法是否正確
niginx目錄結構
conf #存放nginx的配置文件
html #存放nginx靜態文件的
logs #nginx的運行日誌,錯誤日誌,訪問日誌
sbin #存放可執行命令
虛擬主機
虛擬主機就是將一臺服務器分割成多個“虛擬服務器”,每個站點使用各自的硬盤空間,由於省資源,省錢,衆多網站都使用虛擬主機來部署網站。
在nginx.conf配置文件中使用server{}代碼塊標籤來表示一個虛擬主機。
虛擬主機類型
基於域名的虛擬主機
通過不同的域名區分不同的虛擬主機,是企業應用最廣的虛擬主機。
基於端口的虛擬主機
通過不同的端口來區分不同的虛擬主機,一般用作企業內部網站,不對外直接提供服務的後臺,例如www.pythonav.cn:9000
基於IP的虛擬主機
通過不同的IP區分不同的虛擬主機,此類比較少見,一般業務需要多IP的常見都會在負載均衡中綁定VIP
nginx的訪問日誌功能
打開nginx.conf中的如下配置
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;
access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
404錯誤頁面
打開nginx.conf中的如下配置
error_page 404 /404.html;
Nginx配置文件
CoreModule核心模塊
user www; #Nginx進程所使用的用戶
worker_processes 1; #Nginx運行的work進程數量(建議與CPU數量一致或auto)
error_log /log/nginx/error.log #Nginx錯誤日誌存放路徑
pid /var/run/nginx.pid #Nginx服務運行後產生的pid進程號
events事件模塊
events {
worker_connections #每個worker進程支持的最大連接數
use epool; #事件驅動模型, epoll默認
}
http內核模塊
# 公共的配置定義在http{}
http { //http層開始
...
#使用Server配置網站, 每個Server{}代表一個網站(簡稱虛擬主機)
'server' {
listen 80; #監聽端口, 默認80
server_name localhost; #提供服務的域名或主機名
access_log host.access.log #訪問日誌
#控制網站訪問路徑
'location' / {
root /usr/share/nginx/html; #存放網站代碼路徑
index index.html index.htm; #服務器返回的默認頁面文件
}
#指定錯誤代碼, 統一定義錯誤頁面, 錯誤代碼重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
#第二個虛擬主機配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; #包含/etc/nginx/conf.d/目錄下所有以.conf結尾的文件
} #http層結束
反向代理
反向代理服務器位於用戶與目標服務器之間,但是對於用戶而言,反向代理服務器就相當於目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源。同時,用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定,提高了內部服務器的安全。
配置反向代理
server {
listen 80 default_server;
server_name _;
location / {
#請求轉發參數 proxy_pass
proxy_pass http://192.168.13.117;
}
}
負載均衡
Web服務器,直接面向用戶,往往要承載大量併發請求,單臺服務器難以負荷,我使用多臺WEB服務器組成集羣,前端使用Nginx負載均衡,將請求分散的打到我們的後端服務器集羣中,
實現負載的分發。那麼會大大提升系統的吞吐率、請求性能、高容災
Nginx要實現負載均衡需要用到proxy_pass代理模塊配置,Nginx負載均衡與Nginx代理不同地方在於:Nginx代理僅代理一臺服務器,而Nginx負載均衡則是將客戶端請求代理轉發至一組upstream虛擬服務池,Nginx可以配置代理多臺服務器,當一臺服務器宕機之後,仍能保持系統可用。
配置反向代理
配置upstream:在nginx.conf的 http 區域中添加配置
upstream myupstream {
server 10.0.0.10:8000;
server 10.0.0.11:9000;
#可以添加多個
}
配置location
location / {
#請求轉發參數 proxy_pass
#proxy_pass是基於http協議的請求轉發
proxy_pass http://myupstream;
}
此時初步負載均衡已經完成,upstream默認按照輪訓方式負載,每個請求按時間順序逐一分配到後端節點。
upstream分配策略
1.輪詢:
upstream的默認分配策略就是輪詢
2.weight 權重:
upstream myupstream {
server 10.0.0.10:8000 weight=5;
server 10.0.0.11:9000 weight=10;#這個節點訪問比率是大於8000的
}
3.ip_hash:
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器
upstream myupstream {
ip_hash;
server 10.0.0.10:8000;
server 10.0.0.11:9000;
}
4.backup
在非backup機器繁忙或者宕機時,請求backup機器,因此機器默認壓力最小
upstream myupstream {
server 10.0.0.10:8000 weight=5;
server 10.0.0.11:9000;
server node.oldboy.com:8080 backup;
}