1. 程式人生 > >nginx介紹安裝

nginx介紹安裝

Nginx簡介

Apache

Apache仍然是時長佔用量最高的web伺服器,據最新資料統計,市場佔有率目前是50%左右。主要優勢在於一個是比較早出現的一個Http靜態資源伺服器,同時又是開源的。所以在技術上的支援以及市面上的各種解決方案都比較成熟。Apache支援的模組非常豐富。

Nginx

Nginx是俄羅斯人編寫的一款高效能的HTTP和反向代理伺服器,在高連線併發的情況下,它能夠支援高達50000個併發連線數的響應,但是記憶體、CPU等系統資源消耗卻很低,執行很穩定。目前Nginx在國內很多大型企業都有應用,據最新統計,Nginx的市場佔有率已經到33%左右了。而Apache的市場佔有率雖然仍然是最高的,但是是呈下降趨勢。而Nginx的勢頭很明顯。選擇Nginx的理由也很簡單:第一,它可以支援5W高併發連線;第二,記憶體消耗少;第三,成本低,如果採用F5、NetScaler等硬體負載均衡裝置的話,需要大幾十萬。而Nginx是開源的,可以免費使用並且能用於商業用途

架構中的作用

介紹nginx在系統架構(閘道器入口)中的作用,總結如下:
1、路由功能(與微服務對應):域名/路徑,進行路由選擇後臺伺服器
2、負載功能(與高併發高可用對應):對後臺伺服器叢集進行負載
3、靜態伺服器(比tomcat效能高很多):在mvvm模式中,充當檔案讀取職責
總結:實際使用中,這三項功用,會混合使用。比如先分離動靜,再路由服務,再負載機器

正向代理與反向代理

1、代理:客戶端自己請求出現困難。客戶請了一個代理,來代自己做事,就叫代理。
比如代理律師,代購,政府機關辦事的代理人等等。
2、反向代理,服務端推出的一個代理招牌。

nginx安裝

原始碼編譯方式安裝

安裝make:yum -y install autoconf automake make
安裝g++: yum -y install gcc gcc-c++
#一般系統中已經裝了了make和g++,無須再裝

yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum install -y openssl openssl-devel
#安裝nginx依賴的庫

wget http://nginx.org/download/nginx-1.9.15.tar.gz
tar -zxvf nginx-1.9.15.tar.gz
cd nginx-1.9.15
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#配置
#–prefix指定安裝目錄
#–with-http_ssl_module安裝https模組
#creating objs/Makefile 代表編譯成功
make && make install
#make編譯
#make install安裝

yum方式安裝

centos6:yum install epel-release -y #yum擴充套件源
yum install nginx -y

目錄結構:
• Conf 配置檔案
• Html 網頁檔案
• Logs 日誌檔案
• Sbin 二進位制程式

啟停命令:
./nginx -c nginx.conf的檔案。如果不指定,預設為NGINX_HOME/conf/nginx.conf
./nginx -s stop 停止
./nginx -s quit退出
./nginx -s reload 重新載入nginx.conf

傳送訊號的方式:
kill -QUIT 程序號 安全停止
kil -TERM 程序號 立即停止

nginx模型概念

Nginx會按需同時執行多個程序,一個主程序(master)和幾個工作程序(worker),配置了快取時還會有快取載入器程序(cache loader)和快取管理器程序(cache manager)等。
所有程序均是僅含有一個執行緒,並主要通過“共享記憶體”的機制實現程序間通訊。
主程序以root使用者身份執行,而worker、cache loader和cache manager均應以非特權使用者身份(user配置項)執行。

主程序主要完成如下工作:

  1. 讀取並驗正配置資訊;
  2. 建立、繫結及關閉套接字;
  3. 啟動、終止及維護worker程序的個數;
  4. 無須中止服務而重新配置工作特性;
  5. 重新開啟日誌檔案;

worker程序主要完成的任務包括:

  1. 接收、傳入並處理來自客戶端的連線;
  2. 提供反向代理及過濾功能;
  3. nginx任何能完成的其它任務;

nginx.conf配置檔案結構

#user nobody; #主模組命令, 指定Nginx的worker程序執行使用者以及使用者組,預設由nobody賬號執行。
worker_processes 1;#指定Nginx要開啟的程序數。
worker_rlimit_nofile 100000; #worker程序的最大開啟檔案數限制
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}

