前面的文章,已經介紹了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上有不少的擴展插件,剛興趣的同窗能夠本身嘗試下。