反向代理实现Nginx-tomcat动静分离

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;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容