以上這塊配置程式碼是對nginx全域性屬性的配置。

 user :主模組命令, 指定Nginx的worker程序執行使用者以及使用者組,預設由nobody賬號執行。       
 
 worker_processes: 指定Nginx要開啟的程序數。
 
 error log:用來定義全域性錯設日誌檔案的路徑和日誌名稱。日誌輸出級別有
 
 debug,info,notice,warn,error,crit 可供選擇,其中debug輸出日誌最為詳細,面crit(嚴重)輸出日誌最少。預設是error。
 
 pid: 用來指定程序id的儲存檔案位置。
 
 event:設定nginx的工作模式及連線數上限,其中引數use用來指定nginx的工作模式(這裡是epoll,epoll是多路複用IO(I/O Multiplexing)中的一種方
 式),nginx支援的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中
 select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,對於linux系統,epoll是首選。
 
 worker_connection:設定nginx每個程序最大的連線數,預設是1024,所以
 nginx最大的連線數max_client=worker_processes * worker_connections。程序最大連線數受到系統最大開啟檔案數的限制,需要設定ulimit。

下面部分是nginx對http伺服器相關屬性的設定
http {
include mime.types; 主模組命令,對配置檔案所包含檔案的設定,減少主配置檔案的複雜度,相當於把部分設定放在別的地方,然後在包含進來,保持主配置檔案的簡潔。
default_type application/octet-stream; 預設檔案型別,當檔案型別未定義時候就使用這類設定的。

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   指定nginx日誌的格式
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;
sendfile        on;   開啟高效檔案傳輸模式(zero copy 方式),避免核心緩衝區資料和使用者緩衝區資料之間的拷貝。
#tcp_nopush     on;  開啟TCP_NOPUSH套接字(sendfile開啟時有用)

#keepalive_timeout  0;   客戶端連線超時時間
keepalive_timeout  65;

#gzip  on;             設定是否開啟gzip模組

下面是server段虛擬主機的配置
server {
listen 80; 虛擬主機的服務埠
server_name localhost; 用來指定ip或者域名,多個域名用逗號分開
#charset koi8-r;
location / {
#地址匹配設定,支援正則匹配,也支援條件匹配,這裡是預設請求地址,使用者可以location命令對nginx進行動態和靜態網頁過濾處理
root html; 虛擬主機的網頁根目錄
index index.html index.htm; 預設訪問首頁檔案
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

Nginx日誌描述

通過訪問日誌,你可以得到使用者地域來源、跳轉來源、使用終端、某個URL訪問量等相關資訊;通過錯誤日誌,你可以得到系統某個服務或server的效能瓶頸等。因此,將日誌好好利用,你可以得到很多有價值的資訊。
日誌格式
開啟nginx.conf配置檔案:vi /usr/local/nginx/conf/nginx.conf
日誌部分內容:
#access_log logs/access.log main;
日誌生成的到Nginx根目錄logs/access.log檔案,預設使用“main”日誌格式,也可以自定義格式。

預設“main”日誌格式: 引數明細表:
$remote_addr 客戶端的ip地址(代理伺服器,顯示代理服務ip)
$remote_user 用於記錄遠端客戶端的使用者名稱稱(一般為“-”)
$time_local 用於記錄訪問時間和時區
$request 用於記錄請求的url以及請求方法
$status 響應狀態碼,例如:200成功、404頁面找不到等。
$body_bytes_sent 給客戶端傳送的檔案主體內容位元組數
$http_user_agent 使用者所使用的代理(一般為瀏覽器)
$http_x_forwarded_for 可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址
$http_referer 可以記錄使用者是從哪個連結訪問過來的

檢視日誌命令tail -f /usr/local/nginx/logs/access.log

日誌配置和及切割
vim logcut.sh
編寫sh:
#!/bin/bash
#設定日誌檔案存放目錄
LOG_HOME="/usr/local/nginx/logs/"
#備分檔名稱
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)"
#重新命名日誌檔案
mv ${LOG_HOME}/access.log L O G H O M E / a c c e s s . {LOG_HOME}/access. {LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log L O G H O M E / e r r o r . {LOG_HOME}/error. {LOG_PATH_BAK}.log
#向nginx主程序發訊號重新開啟日誌
kill -USR1 `cat ${LOG_HOME}/nginx.pid``

加入許可權:
chmod +x logcut.sh

crontab –e
配置cron:
*/1 * * * * /etc/nginx/logcut.sh

/etc/init.d/rsyslog start #系統日誌,如不開啟,看不到定時任務日誌
/etc/rc.d/init.d/crond start #定時任務開啟