nginx服務介紹及搭建

1 web服務軟件種類介紹

apache:是中小型web服務的主流
nginx:大型網站服務的主流,分支tengine
lighttpd:不溫不火的優秀web軟件,社區不活躍,靜態解析效率很高

2 動態服務的軟件

php:大中小型網址站都會使用,動態網頁php程序的解析容器
tomcat:中小企業動態web服務主流,互聯網java容器主流
resin:大型動態web服務主流,互聯網java容器主流

3 nginx軟件服務特徵介紹

1.支持高併發:能支持幾萬併發連接(特別是靜態小文件業務環境)
2.資源消耗少:在3W併發連接下,開啓10個nginx線程消耗的內存不到200M
3.支持異步網絡I/O事件模型Epoll apache select

select(同步) apache和nginx epoill(異步)
異步的安全性、穩定性沒有同步高,中間容易被人竊取,用戶收不到數據
靜態業務高併發選擇nginx和lighttpd
動態業務理論上nginx和apache

舉例說明:高鐵列車員
假如車站到車了,會提醒乘客
select模型的乘務員:會一個一個的去提醒乘客到車站了,準備下車了
優點: 客戶可以確保知道到那個站了
缺點:速度比較慢,效率低
epoll模型的乘務員:會通過廣播的形式,告訴客戶到站了,準備下車了
優點:通知速度較快,效率較高
缺點:假如客戶睡着了,沒有聽到這個廣播,那麼這個乘客就會坐過站

4 nginx功能介紹

1.作爲web服務軟件(處理用戶訪問靜態請求)
2.反向代理或者負載均衡服務
3.前端業務數據緩存服務

5 編譯安裝nginx

5.1 下載安裝包
http://nginx.org/en/download.html
5.2 安裝依賴
yum install -y pcre-devel openssl-devel
pcre-devel:   perl語言正則表達式兼容軟件包
openssl-devel:使系統支持https方式訪問
5.3 創建用戶
useradd -s /sbin/nologin -M www

此處我設置的nginx的啓動用戶是www,這個用戶可以自己隨意設置

5.4 編譯安裝

①. 編譯配置

./configure --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

--prefix=PATH     				指定軟件安裝在什麼目錄下
--user=USER       				指定軟件worker進程管理用戶,利用www虛擬用戶管理worker進程
--group=USER 					指定用戶組
--with-http_ssl_module          使nginx程序可以支持HTTPsF訪問功能
--with-http_stub_status_module	用於監控用戶訪問nginx服務情況	

如果上述沒有出現報錯,開始下一個模塊
這個位置編輯的時候可以自己添加參數,具體可以使用./configure --help查看更多的參數

②. 編譯安裝

make  && make  install
5.5 爲nginx程序軟件創建鏈接目錄
ln -s /application/nginx-12.2 /application/nginx	
5.6 啓動nginx程序服務

添加環境變量

echo 'PATH=/application/nginx/sbin/:$PATH'   >>/etc/profile
source  /etc/profile    ##使環境變量生效

啓動的兩種方式
方式一:直接執行nginx命令啓動
方式二:編寫啓動腳本進行起停(CentOS7)

cat > /usr/lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/application/nginx/logs/nginx.pid
ExecStartPost=/bin/sleep 0.1
ExecStartPre=/application/nginx/sbin/nginx -t -c /application/nginx/conf/nginx.conf
ExecStart=/application/nginx/sbin/nginx -c /application/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
systemctl  start  nginx		#啓動nginx
systemctl  enable nginx		#設置開機自啓

6 nginx軟件程序目錄結構

conf     			--- nginx程序所有配置文件保存目錄
nginx.conf   		--- nginx程序主配置文件
精簡nginx.conf配置文件內容:
grep -Ev "#|^$" nginx.conf.default >nginx.conf

nginx配置文件組成:
①. main       nginx主區塊
②. event      nginx事件區塊
③. http       nginx http功能區塊
④. server     nginx 網站主機區塊,一個server就是一個虛擬主機
⑤. location   nginx 匹配或者定位區塊

html	 --- nginx程序站點目錄
logs     --- nginx程序日誌文件保存目錄
sbin     --- nginx程序命令所在目錄
nginx命令參數說明:
-V       --- 查看nginx軟件編譯配置參數
-t       --- 檢查nginx配置文件語法格式是否正確
-s       --- 用於管理nginx服務運行狀態
             stop   停止nginx服務
			 reload 平滑重啓nginx服務器

