服務器部署之nginx的配置

nginx可做爲Web和 反向代理 服務器,在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品。下面記錄一下本身對nginx的配置和使用。javascript

nginx的安裝

  • 環境:oracle-linux7css

  • 安裝依賴html

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel pcre
  • 安裝nginx
yum -y install nginx   # 可能找不到安裝包,須要源碼安裝
# 源碼安裝,在合適的目錄下
wget http://nginx.org/download/nginx-1.10.2.tar.gz
tar zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
mkdir /usr/local/nginx
# 生成配置文件
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

# 設置軟鏈接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/

啓動測試

cd /usr/local/nginx/sbin/
nginx   # 啓動,默認是在後臺運行,不會阻塞當前的終端
ps aux | grep nginx

# 有兩個進程
nginx: master process nginx
nginx: worker process

經常使用的命令

nginx -h   # 幫助
nginx -t   # 驗證配置文件的正確性
nginx -v   # 查看nginx的版本
nginx -c filename  # 按指定的配置文件啓動,默認的路徑conf/nginx.conf

nginx -s reload  # 從新載入配置文件
nginx -s reopen  # 重啓nginx
nginx -s stop    # 關閉nginx
nginx -s quit    # 退出

nginx的配置文件的詳解

  • nginx的配置分爲四個部分:main(全區設置),server(主機配置),upstream(負載均衡服務器設置),和location(URL匹配特定位置設置)。
#運行用戶
user nobody;
#pid文件
pid logs/nginx.pid;
#==worker進程數,一般設置等同於CPU數量,auto爲自動檢測
worker_processes auto;
#==worker進程打開最大文件數,可CPU*10000設置
worker_rlimit_nofile 100000;
#全局錯誤日誌
error_log  logs/error.log;
# error_log  logs/error.log  info; # 能夠設置級別

# 設置前臺運行,默認後臺運行
daemon off;


#events模塊中包含nginx中全部處理鏈接的設置
events {
    #==worker進程同時打開的最大鏈接數,可CPU*2048設置
    worker_connections 2048;
    #==告訴nginx收到一個新連接通知後接受盡量多的連接
    multi_accept on;
    #==設置用於複用客戶端線程的輪訓方法
    use epoll;
}


