前面的文章,已经介绍了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上有不少的扩展插件,刚兴趣的同窗能够本身尝试下。