Nginx版本:nginx-1.12.2.tar.gz
內容介紹
一、 nginx 簡介
1、什么是 nginx 和可以做什么事情
Nginx 是高性能的 HTTP 和反向代理的服務器,處理高并發能力是十分強大的, 能經受高負 載的考驗,有報告表明能支持高達 50,000 個并發連接數,實際上能達到2~3萬個并發連接數
2、正向代理
需要在客戶端配置代理服務器進行指定網站訪問(代理的是客戶端)
3、反向代理
暴露的是代理服務器地址,隱藏了真實服務器 IP 地址(代理的是服務器端)
4、負載均衡
增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的 情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負載均衡
5、動靜分離
二、 Nginx 的安裝
1、準備工作
(1)打開虛擬機,使用遠程連接工具連接 linux 操作系統
(2)到 nginx 官網下載軟件: http://nginx.org/
2、開始進行 nginx 安裝,在linux系統的服務器端安裝
(1)安裝 pcre 依賴第一種方式:
第一步 聯網下載 pcre 壓縮文件依賴到自己的電腦中
命令: wget
http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
第二步 連接遠程服務器,把pcre 壓縮文件上傳到服務器中,然后解壓該壓縮文件
命令: tar –xvf pcre-8.37.tar.gz
第三步 進入 pcre-8.37.tar.gz解壓后的目錄,執行 ./configure , 執行完成后,再執行 make && make install 命令,完成pcre的安裝
第四步 查看pcre是否成功安裝的命令: pcre-config --version
(2)安裝 pcre 依賴第二種方式:
第一步 yum -y install pcre (yum命令直接自動下載并且安裝pcre)
第二步 查看pcre是否成功安裝的命令: pcre-config --version
(3)安裝 openssl 、 zlib 、 gcc 依賴
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
(4)安裝 nginx
第一步 聯網下載 nginx 壓縮文件依賴到自己的電腦中
nginx 官網下載軟件: http://nginx.org/
第二步 連接遠程服務器,把 nginx 壓縮文件上傳到服務器中,然后解壓該壓縮文件
執行命令: tar –xvf nginx-1.12.2.tar.gz
第三步 進入 nginx-1.12.2.tar.gz 解壓后的目錄,執行 ./configure 來進行檢查, 執行完成后,再執行 make && make install 命令,完成pcre的安裝
第四步 安裝完Nginx后,需要知道系統中多了哪些文件,它們都安裝到了那里。可以使用下面的命令進行查看: rpm -ql nginx 其中rpm 是linux的rpm包管理工具,-q 代表詢問模式,-l 代表返回列表,這樣我們就可以找到nginx的所有安裝位置了
第五步 安裝完Nginx后,會在usr下多出來一個文件夾local/nginx/nginx/sbin,在sbin里面有一個 nginx 啟動腳本,因此我們先執行命令 cd/usr/local/nginx/sbin 找到nginx這個啟動腳本,然后執行命令 ./nginx 來啟動nginx
第六步 執行命令: ps -ef | grep nginx 查看進程中是否有nginx,有就說明nginx啟動成功
第七步 用瀏覽器訪問nginx,在瀏覽器中輸入:127.0.0.1 查看效果
第八步 如果沒有顯示上圖中的內容,應該是服務端沒有開放80端口,把80端口開放一下就可以了
- 查看開放的端口號
- firewall-cmd --list-all
- 設置開放的端口號
- firewall-cmd --add-service=http –permanent
- firewall-cmd --add-port=80/tcp --permanent
- 重啟防火墻
- firewall-cmd –reload
三、 Nginx 的常用命令和配置文件
Nginx 的常用命令
使用nginx操作命令,必須進入 nginx 目錄中才可以
cd /usr/local/nginx/sbin
1、查看 nginx 版本號
./nginx -v
2、產看 nginx 的狀態
ps -ef | grep nginx
3、啟動 nginx
./nginx
4、停止 nginx
./nginx -s stop
4、從容停止 nginx
./nginx -s quit
4、比較野蠻的,直接殺死nginx進程
./killall nginx
4、停止 nginx
./nginx -s stop
5、重新加載 nginx
./nginx -s reload
Nginx 的配置文件
Nginx 的配置文件的位置
1、查詢Nginx 的配置文件的位置,執行命令: rpm -ql nginx
- 其中rpm 是linux的rpm包管理工具,-q 代表詢問模式,-l 代表返回列表,這樣我們就可以找到nginx的所有安裝位置了
2、配置文件的位置:cd
/usr/local/nginx/conf/nginx.conf
配置文件中的內容包含三部分內容:全局塊 、 events 塊 、 http 塊(包含http塊自身和server塊)
nginx.conf文件的內容如下:
# 第一部分:全局塊:配置服務器整體運行的配置指令
#運行用戶,默認即是nginx,可以不進行設置
user nginx;
#Nginx進程,一般設置為和CPU核數一樣 -=> 處理并發數的配置
worker_processes 1;
#錯誤日志存放目錄
error_log /var/log/nginx/error.log warn;
#進程pid存放位置
pid /var/run/nginx.pid;
# 第二部分:events 塊:影響 Nginx 服務器與用戶的網絡連接
events {
worker_connections 1024; # 單個后臺進程的最大并發數
}
# 第三部分:http 塊:還包含兩部分:http 全局塊和server 塊
http {
include /etc/nginx/mime.types; #文件擴展名與類型映射表
default_type Application/octet-stream; #默認文件類型
#設置日志模式
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 /var/log/nginx/access.log main; #nginx訪問日志存放位置
sendfile on; #開啟高效傳輸模式
#tcp_nopush on; #減少網絡報文段的數量
keepalive_timeout 65; #保持連接的時間,也叫超時時間
#gzip on; #開啟gzip壓縮
include /etc/nginx/conf.d/*.conf; #包含的子配置項位置和文件[server快]
復制代碼
nginx.conf文件的內容的最后一行,有一個子文件的配置項include /etc/nginx/conf.d/*.conf;,那我們打開這個include子文件配置項看一下里邊都有些什么內容,default.conf文件的內容如下:
server {
listen 80; #配置監聽端口
server_name localhost; //配置域名
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #服務默認啟動目錄
index index.html index.htm; #默認訪問文件
}
#error_page 404 /404.html; # 配置404頁面
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #錯誤狀態碼的顯示頁面,配置后需要重啟
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the php scripts to Apache listening on 127.0.0.1:80
#
# ~ .php$ 是正則表達式,匹配以.php結尾的所有文件
#location ~ .php$ {
# proxy_pass http://127.0.0.1; // 反向代理
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all; // deny是禁止訪問
# allow all; // allow是允許訪問
#}
}
復制代碼
四、 Nginx 配置實例 1 反向代理
反向代理指令:proxy_pass
server{
listen 80; // 瀏覽器端訪問地址的端口號
# server_name 可以是網址域名; // 瀏覽器端訪問的地址
# server_name 192.168.191.34; // 瀏覽器端訪問的地址
# location / {
# proxy_pass http://123.com; // nginx 反向代理的地址,可以是域名
# proxy_pass 192.168.23.45.8080; // nginx 反向代理的地址
# };
# ~ /edu/ 是正則表達式,區分大小寫,匹配的是edu目錄
# ~* /edu/ 是正則表達式,不區分大小寫,匹配的是edu目錄
# = /edu/ 是正則表達式,嚴格匹配,匹配的是edu目錄
location ~ /edu/ {
proxy_pass 192.168.23.45.8081; // nginx 反向代理的地址
};
# ~ /vod/ 是正則表達式,匹配的是vod目錄
location ~ /vod/ {
proxy_pass 192.168.23.45.8082; // nginx 反向代理的地址
}
}
復制代碼
反向代理還有些常用的指令,我在這里給大家列出:
- proxy_set_header : 在將客戶端請求發送給后端服務器之前,更改來自客戶端的請求頭信息
- proxy_connect_timeout: 配置Nginx與后端代理服務器嘗試建立連接的超時時間
- proxy_read_timeout : 配置Nginx向后端服務器組發出read請求后,等待相應的超時時間
- proxy_send_timeout:配置Nginx向后端服務器組發出write請求后,等待相應的超時時間
- proxy_redirect : 用于修改后端服務器返回的響應頭中的Location和Refresh
- 關于proxy代理指令的詳細信息: www.nginx.cn/doc/mail/ma…
五、 Nginx 配置實例 2 負載均衡
配置文件中的內容包含三部分內容:全局塊 、 events 塊 、 http 塊(包含http塊自身和server塊)
實現負載均衡主要在http塊和server塊里面配置
- http塊的配置如下:
http {
# ... 省略http塊默認帶有的配置
upstream myserver {
server 115.28.52.63:8080 ;
server 115.28.52.63:8081 ;
}
}
復制代碼
- server塊的配置如下:
aerver {
location / {
... 省略location里面默認帶有的配置
proxy_pass http://myserver; //myserver是上面創建的myserver服務名
proxy_connect_timeout 10;
}
}
復制代碼
- Nginx 提供了幾種常用的負載均衡(load balance)的分配方式(策略)
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,能自動剔除
2、 weight
weight 代表權,重默認為 1,權重越高被分配的客戶端越多
upstream server_pool {
server 192.168.5.21 weight=10; // weight 代表權,重默認為 1,權重越高被分配的客戶端越多
server 192.168.5.22 weight=10;
}
復制代碼
3、 ip_hash
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決 session 的問題,例如:
upstream server_pool {
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}
復制代碼
4、 fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優先分配
upstream server_pool {
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
復制代碼
六、 Nginx 配置實例 3 動靜分離
1、什么是動靜分離?
Nginx 動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純地把動態頁面和 靜態頁面物理分離。嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用 Nginx 處理靜態頁面, Tomcat 處理動態頁面
動靜分離從目前實現角度來講大致分為兩種:
- 一種是純粹把靜態文件獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案
- 另外一種方法就是動態跟靜態文件混合在一起發布,通過 nginx 來分開
2、動靜分離具體配置
- 在 liunx 系統中準備靜態資源,用于進行訪問,在nginx里面,新建一個文件夾data
- 配置文件中的內容包含三部分內容:全局塊 、 events 塊 、 http 塊(包含http塊自身和server塊)
在 nginx 配置文件中server塊中進行配置,server塊的配置如下:
aerver {
server 80;
server_name 192.168.17.129;
#chartset koi8-r;
#access_log log/host.access.log main;
# 通過nginx實現靜態資源跳轉
location /www/ {
# /data/是靜態資源目錄
root /data/;
index index.html index.htm;
}
# 通過nginx實現靜態資源跳轉
location /image/ {
# /data/是靜態資源目錄
root /data/;
# autoindex on是列出訪問目錄,可以不加
autoindex on;
}
}
復制代碼
七、 Nginx 的高可用集群
1、什么是 nginx 高可用?
服務器的主nginx掛掉了,但是我們依然可以成功的請求到數據
(1)需要兩臺帶有 nginx 的服務器
(2)需要 keepalived 軟件;類似于路由,里面通過腳本來檢查當前的 主服務器的nginx(主nginx) 是否還活著,如果活著就用,如果宕機死了,就去使用 從服務器的nginx(備份的nginx),在這個過程中,該軟件會向外提供一個虛擬IP,這個IP實際是不存在的,但是我們需要用這個虛擬IP去訪問
(3)需要虛擬 ip
2、配置高可用的準備工作
(1)需要兩臺服務器 192.168.17.129 和 192.168.17.131
(2)在兩臺服務器安裝 nginx 軟件
在上面有說明如何安裝nginx
(3)在兩臺服務器安裝 keepalived 軟件
1) 為了方便,可以直接使用 yum 命令進行安裝
yum install keepalived –y
安裝的版本是 keepalived.x86_64 0:1.3.5-8.el7_6.5
2)查看是否安裝成功:rpm -q -a keepalived
3)安裝之后,在 etc 目錄里面生成目錄 keepalived,目錄 keepalived里面有文件 keepalived.conf
3、完成高可用配置(主從配置,2個服務器都要配置)
(1)主要是修改
/etc/keepalived/keepalivec.conf 配置文件
# 全局定義
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL # 服務器的主機的名字,可以訪問到主機
# /etc/hosts 文件中,添加主機名字 例如:127.0.0.1 LVS_DEVEL
}
# 檢測腳本(查看nginx是否還活著)和權重參數
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 這個是自己創建的腳本文件位置
interval 2 # 檢測腳本執行的間隔,2秒執行一次
weight 2 # 權重
}
# 虛擬IP的配置,常用的配置
vrrp_instance VI_1 {
state BACKUP # 備份服務器上將 MASTER 改為 BACKUP
interface ens33 //服務器網卡名稱 使用ifconfig命令來查看
virtual_router_id 51 # 主、備機的 virtual_router_id 必須相同
priority 90 # 主、備機取不同的優先級,主機值較大,備份機值較小
advert_int 1 # 心跳檢測,確認主服務器是否還活著,檢測間隔為1秒
authentication {
auth_type PASS # 權限校驗的方式:密碼
auth_pass 1111 # 權限校驗的密碼:1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虛擬地址
}
}
復制代碼
(2)在/usr/local/src 添加檢測腳本文件nginx_check.sh
/usr/local/nginx/sbin/nginx 是nginx的啟動路徑
3)把兩臺服務器上 nginx 和 keepalived 啟動
啟動 nginx: ./nginx
啟動 keepalived: systemctl start keepalived.service
4、最終測試
1)在瀏覽器地址欄輸入 虛擬 ip 地址 192.168.17.50
2)把主服務器(192.168.17.129) nginx 和 keepalived 停止,再輸入 192.168.17.50查看效果
八、Nginx 的原理的簡單分析
1、 Nginx 的原理
是通過 mater 和 worker 來實現的
2、 worker 如何進行工作的?
默認只有一個master,多個worker,有請求過來后,首先master會收到,然后由mster告知worker有新的請求過來了,這時候woker通過爭搶機制,來得到這個新的請求,從來進行相應的處理
3、一個 master 和多個 woker 有好處
(1)可以使用 nginx –s reload 熱部署,利用 nginx 進行熱部署操作
(2)每個 woker 是獨立的進程,如果有其中的一個 woker 出現問題,其他 woker 獨立的, 繼續進行爭搶,實現請求過程,不會造成服務中斷
4、設置多少個 woker 合適
worker 數和服務器的 cpu 數相等是最為適宜的
5、連接數 worker_connection
(1)第一個:發送請求,占用了 woker 的幾個連接數?
答案: 2 或者 4 個
解析:nginx配置的動靜分離,請求靜態資源占用2個連接數,請求動態資源,因為要通過tomcat找數據庫的數據,所以占用4個連接數
(2)第二個: nginx 有一個 master,有四個 woker,每個 woker 支持最大的連接數 1024,支持的 最大并發數是多少?
普通的靜態訪問最大并發數是: worker_connections * worker_processes /2
普通的靜態訪問最大并發數是: 每個woker 支持最大的連接數 * woker個數 /2
而如果是 HTTP 作 為反向代理來說,最大并發數量是 worker_connections * worker_processes/4
而如果是 HTTP 作 為反向代理來說,最大并發數量是: 每個woker 支持最大的連接數 * woker個數 /4
原文鏈接:
https://juejin.cn/post/6933106590446944264