文章已收錄至https://lichong.work,轉載請註明原文連結。
ps:歡迎關注公眾號“Fun肆程式設計”或新增我的私人微信交流經驗?
一.Nginx安裝配置及常用命令
1.環境搭建
首先在linux系統下安裝gcc編譯環境,執行:
yum install gcc-c++ -y
確保當前系統可以編譯nginx及其依賴包。
同時,安裝Nginx還需要以下依賴需要進行安裝:
pcre-9.37.tar.gz
openssl-1.0.1t.tar.gz
zlib-1.2.8.tar.gz
nginx-1.11.1.tar.gz
下面通過兩種安裝方式安裝這些依賴,可靈活選擇安裝方式
(1)聯網下載壓縮包安裝依賴
(1.1)在linux資料夾下下載壓縮包,這裡已/usr/src資料夾為例
cd /usr/src
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
(1.2) 解壓壓縮檔案後進入到該壓縮檔案
tar -xvf pcre-8.37.tar.gz
cd pcre-8.37
(1.3)對當前安裝包進行配置檢查
./configure
(1.4)進行編譯安裝
make && make install
(1.5)安裝完成,可通過命令檢視是否安裝成功及當前安裝版本
pcre-config --version
(2)安裝nginx的依賴
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2.Nginx安裝
(1)到nginx官網下載安裝nginx,推薦下載Stable version(穩定版本),本次安裝以nginx1.20.2為例。
(2)將nginx的壓縮包放到/usr/src中,進入該目錄下對該壓縮包進行解壓
cd /usr/src
tar -xvf nginx-1.20.2.tar.gz
(3) 進入到解壓後的nginx資料夾
cd nginx-1.20.2
(4)對當前安裝包進行配置檢查
./configure
(5)進行編譯安裝
make && make install
(6)進到/usr/local/nginx/sbin資料夾中(安裝完nginx會在local資料夾中自動建立nginx檔案)啟動nginx
cd /usr/local/nginx/sbin
./nginx
(7)檢視已啟動的nginx程式
ps -ef | grep nginx
2.Nginx配置
(1) 進入nginx的配置資料夾
cd /usr/local/nginx/conf
(2)開啟nginx.conf檔案
vi nginx.conf
其中
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
如果要配置固定埠號,則在server中的listen中修改埠號。此處預設不改動。
(3) 防火牆開放nginx的埠,此處以80埠為例
sudo firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
(4)從瀏覽器訪問該nginx(瀏覽器訪問linux的ip地址)
3.Nginx常用命令
以下命令基於已經安裝成功Nginx後在Nginx的sbin資料夾下執行。
cd /usr/local/nginx/sbin/
(1)檢視nginx的版本號
./nginx –v
(2)啟動nginx
./nginx
(3) 關閉nginx
./nginx -s stop
(4) 重新載入nginx(一般用於更改完conf中的配置檔案後,在不重啟nginx的情況下使配置檔案生效)
./nginx -s reload
二、反向代理
這裡以已經配置好的nginx反向代理tomcat為例。實現效果則為訪問nginx地址展示tomcat頁面。
1.在linux中安裝並啟動好tomcat用於測試,並且開放tomcat的埠號。
2.在nginx的nginx.conf配置檔案中配置反向代理
cd /usr/local/nginx/conf
vi nginx.conf
3.配置反向代理
首先將server塊中的server_name修改為該linux系統的ip地址。
然後在server塊中的location當中配置需要請求轉發的路徑,其中proxy_pass則是tomcat的地址。
location / {
root html;
proxy_pass http://127.0.0.1:8080;
}
4.訪問nginx地址
三、負載均衡
nginx配備多臺伺服器的情況下,平均訪問每臺機器。
此次以兩臺tomcat伺服器為例,一臺埠為8080,一臺埠為8081。
1.在nginx配置檔案中進行負載均衡的配置
配置伺服器地址
upstream myserver{
server xxx.xx.xx.14:8080;
server xxx.xx.xx.14:8081;
}
server{
listen 80;
server_name xxx.xx.xx.14
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://myserver; //這裡的myserver是上面配置的upstream
root html;
index index.html index.htm;
}
}
2.負載均衡分配策略
1.輪詢
預設情況下是輪詢策略,到nginx伺服器中的每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down調則自動剔除該伺服器
2.權重weight
weight預設為1,權重越高被分配的客戶端越多,可根據伺服器效能來配置相應的權重。
可在upstream中配置
upstream myserver{
server xxx.xx.xx.14:8080 weight=2;//數值越大則需要處理的請求越多
server xxx.xx.xx.14:8081;
}
3.ip_hash
每個請求按照訪問ip的hash結果分配,也就是說同一ip訪問nginx會一直講請求傳送給同一臺伺服器。
upstream myserver{
ip_hash;
server xxx.xx.xx.14:8080 ;
server xxx.xx.xx.14:8081;
}
需要注意的nginx1.3.1版本之前ip_hash不能和權重weight共同使用。
當有伺服器需要剔除的時候,需要手動down掉
4.fair
upstream myserver{
ip_hash;
server xxx.xx.xx.14:8080 ;
server xxx.xx.xx.14:8081;
fair;
}
按後端伺服器的響應時間來分配請求,響應時間短的優先分配
5.least_conn
把請求轉發給連線數較少的後端伺服器。在這種方式下可以達到更好的負載均衡效果
upstream myserver{
least_conn;
server xxx.xx.xx.14:8080 ;
server xxx.xx.xx.14:8081;
}
6.url_hash
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器。
upstream myserver{
hash $request_uri;
server xxx.xx.xx.14:8080 ;
server xxx.xx.xx.14:8081;
}
四、動靜分離
我們通過使用正規表示式來匹配過濾,以此來達到動態頁面和靜態頁面的操作可以交給不同的伺服器。
以下配置實現的是當為jpg,js和css檔案的時候則訪問本地html檔案裡的靜態資源,如果訪問的是動態資源則由8080埠tomcat伺服器處理
以下是nginx.conf檔案的配置
server{
listen 80;
server_name xxx.xx.xx.14
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ \.jpg$ {
root html;
expires 30d;
}
location ~ \.js$ {
root html;
expires 30d;
}
location ~ \.css$ {
root html;
expires 30d;
}
location ~ .*$ {
proxy_pass http://localhost:8080
}
}
五、高可用叢集
這裡介紹下雙機高可用,主要分為兩種:
(一).Nginx+keepalived雙機主從模式
一臺主伺服器和一臺熱備伺服器。正常情況下主伺服器提供服務,只有當主伺服器發生故障的時候熱備伺服器才會接管主伺服器。但是當主伺服器不出現故障的時候,則熱備伺服器就會處於浪費狀態
(二).Nginx+keepalived雙機主主模式
使用兩臺負載均衡伺服器,互為主備,兩臺伺服器都屬於活動狀態,只有當其中一臺發生故障時由另一臺接管故障伺服器的請求。這種方案比較經濟實惠。
下面分別介紹下這兩種模式的配置:
1.Nginx+keepalived雙機主從模式
配備兩臺nginx伺服器,每臺中配置keepalived。
(1)配備兩臺伺服器,並且在兩臺伺服器中安裝nginx(安裝見上)
(2)在兩臺伺服器中安裝keepalived
yum install keepalived -y
(3)開啟keepalived所在資料夾
cd /etc/keepalived/
(3)對keepalived進行配置
vi keepalived.conf
(4)在keepalived.conf具體引數配置
主伺服器配置如下
vrrp_instance VI_1 {
state MASTER //主從劃分,主伺服器為MASTER從伺服器為BACKUP
interface eth0 //設定為當前網路卡(通過ifconfig檢視)
virtual_router_id 51 //主從伺服器設定相同的id
priority 100 //優先順序 主伺服器的優先順序設定為較大,從伺服器次之
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xxx.xx.xx.111 //虛擬地址,瀏覽器通過該地址訪問,主從配置相同
}
}
從伺服器配置如下
vrrp_instance VI_1 {
state BACKUP
interface eth0 //設定為當前網路卡(通過ifconfig檢視)
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xxx.xx.xx.111
}
}
主從伺服器都在keepalived.conf中新增如下檢測指令碼檢測指令碼
vrrp_script chk_http_port {
script "usr/local/src/nginx_check.sh" //nginx_check.sh所在位置,該檔案通過下個步驟中新建
interval 2
weight2
}
在script配置路徑下配置該檢測指令碼
cd /usr/local/src/
將以下指令碼生成nginx_check.sh檔案放到 usr/local/src/中
#!/bin/bash
A=`ps -C nginx – no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
(5)兩臺伺服器上啟動nginx和keepalived
./nginx
systemctl start keepalived.service
(6)測試
訪問keepalived.conf中配置的虛擬ip地址,可以正常訪問伺服器。將主伺服器中的nginx中停止,仍可正常訪問,此時訪問的實際上是從伺服器上的資源
2.Nginx+keepalived雙機主主模式
在兩臺機器上都安裝nginx和keepalived。具體安裝方式見上。
(1)第一臺keepalived配置
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "usr/local/src/nginx_check.sh"
interval 2 #(檢測指令碼執行的間隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xxx.xx.xx.112
}
}
vrrp_instance VI_2 {
state BACKUP
interface eno16777736
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xxx.xx.xx.113
}
}
(2)第二臺keepalived配置
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "usr/local/src/nginx_check.sh"
interval 2 #(檢測指令碼執行的間隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xxx.xx.xx.112
}
}
vrrp_instance VI_2 {
state MASTER
interface eno16777736
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xxx.xx.xx.113
}
}
在雙機主主模式下,兩臺伺服器都屬於活動狀態,只有當其中一臺發生故障時由另一臺接管故障伺服器的請求。
六、推薦引數配置
可參考文章:【工具-Nginx】Nginx高效能通用配置檔案-註釋版-支援防刷限流、可控高併發、HTTP2、防XSS、Gzip、OCSP Stapling、負載、SSL
文章已收錄至https://lichong.work,轉載請註明原文連結。
ps:歡迎關注公眾號“Fun肆程式設計”或新增我的私人微信交流經驗?
【前端-開發環境】使用NVM實現不同nodejs版本的自由切換(NVM完整安裝使用手冊)
【前端-NPM私服】內網使用verdaccio搭建私有npm伺服器
【前端-IE相容】Win10和Win11使用Edge除錯前端相容IE6、IE7、IE8、IE9、IE10、IE11問題
【工具-Shell指令碼】java程式產品包模板-linux和windows通用shell啟動停止指令碼(無需系統安裝Java執行環境)
【工具-Nginx】Nginx高效能通用配置檔案-註釋版-支援防刷限流、可控高併發、HTTP2、防XSS、Gzip、OCSP Stapling、負載、SSL
【工具-WireShark】網路HTTP抓包使用教程
【後端-maven打包】通過profile標籤解決同時打jar包 war包需求
【後端-SpringCache】基於Spring Cache封裝一個能夠批量操作的Redis快取記錄下踩坑歷程(pipeline或mget封裝)
【後端-SkyWalking】SkyWalking前後端開發環境搭建詳細教程步驟-6.x/7.x/8.x版本通用-外掛二次開發利器(一)
✨歡迎為耿直少年點贊、關注、收藏!!!
???