Nginx配置的一些小功能

时间:2022-08-24 18:16:09

前面的文章,已经介绍了Nginx的作用以及Nginx的安装,本篇文章我们来看几个实际的小例子,来对Nginx进一步加深了解。

(一)Nginx一些常用的配置介绍

//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配置一个静态资源服务

使用nginx配置静态资源文件访问,非常简单,如第一步里面的html的首页访问,下面是一个网站,css,js,image等相关资源的静态访问配置:

//
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的可以访问。

除此之外,我们还可以对指定文件夹开启目录浏览功能,这样就能够在web页面上随便的访问需要的资源了。

(三)使用Nginx+Html配置一个可以代理播放视频的服务

使用nginx+html可以非常方便的搭建一个视频播放服务,这里面默认的nginx是支持mp4类型的视频播放的,但是如果有其他格式如flv则需要相关的js支持才可以。

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上有很多的扩展插件,刚兴趣的同学可以自己尝试下。