1. 程式人生 > 實用技巧 >linux下安裝nginx(編譯安裝)及反向代理及負載均衡

linux下安裝nginx(編譯安裝)及反向代理及負載均衡

首先解除安裝掉之前用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    最少連結數,那個機器連結數少就分發