文章目錄
Nginx 一、Nginx 介紹
點擊可鏈接到Nginx官網
Nginx ( x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的.ru站點(俄文:Рамблер)開發的,公開版本1.19.6發布于2020年12月15日。
1.1 Nginx 作用
靜態Web服務器:可以為發出請求的瀏覽器提供靜態文檔的程序。
正向代理
正向代理是一個位于客戶端和目標服務器之間的代理服務器(中間服務器)。為了從目標服務器取得內容,客戶端向代理服務器發送一個請求,并且指定目標服務器,之后代理向目標服務器轉發請求,將獲得的內容返回給客戶端。正向代理的情況下,客戶端必須要進行一些特殊的設置才能使用。
理解:客戶端通過代理服務器去請求遠程的服務器進行數據交流,代理客戶端,用戶有感知。
反向代理:
反向代理是指以代理服務器來接收客戶端的請求,然后將請求轉發給內部網絡上的服務器,將從服務器上得到的結果返回給客戶端,此時代理服務器對外表現為一個反向代理服務器。
對于客戶端來說,反向代理就相當于目標服務器,只需要將反向代理當作目標服務器一樣發送請求就可以了,并且客戶端不需要進行任何設置。
理解:用戶無感知代理,通過域名進行無感知的進行服務器請求。反向代理主要代理服務器端。
負載均衡:
負載均衡(Load ,簡稱 LB)是高并發、高可用系統必不可少的關鍵組件,目標是 盡力將網絡流量的負載平均分發到多個服務器上,以提高系統整體的響應速度和可用性。
負載均衡的策略有:
輪詢(默認):每一個請求按時間順序注意分配到不同的后端服務器,如果后福安服務器down掉,并且可以自動剔除。
權重():權重默認為1,權重越高被分配的客戶端的概率越大。指定輪詢幾率,權重大小和訪問比率成正比。用于后端服務器性能不均衡的情況。
upstream server_pool{
server 127.0.0.1 weight=10;
server 127.0.0.2 weight=3;
}
:每個請求按照訪問ip的hash結果進行分配服務器,即每個用戶會固定訪問一個后端服務器。
好處:可以很好的解決同一個用戶訪問同一個應用時不共享問題。實現共享。
upstream server_pool{
ip_hash;

server 127.0.0.1:80;
server 127.0.0.2:80;
}
fair:按照后端服務器響應時間來進行分配請求,響應時間短的優先進行分配。
upstream server_pool{
server 127.0.0.1:80;
server 127.0.0.2:80;
fair
}
:按照訪問url的hash結果來分配請求,使每一個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
upstream myserver{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
hash $request_uri;
hash_method crc32;
}
動靜分離:
見名知意,就是將動態頁面和靜態頁面的請求進行分離,將靜態頁面(如html、css、圖片等)可以放在Nginx服務器中進行處理,需要動態頁面(如 jsp頁面、程序等)時請求進行處理。本身是用來處理動態資源的,雖然可以處理靜態資源但效率并不高,會帶來額外的資源消耗。利用Nginx可以讓專注于動態資源處理,靜態資源由靜態資源服務器處理,以此來提升整個系統的性能。
1.2 Nginx 特點 可移植性:Nginx 可以在大多數 Unix like OS編譯運行,而且也有的移植版本。高效:Nginx 專為性能優化而開發, 性能是其最重要的考量,實現上非常注重效率 ,能經受高負載的考驗,有報告表明能支持高 達 50,000 個并發連接數。可靠: 中國大型公司百度、京東、新浪、網易、騰訊、淘寶等都在使用Nginx 。事件驅動:通信機制采用epoll模型,支持更大的并發連接。/結構:一個進程,生成一個或多個進程。內存消耗小:處理大并發的請求內存消耗非常小。在3萬并發連接下,開啟的10個Nginx 進程才消耗150M內存(15M*10=150M)。成本低廉:Nginx為開源軟件,可以免費使用。而購買F5 BIG-IP、等硬件負載均衡交換機則需要十多萬至幾十萬人民幣。接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送后后端web服務器,極大的減輕后端web服務器的壓力。發送響應報文時,是邊接收來自后端web服務器的數據,邊發送給客戶端的。網絡依賴型低。NGINX對網絡的依賴程度非常低,理論上講,只要能夠ping通就可以實施負載均衡nginx反向代理要帶端口號,而且可以有效區分內網和外網流量。支持服務器檢測。NGINX能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,并及時返回錯誤的請求重新提交到其它節點上。穩定性高:用于反向代理,宕機的概率微乎其微。節省帶寬:支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 頭。內置的健康檢查功能:如果 Nginx Proxy 后端的某臺 Web 服務器宕機了,不會影響前端訪問。 二、Nginx 的安裝 2.1 Linux服務器安裝Nginx:
官網下載nginx安裝包(.tar)文件到本地。
上傳nginx安裝包至Linux服務器。
安裝nginx所需要的依賴,pcre包和zlib用以支持重寫,正則以及網頁壓縮等等,是一個開放源代碼的軟件庫包,應用程序可以使用這個包來進行安全通信,避免竊聽,同時確認另一端連接者的身份。
yum install pcre -y
yum install pcre-devel -y

yum install zlib -y
yum install zlib-devel -y
yum install openssl -y
yum install openssl-devel -y
yum源?動安裝Nginx依賴,pcre、、gcc、zlib:
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
解壓安裝Nginx
#解壓
cd /usr/local
tar -zxvf nginx-1.16.0.tar.gz
#進行configure配置,查看是否報錯
cd nginx-1.16.0/
./configure
#編譯
make
#安裝
make install
#在 /usr/local/nginx目錄下,可以看到如下4個目錄:
#conf配置文件,html網頁文件,logs日志文件,sbin主要二進制程序
PS:如果出現這個錯誤:./: error: C cc is not found,則執行這個命令:
yum -y install gcc gcc-c++ autoconf automake make
啟動Nginx
#檢查 nginx.conf 配置文件是否有錯

/usr/local/nginx/sbin/nginx -t
#nginx啟動命令:
/usr/local/nginx/sbin/nginx
#指定配置文件啟動
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#關閉命令:
/usr/local/nginx/sbin/nginx -s stop
#重啟命令:
/usr/local/nginx/sbin/nginx -s reload
2.2 環境安裝Nginx
官網下載安裝包(.zip)并解壓。
啟動nginx:直接雙擊nginx.exe文件nginx反向代理要帶端口號,或目錄文件下打開cmd輸入start nginx 或 nginx.exe。
檢查是否啟動成功: 瀏覽器網址輸入:,看到如下界面則表示啟動成功:
三、Nginx 配置文件介紹 3.1 位置
以 為例 :配置文件在文件安裝目錄中conf文件夾下 \nginx-1.18.0s\conf\nginx.conf。
3.2 組成結構
當用文本編輯器打開后,刪除掉注釋部分內容后如下所示:
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 localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
即整體結構對比如下:
3.3 結構介紹
全局塊:
包括主要會設置一些影響nginx 服務器整體運行的配置指令,主要包括配置運行 Nginx 服務器的用戶(組)、允許生成的 數,進程 PID 存放路徑、日志存放路徑和類型以 及配置文件的引入等。
例如:
#配置worker進程運行用戶(和用戶組),nobody也是一個linux用戶,一般用于啟動程序,沒有密碼
user nobody;
#user www www;
#配置工作進程數目,根據硬件調整,通常等于CPU數量或者2倍于CPU數量
worker_processes 1;
#配置全局錯誤日志及類型,[debug | info | notice | warn | error | crit],默認是error
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#配置進程pid文件
pid logs/nginx.pid;
#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求并不均勻,所以建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
塊:
塊涉及的指令,主要影響 Nginx 服務器與用戶的網絡連接,常用的設置包括是否開啟對多 work 下的網絡連接進行序列化,是否 允許同時接收多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個 word 可以同時支持的最大連接數等。
例如:
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#單個進程最大連接數(最大連接數=連接數*進程數)
worker_connections 65535;