#http模塊控制着nginx http處理的全部核心特性
http {
    #打開或關閉錯誤頁面中的nginx版本號deng
    server_tokens on;
    #!server_tag on;
    #!server_info on;
    #==優化磁盤IO設置,指定nginx是否調用sendfile函數來輸出文件,普通應用設爲on,下載等磁盤IO高的應用,可設爲off
    sendfile on;
    #==設置nginx在一個數據包裏發送全部頭文件,而不是一個接一個的發送
    tcp_nopush on;
    #==設置nginx不要緩存數據,而是一段一段的發送,
    #==當須要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能當即獲得返回值
    tcp_nodelay on;

    #==設置nginx是否存儲訪問日誌,關閉這個可讓讀取磁盤IO操做更快
    access_log on;
    #設置nginx只記錄嚴重錯誤
    #error_log logs/error.log crit;

    #==給客戶端分配keep-alive連接超時時間
    keepalive_timeout 30;

    #設置用戶保存各類key的共享內存的參數,5m指的是5兆
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    #爲給定的key設置最大的鏈接數,這裏的key是addr,設定的值是100,就是說容許每個IP地址最多同時打開100個鏈接
    limit_conn addr 100;
    # 限制下載速度
    limit_rate 128k; 

    #include指在當前文件中包含另外一個文件內容
    include mime.types;
    #設置文件使用默認的mine-type
    default_type text/html;
    #設置默認字符集
    charset UTF-8;

    #==設置nginx採用gzip壓縮的形式發送數據,減小發送數據量,但會增長請求處理時間及CPU處理時間,須要權衡
    gzip on;
    #==加vary給代理服務器使用,針對有的瀏覽器支持壓縮,有個不支持,根據客戶端的HTTP頭來判斷是否須要壓縮
    gzip_vary on;
    #nginx在壓縮資源以前,先查找是否有預先gzip處理過的資源
    #!gzip_static on;
    #爲指定的客戶端禁用gzip功能
    gzip_disable "MSIE[1-6]\.";
    #容許或禁止壓縮基於請求和相應的響應流,any表明壓縮全部請求
    gzip_proxied any;
    #==設置對數據啓用壓縮的最少字節數,若是請求小於10240字節則不壓縮,會影響請求速度
    gzip_min_length 10240;
    #==設置數據壓縮等級,1-9之間,9最慢壓縮比最大
    gzip_comp_level 2;
    #設置須要壓縮的數據格式
    gzip_types text/plain text/css text/xml text/javascript  application/json application/x-javascript application/xml application/xml+rss; 

    #==開發緩存的同時也指定了緩存文件的最大數量,20s若是文件沒有請求則刪除緩存
    open_file_cache max=100000 inactive=20s;
    #==指多長時間檢查一次緩存的有效信息
    open_file_cache_valid 60s;
    #==文件緩存最小的訪問次數,只有訪問超過5次的纔會被緩存
    open_file_cache_min_uses 5;
    #當搜索一個文件時是否緩存錯誤信息
    open_file_cache_errors on;

    #==容許客戶端請求的最大單文件字節數
    client_max_body_size 8m;
    #==衝區代理緩衝用戶端請求的最大字節數
    client_header_buffer_size 32k;

    proxy_redirect off;
    #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
    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跟後端服務器鏈接超時時間(代理鏈接超時)
    proxy_connect_timeout 60;
    #==鏈接成功後,後端服務器響應時間(代理接收超時)
    proxy_read_timeout 120;
    #==後端服務器數據回傳時間(代理髮送超時)
    proxy_send_timeout 20;
    #==設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
    proxy_buffer_size 32k;
    #==proxy_buffers緩衝區,網頁平均在32k如下的設置
    proxy_buffers 4 128k;
    #==高負荷下緩衝大小(proxy_buffers*2)
    proxy_busy_buffers_size 256k;
    #==設定緩存文件夾大小,大於這個值,將從upstream服務器傳
    proxy_temp_file_write_size 256k;
    #==1G內存緩衝空間,3天不用刪除,最大磁盤緩衝空間2G
    proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;


    #設定負載均衡服務器列表
    upstream nginx.test.com{
        #後端服務器訪問規則
        #ip_hash;
        #weight參數表示權重值,權值越高被分配到的概率越大
        #server 10.11.12.116:80 weight=5;
        #PC_Local
        server 10.11.12.116:80;
        #PC_Server
        server 10.11.12.112:80;
        #Notebook
        #server 10.11.12.106:80;
    }

    #虛擬主機設定模塊(掛載多個站點,只須要配置多個server及upstream節點便可)
    server {
        #監聽80端口
        listen 80;
        #定義使用nginx.test.com訪問
        server_name nginx.test.com;
        #設定本虛擬主機的訪問日誌
        access_log logs/nginx.test.com.access.log;
        
        #默認請求
        # 語法規則:location [=|~|~*|^~] /uri/ {...} 先匹配普通location,在匹配正則location
        # = 開頭表示精確匹配
        # ^~ 開頭表示uri以某個常規字符串開頭,理解爲匹配url路徑便可,無需考慮編解碼
        # ~ 開頭表示區分大小寫的正則匹配
        # ~* 開頭表示不區分大小寫的正則匹配
        # !~ 開頭表示區分大小寫的不匹配的正則
        # !~* 開頭表示不區分大小寫的不匹配的正則
        # / 通用匹配,任何請求都會被匹配到
        location / {
            #限制IP訪問
            deny 192.168.0.2;
            allow 192.168.0.0/24;
            allow 192.168.1.1;
            deny all;
            #定義服務器的默認網站根目錄位置
            root html;
            #定義首頁索引文件的名稱
            index index.html index.htm;
            #定義後端負載服務器組
            proxy_pass http://nginx.test.com;
        }

        #定義錯誤提示頁面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
        #靜態文件,nginx本身處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/{
            root /var/www/virtual/htdocs;
            #過時時間1天
            expires 1d;
            #關閉媒體文件日誌
            access_log off;
            log_not_found off;
        }
        #設定查看Nginx狀態的地址
        location /NginxStatus {
            #!stub_status on; #無此關鍵字
            access_log off;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
        }
        #禁止訪問的文件.htxxx
        location ~ /\.ht {
            deny all;
        }
    }
    #網站較多的狀況下ngxin又不會請求瓶頸能夠考慮掛多個站點,並把虛擬主機配置單獨放在一個文件內,引入進來
    #include website.conf;
}

