Nginx配置的一些小功能

前面的文章,已經介紹了Nginx的做用以及Nginx的安裝,本篇文章咱們來看幾個實際的小例子,來對Nginx進一步加深瞭解。javascript

(一)Nginx一些經常使用的配置介紹css

//nginx運行的用戶,通常不要設置成root
user nginx  
//工做進程,一般等於cpu的數量
worker_processes  1;

//全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]
error_log  /var/log/nginx/error.log warn;
//nginx的進程文件
pid        /var/run/nginx.pid;

events {
//#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)
    worker_connections  1024;
}

//設置http通常
http {
   
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    //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  /var/log/nginx/access.log  main;
    //指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件
    sendfile        on;
    #tcp_nopush     on;
    //長鏈接超時時間,單位是秒    
    keepalive_timeout  65;
    //是否開啓壓縮
    #gzip  on;
    //啓動時候加載的配置文件
    include /etc/nginx/conf.d/*.conf;

    //定義一個虛擬主機
    server{
    //監聽的端口號
    listen    8777;
    //域名配置,能夠有多個,空格分開
    server_name  192.168.10.160  www.myhttp.com;
    //設置編碼集
    charset utf-8;

    //資源的請求訪問配置
    location / {
    //定義靜態資源的目錄
        root   /usr/share/nginx/html;
        //定義訪問的html首頁,能夠配置多個,若是不生效,依次訪問後面的
        index  index.html index.htm;
    }
    //錯誤頁面的狀態碼及錯誤的html頁面
    error_page   500 502 503 504  /50x.html;
    //500+相關錯誤的返回定義
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


   }
}

(二)使用Nginx配置一個靜態資源服務html

使用nginx配置靜態資源文件訪問,很是簡單,如第一步裏面的html的首頁訪問,下面是一個網站,css,js,image等相關資源的靜態訪問配置:java

//
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {

      root /root/ ;
      expires     3d;#緩存有效期
      //autoindex on; #打開目錄瀏覽功能
      //autoindex_exact_size on; #人性化方式顯示文件大小不然以byte顯示
     // autoindex_localtime on; #按服務器時間顯示,不然以gmt時間顯示
     allow 192.168.10.100;
     allow 172.29.73.0/24;
     deny all;

     }

上面這一段代碼須要配置server裏面,而後就能夠訪問/root/下面的靜態資源,而且能夠定義相關用戶ip的能夠訪問。nginx

除此以外,咱們還能夠對指定文件夾開啓目錄瀏覽功能,這樣就可以在web頁面上隨便的訪問須要的資源了。git

(三)使用Nginx+Html配置一個能夠代理播放視頻的服務github

使用nginx+html能夠很是方便的搭建一個視頻播放服務,這裏面默認的nginx是支持mp4類型的視頻播放的,可是若是有其餘格式如flv則須要相關的js支持才能夠。web

location ~ ^/(videos)/  {
      root /root/ ;
      autoindex on; #打開目錄瀏覽功能
      mp4;
      mp4_buffer_size       1m;
      mp4_max_buffer_size   5m;
      limit_rate        260k;
      limit_rate_after  3m;
      autoindex_exact_size off;
      autoindex_localtime off;

     }

html代碼以下:後端

<!DOCTYPE html>
<html>
<head>
<title> play vedio</title>
   //js插件vedio
 <link href="http://vjs.zencdn.net/5.0.2/video-js.css" rel="stylesheet">
    <script src="http://vjs.zencdn.net/ie8/1.1.0/videojs-ie8.min.js"></script>
    <script src="http://vjs.zencdn.net/5.0.2/video.js"></script>
</head>
<body>
   //mp4的播放        
   <video src="videos/a.mp4" controls="controls" width="500" height="400"></video>
   //flv的播放
  <video id="example_video_1" class="video-js vjs-default-skin" 
  controls preload="none" width="640" height="400" 
  poster="http://vjs.zencdn.net/v/oceans.png" data-setup="{}">
    <source src="videos/c.flv" type="video/flv">
  </video>



</body>
</html>

上面用到了video.js來支持flv視頻格式的播放.緩存

(四)使用Nginx配置反向代理+負載均衡

最後這一個功能,應該是實際開發中最多見的場景了,先來看一個簡單的代理轉發, 假如如今咱們有一個tomcat服務,端口號是8888,部署ip是192.168.10.161,而 nginx的ip是192.168.10.160,那麼如何作到經過nginx轉發請求到tomcat的機器上呢?

簡單的代理轉發:

server{
    //監聽端口80
    listen 80;
    //域名
    server_name 192.168.10.160;
    location / {
        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;
        proxy_pass http://192.168.10.161:8888/web/index;
    }
    //記錄應用的log
    access_log  /var/log/nginx/my_proxy.log;

經過上面的配置,當用戶訪問http://192.168.10.160時,就會自動跳轉到http://192.168.10.161:8888/web/index這個tomcat的後端服務上面。

下面問題來了,一臺tomcat已經扛不住當前的流量請求了,咱們須要再部署一臺tomcat來作負載均衡,假設ip是192.168.10.162,那麼如何用Nginx來負載均衡的轉發呢?

http{
 
   upstream  my_service {
        server    192.168.10.161:8888  
        server    192.168.10.162:8888 
    }
    
    
    server {
     listen       80;
     server_name  www.backend.com;
    
     location / {
    
     proxy_pass http://my_service;
    // 後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
     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;
    
      }  
    
    
    }
    
}

如上就完成了一個負載均衡的例子,固然負載均衡的策略有不少包括:

(1)輪詢

(2)權重

(3)最少鏈接數

(4)最少處理時間

(5)ip_hash

(6)fair

等等,github上有不少的擴展插件,剛興趣的同窗能夠本身嘗試下。

相關文章
相關標籤/搜索