1. 程式人生 > >Nginx負載均衡-----------減輕伺服器壓力

Nginx負載均衡-----------減輕伺服器壓力

配置環境,安裝包下載
系統:Linux CentOS 6.5
Tomcat:6.0,7.0(兩個不同版本的方便測試)
Nginx安裝包及其依賴包:CSDN下載地址
1.安裝gcc 和 c++編譯包
檢測是否安裝編譯包命令:(安裝會列印版本資訊)

# Gcc –v 
--或者
# rpm -ql gcc

解除安裝已安裝編譯包命令:

# rpm -e gcc [-nodepts]

聯網安裝命令:

# yum -y install gcc
# yum install -y gcc gcc-c++

開始安裝介面:
這裡寫圖片描述

這裡寫圖片描述
注意:聯網安裝需要外網的支援,在虛擬機器上的話請選擇網路橋接,就可以連線到外網,安裝可能需要一段時間耐心等待

2.安裝依賴包
依次安裝順序為:
openssl-fips-x.x.x.tar.gz
zlib-x.x.x.tar.gz
pcre-x.xx.tar.gz
ngx_cache_purge-x.x.tar.gz

  • 安裝openssl
    解壓
# tar -zxvf openssl-fips-2.0.9.tar.gz 

進入解壓目錄

# cd openssl-fips-2.0.9

安裝(./config –prefix=安裝目錄)

# ./config --prefix=/usr/local/nginx
# make && make install

這裡寫圖片描述

這裡寫圖片描述

  • 安裝zlib
    解壓
# tar -zxvf zlib-1.2.8.tar.gz 

進入解壓目錄

# cd zlib-1.2.8

安裝(./configure –prefix=安裝目錄)

# ./configure --prefix=/usr/local/nginx
# make && make install

zlib安裝

zlib安裝

  • 安裝pcre
    解壓
# tar -zxvf pcre-8.37.tar.gz 

進入解壓目錄

# cd pcre-8.37

安裝(./configure –prefix=安裝目錄(絕對路徑))

# ./configure --prefix=/usr/local/nginx
# make && make install

pcre安裝

pcre安裝

  • 安裝ngx_cache_purge(解壓即可)
    解壓
# tar -zxvf ngx_cache_purge-2.2.tar.gz

3.安裝Nginx
解壓

# tar -zxvf nginx-1.9.2.tar.gz

進入解壓目錄

# cd nginx-1.9.2

安裝Nginx(./configure –prefix=安裝目錄 –with-pcre=解壓目錄 –with-zlib=解壓目錄 –with-openssl=解壓目錄)

# ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/nginx-gz/pcre-8.37 --with-zlib=/usr/local/nginx-gz/zlib-1.2.8 --with-openssl=/usr/local/nginx-gz/openssl-fips-2.0.9
# make  && make install

Nginx安裝

Nginx安裝

  • 安裝 pcre-devel 包
# yum -y install pcre-devel

pcre-devel安裝

4.配置快取
./configure –add-module=ngx_cache_purge解壓目錄
–prefix=nginx安裝目錄
–with-openssl=解壓目錄
–with-zlib=解壓目錄
–with-http_stub_status_module –with-http_ssl_module

# ./configure --add-module=/usr/local/nginx-gz/ngx_cache_purge-2.2 --prefix=/usr/local/nginx --with-openssl=/usr/local/nginx-gz/openssl-fips-2.0.9 --with-zlib=/usr/local/nginx-gz/zlib-1.2.8 --with-http_stub_status_module --with-http_ssl_module

配置快取

編譯
【此時不用make install,只編譯就行,編譯後二進位制檔案在原始碼包objs目錄下】

# make

編譯
替換原來的nginx的二進位制檔案:
cp 解壓目錄/nginx-1.9.2/objs/nginx 安裝目錄/sbin/

# cp /usr/local/nginx-gz/nginx-1.9.2/objs/nginx /usr/local/nginx/sbin/

5.檢測
檢查80埠是否佔用

# netstat -ano |grep 80

檢測是否安裝成功
啟動Nginx

# cd /usr/local/nginx/sbin
# ./nginx

到網頁輸入改虛擬機器地址出現一下內容就為成功
檢測Nginx

6.配置負載均衡
在 conf檔案下新增修改如下配置並重啟
gzip.conf

gzip on;
gzip_min_length   1k;
gzip_buffers      4 16k;
gzip_http_version 1.1;
gzip_comp_level   2;
gzip_types        text/plain application/x-javascript text/css application/xml;
gzip_vary on;

