Nginx (二) Nginx的反向代理負載均衡以及日誌切割

Nginx是一個高併發,高性能的服務器,能夠進行反向代理以及網站的負載均衡。這些功能的運用都在配置文件中,也就是Nginx安裝目錄下的conf/nginx.conf。css

nginx.conf

1. 先來看下Nginx默認的配置文件以及說明:html

#user  nobody;
#----------------------------------------------
# user用來配置使用的用戶和組,默認是沒有進行配置的:
# 以下配置表示配置aries這個用戶以及aries這個用戶組:
# user aries aries
#----------------------------------------------
worker_processes 1;
#----------------------------------------------
# worker_processes 用來配置Nginx開啓的進程數,
# 通常配置等於cpu的核數。
#----------------------------------------------
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#---------------------------------------------
# error_log 全局錯誤日誌配置,後面跟生成的
# 志文件的位置,默認在Nginx的logs
# 文件夾中,以及日誌級別。
# [ debug | info | notice | warn | error | crit ] #---------------------------------------------
#pid logs/nginx.pid;
#--------------------------------------------- # pid 當Nginx啓動時會生成一個nginx.pid的文件,
# 裏面存放的是Nginx主線程的id號。
#---------------------------------------------
#工做模式與鏈接數上限
events {
use epoll; worker_connections
1024; #配置Nginx單個進程容許的最大鏈接數。 } #設定http服務器 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; #-----------------------------------------------------------------------
# log_format 配置日誌格式,後面跟日誌格式的名稱和配置的格式,參數是Nginx中
# 一些內置的屬性。
# access_log 配置日誌的存放位置,以及後面跟日誌打印格式內容。
# ----------------------------------------------------------------------
sendfile on; # 開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件
#tcp_nopush on; # 防止網絡阻塞 #keepalive_timeout 0; keepalive_timeout 65; #gzip on;
# 配置開啓gzip壓縮

#虛擬主機的配置 server { listen 80;
# 監聽端口
server_name localhost; # 監聽主機名稱或者ip
#charset koi8-r; # 默認編碼
#access_log logs/host.access.log main; # 日誌
location
/ { root html; index index.html index.htm; }
#-------------------------------------------------
# 配置的訪問位置,默認是html目錄下的index.html文件,
    # 若是不存在則找index.htm文件
#-------------------------------------------------
#error_page 404 /404.html; #錯誤頁面配置
# redirect server error pages to the static page /50x.html #
error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

「http」表示配置的http協議的請求,裏面能夠配置多臺server(虛擬主機),基本的配置格式以下:linux

 ......

event{

        ......   

    }

http{

      .....

      server {

                ......

       }

      server {

                ......

       }

     } 
View Code

 

2. 下面配置負載均衡:nginx

#user  nobody;
worker_processes  1;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    keepalive_timeout  65;

    log_format mystyle '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
                   
    upstream mycomputers {
        #upstream的負載均衡,weight是權重,能夠根據機器配置定義權重;weigth參數表示權值,權值越大被分配到的概率越大;down表示當前主機不可用。
        server 192.168.137.111:80 weight=2;
        server 192.168.137.114:80 weight=2 ;
        server 192.168.137.113:80 weight=2 down;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://mycomputers; # 將請求按照權重分配給上面配置的服務器
            proxy_set_header X-UserRealIP-For $remote_addr;
            # 由於用戶請求服務,先到Nginx因此在服務端若是在服務端直接過去請求IP獲得的是Nginx的主機,因此在這裏去出用戶的真實IP,設置在請求頭中,服務端才能夠獲取用戶的真實IP。        
        }
               
        access_log logs/access.log mystyle;
    }
}

 3. 反向代理配置   tomcat

server {        
     listen 80; server_name localhost; location / { proxy_pass http://192.168.137.114:8080; #代理的內部IP服務器
proxy_redirect off;
       proxy_set_header X-Real-IP $remote_addr; } access_log logs
/access.log mystyle; }

4. 動靜分離配置bash

server{
        listen       80;
        server_name  localhost;        
        
        #本地動靜分離反向代理配置
        #全部jsp的頁面均交由tomcat或其餘服務器處理
        location ~ \.(jsp|jspx|do)?$ {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
        #全部靜態文件由nginx直接讀取不通過tomcat或resin
        location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
            expires 15d;
        }

        location ~ .*\.(js|css)?${ 
            expires 1h;
        }
}

5. Nginx日誌的切割服務器

   a 寫以下腳本存放到 /usr/local/nginx/sbin目錄下命名nginx_cut_log.sh, 做用是暫停nginx服務並備份日誌文件,而後重啓。網絡

#!/bin/bash
BASE_PATH=/usr/local/nginx
LOGS_PATH=${BASE_PATH}/logs
LOGS_PATH_BAK=${LOGS_PATH}/logs_bak
BAK_TIME=`/bin/date -d yesterday +%Y%m%d`

$BASE_PATH/sbin/nginx -s stop

mv $LOGS_PATH/access.log $LOGS_PATH_BAK/access_$BAK_TIME.log

$BASE_PATH/sbin/nginx

    給全部用戶添加執行權限: chmod a+x nginx_cut_log.sh   併發

  b 輸入: crontab -eapp

    插入以下代碼: 00 00  *  *  *  sh /usr/local/nginx/nginx_cut_log.sh 

    此操做是讓linux系統天天晚上12點整執行nginx_cut_log.sh腳本進行日誌切割備份。 

測試配置: */1 * * * * sh /usr/local/nginx/sbin/nginx_cut_log.sh       每分鐘執行一次

     BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`

效果以下:

 

以上都只是最基本的配置,還有其餘各類細緻的配置屬性,推薦《nginx 實戰》進行系統的瞭解和學習。

相關文章
相關標籤/搜索