重啓nginx服務

nginx -s stop  停止 
nginx          啓動

7 三個語法格式說明:

①. 大括號要成對出現
②. 每一行指令後面要用分號結尾
③. 每一個指令要放置在指定的區塊中

8 虛擬主機配置文件編寫方法:

①. 基於域名的虛擬主機配置方法(最常用)
②. 基於端口的虛擬主機配置方法
   說明:當你訪問的網站域名在虛擬主機配置中不存在時,默認會將第一個虛擬主機的配置頁面響應給用戶
③. 基於IP地址的虛擬主機配置方法
   說明:nginx服務中只要涉及IP地址的修改,都需要重啓nginx服務,而不能採用平滑重啓

9 nginx服務日誌信息

9.1 錯誤日誌
Syntax:	error_log file [level];
Default:	
error_log logs/error.log error;
Context:	main, http, mail, stream, server, location
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

錯誤日誌的,默認情況下不指定也沒有關係,因爲nginx很少有錯誤日誌記錄的。
但有時出現問題時,是有必要記錄一下錯誤日誌的,方便我們排查問題。
error_log 級別分爲 debug, info, notice, warn, error, crit 默認爲crit
該級別在日誌名後邊定義格式如下:
error_log /your/path/error.log crit;
crit 記錄的日誌最少,而debug記錄的日誌最多。
如果nginx遇到一些問題,比如502比較頻繁出現,但是看默認的error_log並沒有看到有意義的信息,
那麼就可以調一下錯誤日誌的級別,當你調成error級別時,錯誤日誌記錄的內容會更加豐富

9.2 訪問日誌
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 調用定義格式信息,生成訪問日誌
$remote_addr 1 訪問客戶端的源地址信息
$remote_user 訪問客戶端認證用戶信息
[$time_local] 顯示訪問時間
$request 請求行信息
$status 狀態碼信息
$body_bytes_sent 服務端響應客戶端的數據大小信息
$http_referer 記錄鏈接到網站的域名信息
$http_user_agent 用戶訪問網站客戶端軟件標識信息
$http_x_forwarded_for 反向代理

10 nginx配置文件location匹配優先級

1)等號類型(=)的優先級最高。一旦匹配成功,則不再查找其他匹配項,停止搜索。
2)^~類型表達式,不屬於正則表達式。一旦匹配成功,則不再查找其他匹配項,停止搜索。
3)正則表達式類型( ~*)的優先級次之。如果有多個location的正則能匹配的話,則使用正則表達式最長的那個。
4)/str/ 常規字符串匹配類型。按前綴匹配。
5)/ 通用匹配,如果沒有匹配到,就匹配通用的

11 如何利用nginx進行訪問控制

deny allow
ngx_http_access_module    --- 實現訪問控制模塊
官方鏈接:https://nginx.org/en/docs/http/ngx_http_access_module.html

12 利用location區塊進行定位

Syntax:	location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:	—
Context:	server, location
官方鏈接:https://nginx.org/en/docs/http/ngx_http_core_module.html#location
= 精確匹配網站uri資源信息
~ 區分大小寫匹配網站uri資源信息
~* 不區分大小寫匹配
^~ 優先匹配
/av/ 指定匹配網站資源
/ 默認匹配
對匹配的內容取反
12.1 匹配優先級
= 優先級最高
^~ 優先匹配
~* 不區分大小寫
// 根據目錄匹配
/ 默認匹配

13 負載均衡

13.1 負載均衡調度算法

調度算法自帶的一共四種,還有一些第三方的調度算法,此處不做介紹

調度算法 含義
輪詢 每個請求按照時間順序逐一分配到不同的主機
權重調度算法 權重值越大分配的越多
ip_hash 每個請求按照訪問的ip哈希結果分配
定義最小連接數 連接數最少的優先匹配
13.2 負載均衡調度狀態
狀態 含義
down 表示不參與負載均衡
backup 預留的機器,所有非backup都掛掉或者繁忙的時候,纔會用到
max_fails 允許請求失敗的次數,默認爲1,當超過次數,就會返回錯誤信息
fail_timeout 請求失敗超時時間,在經歷max_files的次數後,暫停服務的時間

NGINX與PHP進行協同工作原理

當我們訪問網站的時候
www.test.com/index.php-------nginx-----加載nginx的fast-cgi模塊-----請求到達php-fpm-----接收到請求啓動worker進程處理請求----處理完成返回給nginx—nginx返回給瀏覽器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章