nginx.conf
其中:
upstream mysvr配置兩個我們要訪問的伺服器,當壓力不同時會自動進行分配
server配置我們實際訪問的地址,也就是虛擬機器主機的埠、名字、編碼格式

#執行使用者 
user  nobody nobody; 
#啟動程序 
worker_processes  2; 
#全域性錯誤日誌及PID檔案 
error_log  logs/error.log notice; 
pid        logs/nginx.pid; 
#工作模式及連線數上限 
events { 
        use epoll; 
        worker_connections      1024; 
} 
#設定http伺服器,利用它的反向代理功能提供負載均衡支援 
http { 
        #設定mime型別 
        include       mime.types; 
        default_type  application/octet-stream; 
        #設定日誌格式 
        log_format main         '$remote_addr - $remote_user [$time_local] ' 
                                                '"$request" $status $bytes_sent ' 
                                                '"$http_referer" "$http_user_agent" ' 
                                                '"$gzip_ratio"'; 
        log_format download '$remote_addr - $remote_user [$time_local] ' 
                                                '"$request" $status $bytes_sent ' 
                                                '"$http_referer" "$http_user_agent" ' 
                                                '"$http_range" "$sent_http_content_range"'; 
        #設定請求緩衝 
        client_header_buffer_size    1k; 
        large_client_header_buffers  4 4k; 
        #開啟gzip模組 
        gzip on; 
        gzip_min_length  1100; 
        gzip_buffers     4 8k; 
        gzip_types       text/plain; 
        output_buffers   1 32k; 
        postpone_output  1460; 
        #設定access log 
        access_log  logs/access.log  main; 
        client_header_timeout  3m; 
        client_body_timeout    3m; 
        send_timeout           3m; 
        sendfile                on; 
        tcp_nopush              on; 
        tcp_nodelay             on; 
        keepalive_timeout  65; 
        #設定負載均衡的伺服器列表 
        upstream mysvr { 
                #weigth引數表示權值,權值越高被分配到的機率越大 
                #本機上的Squid開啟3128埠 
                server 192.168.0.110:8080   weight=1; 
                server 192.168.0.121:8080   weight=5; 
        } 
        #設定虛擬主機 
        server { 
                listen          8086; 
                server_name     gkNginx; 
                charset gb2312; 
                #設定本虛擬主機的訪問日誌 
                access_log  logs/www.yejr.com.access.log  main; 
                #如果訪問 /img/*, /js/*, /css/* 資源,則直接取本地檔案,不通過squid 
                #如果這些檔案較多,不推薦這種方式,因為通過squid的快取效果更好 
                location ~ ^/(img|js|css)/  { 
                        root    /data3/Html; 
                        expires -1; 
                } 
                #對 "/" 啟用負載均衡 
                location / { 
                        proxy_pass      http://mysvr; 
                        proxy_redirect          off; 
                        proxy_set_header        Host $host; 
                        proxy_set_header        X-Real-IP $remote_addr; 
                        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; 
                        client_max_body_size    10m; 
                        client_body_buffer_size 128k; 
                        proxy_connect_timeout   90; 
                        proxy_send_timeout      90; 
                        proxy_read_timeout      90; 
                        proxy_buffer_size       4k; 
                        proxy_buffers           4 32k; 
                        proxy_busy_buffers_size 64k; 
                        proxy_temp_file_write_size 64k; 
                } 
                #設定檢視Nginx狀態的地址 
                #location /NginxStatus { 
                       # stub_status             on; 
                       # access_log              on; 
                       # auth_basic              "NginxStatus"; 
                       # auth_basic_user_file  conf/htpasswd; 
                #} 
        } 
} 

修改這兩個檔案之後記得重新載入配置檔案並且測試
在sbin目錄下重新載入配置檔案,並重啟

# ./nginx -s reload

重啟完成之後我們輸入配置的虛擬IP進行測試:
這裡寫圖片描述

這裡寫圖片描述

從圖中我們可以看到我們同一個地址訪問了兩個不同的Tomcat,這樣我們的負載均衡就配置成功了。

下面附一些Nginx常用的命令:
啟動ngnix
安裝目錄/sbin/ngnix –s reload 重啟
安裝目錄/sbin/ngnix –s stop 停止
安裝目錄/sbin/ngnix –s start 啟動

nginx -s reload :修改配置後重新載入生效
nginx -s reopen :重新開啟日誌檔案
nginx -t -c /path/to/nginx.conf 測試nginx配置檔案是否正確

開機啟動
shell加入系統服務即可
chmod +x /etc/rc.d/init.d/nginx (設定可執行許可權)
chkconfig –add nginx (新增系統服務)