對域名的匹配規則

server_name location;      # 匹配本地主機ip;
server_name www.baidu.com; # 精確配置  
server_name *.baidu.com;   # 以通配符開頭的配置  
server_name baidu.*;       # 以通配符結尾的配置  
server_name  ~^(?<user>.+)\.example\.net$;  #正則的配置,必須以波浪線爲開頭

路由對location的匹配規則

  • 貪婪原則:匹配儘量長的路徑;
server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

# /images/匹配到第二個;
  • 通配規則

以=開頭,表示精確匹配; 以^~開頭,表示uri以某個常規字符串開頭,不是正則匹配; 以~開頭,表示區分大小寫的正則匹配; 以~*開頭,表示不區分大小寫的正則匹配; /,表示通用匹配, 若是沒有其它匹配,任何請求都會匹配到;java

  • 注意
# 若是有兩個開頭同樣的路由,有可能匹配不到

如:

location /eeg

location /eegabc

# 上面會形成/eegabc匹配失敗

nginx的日誌設置規則

  • 主要分爲access_log和error_log;
access log : 記錄了哪些用戶,哪些頁面以及用戶瀏覽器、ip和其餘的訪問信息
默認值: access_log logs/access.log combined;  # 表示配置的路徑和格式
配置段: http, server, location, if in location, limit_except

error log : 記錄服務器錯誤日誌
默認值: error_log logs/error.log error;  # 表示配置的路徑和級別,有[debug | info | notice | warn | error | crit | alert | emerg]八個級別;
配置段: main, http, server, location

負載均衡的規則

#設定負載均衡服務器列表
upstream test{
    #後端服務器訪問規則
    #ip_hash;   # 根據ip的hash規則分配,主要是當須要會話保持的時候,session是不能共享的;
    #weight參數表示權重值,權值越高被分配到的概率越大,服務器的運算能力有時不是同樣的;
    #server 10.11.12.116:80 weight=5;
    #PC_Local
    server 10.11.12.116:80 max_fails=3 fail_timeout=30; 
    # max_fails:最多的轉發失敗的次數,若是轉發失敗超過次數,就認爲該服務器掛掉;
    # fail_timeout:請求失敗暫停的服務時間,在這個時間內會暫時放棄轉發給該服務器;
    #PC_Server
    server 10.11.12.112:80 down;  # down:暫時不參與負載均衡;
    server 10.11.12.112:80 backup;  # backup:備用服務器,當其餘全部的機器忙的時候,會啓用備用服務器;
    }

一份比較經常使用的配置文件

# nginx.conf

#user  nobody;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  main;

pid   logs/nginx.pid;

events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}

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

    access_log  logs/access.log  main;
    error_log    logs/http/error.log error;

    client_max_body_size 8m;

    client_header_buffer_size 32k;

    large_client_header_buffers 4 64k;

    sendfile        on;
    tcp_nopush on;
    #tcp_nodelay on;

    keepalive_timeout 60;

    client_header_timeout 10;

    client_body_timeout 10;

    gzip  on;
    gzip_buffers 4 16k;

    server {
        listen       8000;
        server_name  localhost;

        #charset koi8-r;

        access_log  logs/host.access.log  main;
        error_log    logs/server/error.log error;
        # root html/umsapp-ota;

        location / {
            # allow 192.168.0.0;
            #deny all;
            proxy_set_header Host $host;
            proxy_pass   http://192.168.1.22:8000;
        }

        location /static {
            # 配置靜態文件的目錄
            alias /usr/local/web/static/
        }

        #location / {
        #   root   html;
        #  index  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;
        }

    }
}
相關文章
相關標籤/搜索