linux下安裝nginx(編譯安裝)及反向代理及負載均衡
阿新 • • 發佈:2020-11-01
首先解除安裝掉之前用yum命令下載的nginx
yum remove nginx
安裝nginx需要的依賴庫
yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
下載安裝nginx原始碼包
cd /opt wget -c https://nginx.org/download/nginx-1.16.0.tar.gz
解壓縮原始碼(還是在/opt目錄下)
tar -zxvf nginx-1.16.0.tar.gz
釋放編譯檔案 開啟nginx狀態監測功能
cd /opt/nginx-1.16.0
./configure --prefix=/opt/nginx116 --with-http_ssl_module --with-http_stub_status_module
編譯安裝
make && make install
啟動nginx,進入sbin目錄,找到nginx啟動命令
cd /opt/nginx116/sbin ./nginx #啟動 ./nginx -s stop #關閉 ./nginx -s reload # 平滑重啟 ,修改了nginx.conf之後,可以不重啟服務,載入新的配置
檢視nginx執行狀態
檢視埠是否執行: netstat -tunlp
檢視程序是否執行: ps -ef | grep nginx
nginx目錄下的檔案
conf 存放nginx所有配置檔案的目錄,主要nginx.conf
html 存放nginx預設站點的目錄,如index.html、error.html等
logs 存放nginx預設日誌的目錄,如error.log access.log
sbin 存放nginx主命令的目錄,sbin/nginx
nginx.conf配置檔案解析
注意: 在修改配置檔案之前,最好是把配置檔案備份一份!!!!!
#定義nginx工作程序數 worker_processes 5; #連線數 events { worker_connections 1024; } #錯誤日誌 #error_log logs/error.log; #http定義程式碼主區域 http { include mime.types; #暫時不用管 default_type application/octet-stream; #暫時不用管 #定義nginx的訪問日誌功能 #nginx會有一個accses.log功能,檢視使用者訪問的記錄 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; sendfile on; #支援傳送檔案 keepalive_timeout 65; #保持長連線的超時時間 #開啟gzip壓縮傳輸 gzip on; #server就是虛擬主機 比如定義一個鬥魚網站 server { #定義nginx的訪問入口埠,訪問地址是 192.168.11.37:80 listen 80; #定義網站的域名www.woshidouyu.tv #如果沒有域名,就填寫伺服器的ip地址 192.168.11.37 server_name www.woshidouyu.tv; #域名 #nginx的url域名匹配 #只要請求來自於www.woshidouyu.tv/111111111 #只要請求來自於www.woshidouyu.tv/qweqwewqe #最低階的匹配,只要來自於www.woshidouyu.tv這個域名,都會走到這個location location / { #網站的根目錄 #這個root引數,也是關鍵字,定義網頁的根目錄 #以nginx安裝的目錄為相對路徑 /opt/nginx116/html #可以自由修改這個root定義的網頁根目錄 root html; #網站伺服器的根目錄 #index引數定義網站的首頁檔名,預設的檔名 index index.html index.htm; } #錯誤頁面的優化(只要是遇到前面4系列的錯誤,就會直接跳轉到相對目錄下的40x.html頁面) error_page 400 401 402 403 404 /40x.html; error_pag 500 502 503 504 /50x.html; location = /50x.html{ #http://www.woshidouyu.tv/50x.html root html; #網站伺服器的根目錄 } } }
nginx啟動出現錯誤的情況
如果你在平滑重啟nginx時出現以下情況的話,說明你的nginx沒有啟動
解決方案:
# 只需要將nginx啟動起來即可
/opt/nginx116/sbin/nginx
nginx錯誤頁面
配置nginx錯誤頁面
vim /opt/nginx116/conf/nginx.conf
修改server程式碼塊
server {
listen 80;
server_name www.qishihuya.com;
location / {
root /opt/www/qishihuya;
index index.html index.htm;
}
#error_page 500 502 503 504 /50x.html;
error_page 400 402 403 404 /40x.html;
location = /40x.html {
root html;
}
}
平滑重啟nginx
/opt/nginx112/sbin/nginx -s reload
nginx錯誤頁面優化
開啟百度或其他網站,隨便輸入一個不存在的連結,就可以訪問到錯誤頁面
右鍵點選頁面空白處,檢視網頁原始碼
拷貝原始碼,貼上到/opt/nginx112/html/40x.html下面去
再訪問我們的網站,隨便輸入一個不存在的連結, 就可以訪問到這個錯誤頁面
http://192.168.1.40/asldfjasd
nginx訪問日誌功能
nginx限制網站來源IP訪問
如果想要在本地訪問一個域名, 可以更改本機hosts檔案
windows下
c:\\\windows\system32\drivers\etc\hosts
linux下
/etc/hosts
nginx狀態檢測功能
在虎牙或者其他server程式碼塊新增以下配置
location /status {
# 開啟nginx狀態檢測功能
stub_status on;
}
平滑重啟nginx
/opt/nginx166/sbin/nginx -s reload
配置nginx多虛擬主機
效果:
(1) 訪問三個不同的域名,顯示三個不同的網站
(2) 三個網站互不影響
修改配置檔案
worker_processes 5;
#error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
keepalive_timeout 65;
#gzip on;
# 配置多個server即可,並且修改server_name,以及不同網站的根目錄及index.html頁面
server {
listen 80;
server_name www.douyu.top;
location / {
root /opt/web_server/douyu; #前提需要建立好目錄,並且在目錄下建立一個index.html檔案,並將程式碼寫入
index index.html index.htm;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.huya.top;
location /{
root /opt/web_server/huya; #前提需要建立好目錄,並且在目錄下建立一個index.html檔案,並將程式碼寫入
index index.html;
}
}
server {
listen 80;
server_name www.zhanqi.top;
location /{
root /opt/web_server/zhanqi; #前提需要建立好目錄,並且在目錄下建立一個index.html檔案,並將程式碼寫入
index index.html;
}
}
}
在伺服器上建立三個目錄
cd /opt
rm -rf web_server
mkdir -p web_server/huya
mkdir -p web_server/douyu
mkdir -p web_server/zhanqi
touch web_server/huya/index.html
touch web_server/huya/index.html
touch web_server/huya/index.html
分別開啟這三個index.html檔案
vim index.html
分別新增三個直播網站的原始碼內容
然後儲存退出
修改本機hosts檔案
c:\\windows\system32\drivers\etc\hosts
新增以下三行解析記錄
10.0.3.156 www.huya.top
10.0.3.156 www.zhanqi.top
10.0.3.156 www.douyu.top
平滑重啟nginx
/opt/nginx196/sbin/nginx -s reload
網站訪問
瀏覽器上直接輸入 www.huya.top 即可看到頁面
瀏覽器上直接輸入 www.zhanqi.top 即可看到頁面
瀏覽器上直接輸入 www.douyu.top 即可看到頁面
Nginx代理功能
實現一個反向代理
實驗效果
在windows中訪問代理伺服器,然後讓代理伺服器去拿web伺服器的資料
請求資料: windows ——> 10.0.3.156(假如公網IPwww.qishi8huya.com) ——> 10.0.3.2(由它返回資料)
返回資料: windows <—— 10.0.3.156 <—— 10.0.3.2
機器準備,兩臺伺服器
反向代理伺服器 10.0.3.156
淘寶伺服器 10.0.3.2
修改代理伺服器10.0.3.156的配置檔案
vim /opt/nginx116/conf/nginx.conf
在location程式碼塊下新增一行資料
proxy_pass http://10.0.3.2:8060;
重啟代理伺服器的nginx
/opt/nginx196/sbin/nginx -s reload
訪問代理伺服器的IP: 192.168.12.139
訪問的結果是192.168.12.200返回的資料即可
Nginx負載均衡
負載均衡原理
配置負載均衡伺服器
有三臺機器 一臺為nginx代理伺服器(負載均衡排程器), 另外兩臺為WEB伺服器
10.0.3.156 # 負載均衡排程器
10.0.3.2 # WEB伺服器1
10.0.3.212 # WEB伺服器2
相當於就是當用戶訪問10.0.3.156時會返回10.0.3.2伺服器上的資料,某天當web伺服器1掛掉了,那麼使用者再次訪問10.0.3.156時則會返回10.0.3.212伺服器上的資料,因為這兩臺伺服器返回的資料都是相同的,這就是高可用性。
完成效果
使用者訪問10.0.3.156,由nginx代理伺服器通過負載均衡排程器分別分配到兩個WEB伺服器,實現負載均衡
準備三臺機器
10.0.3.156 # 負載均衡排程器
10.0.3.2 # WEB伺服器1
10.0.3.212 # WEB伺服器2
兩個WEB伺服器可以正常訪問
訪問web伺服器1返回“代噶好,我係帥帥劉 我真的是1.40這臺機器”
訪問web伺服器2返回“MMP 我TM是文龍”
在nginx代理伺服器(負載均衡排程器)上面做如下配置:
# 在http程式碼塊裡面,新增配置
upstream qishi8_pool {
server 10.0.3.2:8060;
server 10.0.3.212;
}
在location程式碼塊內,新增
location / {
proxy_pass http://qishi8_pool; #改成跟上面一樣的
root html;
index index.html index.htm;
}
分別平滑重啟三臺機器的nginx服務
/opt/nginx196/sbin/nginx -s reload
訪問10.0.3.156就可以看到,WEB1和WEB2交替返回資料
配置權重
在upstream裡面配置weight的數值,可以調整伺服器的請求權重
可以通過以下幾種方式進行權重的配置
排程演算法 概述
輪詢 按時間順序逐一分配到不同的後端伺服器(預設)
weight 加權輪詢,weight值越大,分配到的訪問機率越高
ip_hash 每個請求按訪問IP的hash結果分配,這樣來自同一IP的固定訪問一個後端伺服器
url_hash 按照訪問URL的hash結果來分配請求,是每個URL定向到同一個後端伺服器
least_conn 最少連結數,那個機器連結數少就分發