Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。
动静分离从目前实现角度来讲大致分为两种,一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。通过location指定不同的后缀名实现不同的请求转发。
Nginx的相关知识
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件
/var/log/nginx:存放日志
$sudo/etc/init.d/nginx start
location匹配规则:
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
其中最核心的就是"proxy_pass http://localhost:8080;"这条配置,它将匹配到的请求都转发给Tomcat去处理。
其他的配置:
[if !supportLists]· [endif]proxy_set_header Host $host; 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP。
[if !supportLists]· [endif]client_max_body_size 10m; 允许客户端请求的最大单文件字节数。
[if !supportLists]· [endif]client_body_buffer_size 128k; 缓冲区代理缓冲用户端请求的最大字节数。
[if !supportLists]· [endif]proxy_connect_timeout 90; Nginx跟后端服务器连接超时时间。
[if !supportLists]· [endif]proxy_read_timeout 90; 连接成功后,后端服务器响应时间。
[if !supportLists]· [endif]proxy_buffer_size 4k; 设置代理服务器保存用户头信息的缓冲区大小。
[if !supportLists]· [endif]proxy_buffers 6 32k; proxy_buffers缓冲区。
[if !supportLists]· [endif]proxy_busy_buffers_size 64k; 高负荷下缓冲大小。
[if !supportLists]· [endif]proxy_temp_file_write_size 64k; 设定缓存文件夹大小。
Nginx配置文件server配置如下:
server {
listen 9999;
server_name localhost;
location /{
#可以用proxy_pass 转发到负载均衡或者某个http://
root html;
index heyjia.html index.html;
}
location ~.*\.(html|htm|gif|jpg|jpeg|png|bmp|ico|txt|css|js)
{
#匹配到此格式的,到static文件夹找图片
root /data/webapps/static;
}
location ~.*\.(jsp|php|cgi|sgtml|do){
#匹配到这些格,转发到tomcat服务器上
proxy_passhttp://localhost:8080;
}
}
如果要使用动态均衡,,转发到相关的负载均衡名即,配置如下
upstream tdt_app
{
server ip:8080 weight=1 max_fails=2fail_timeout=30s;
server ip:8081 weight=1 max_fails=2fail_timeout=30s;
}