热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx和tomcat配置负载均衡过程记录

目标:nginx做为静态文件服务器,tomcat做为动态文件服务器;同时nginx做为反向代理,把动态文件请求转发给后台tomcat集群;nginx与tomcat安装不再说明。1.配置静态文件服务把web应用的图片、html、js、css、swf等静态文件拷贝到nginx的documentro
目标:nginx做为静态文件服务器,tomcat做为动态文件服务器;同时nginx做为反向代理,把动态文件请求转发给后台tomcat集群; nginx 与 tomcat 安装不再说明。

1.配置静态文件服务
    把web应用的 图片、html、js、css、swf 等静态文件拷贝到nginx的 document root 目录下,在下面的例子中该目录为“/home/opsadmin/html”;
    nginx.conf文件配置如下:
=======================================================================
    location / {
        index  index.html index.htm;
        root /home/opsadmin/html;
    }
=======================================================================
    上面的配置写在 server 环境下,server中的其它内容此处省略。
    重启nginx测试配置是否成功。

2.配置静态文件的缓存时间
    nginx.conf文件配置如下:
=======================================================================
     location ~* \.(jpg|gif|png|bmp|swf)$ {
         expires  10d;
     }
     location ~* \.(js|css)$ {
         expires  1d;
     }
=======================================================================
    ~ 表示使用正则表达式匹配,*表示不区分大小写

3.反向代理配置
=======================================================================
    #允许客户端请求的最大单个文件字节数
    client_max_body_size        10m;
    #缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
    client_body_buffer_size        128k;
    #跟后端服务器连接的超时时间发起握手等候响应超时时间
    proxy_connect_timeout        90;
    #连接成功后等候后端服务器响应时间其实已经进入后端的排队之中等候处理
    proxy_send_timeout        90;
    #后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有的数据
    proxy_read_timeout        90;
    #代理请求缓存区一这个缓存区间会保存用户的头信息以供Nginx进行规则处理-一般只要能保存下头信息即可
    proxy_buffer_size        4k;
    #同上告诉Nginx保存单个用的几个Buffer最大用多大空间
    proxy_buffers            4 32k;
    #如果系统很忙的时候可以申请更大的proxy buffers官方推荐*2
    proxy_busy_buffers_size        64k;
    #proxy缓存临时文件的大小
    proxy_temp_file_write_size    64k;
    upstream server1 {
        server 192.168.1.105:8080;
    }
    server{
        location  ~ \.do$ {
            index index.do;
proxy_pass  http://server1;
        }
    }
=======================================================================
    上面的配置是写在 http 环境。
    注意 upstream 项,nginx可配置多个反向代理,在proxy_pass属性中使用反向代理配置;在上例中  “proxy_pass http://server1” 的server1即为 upstream 配置的server1;
 这里后台tomcat只有一个(192.168.1.105:8080),可以配置多个,反向代理的其它配置这里不再介绍。
4.把动态文件请求转发到tomcat
    即上例中的  location ~ \.do$ {} 配置;
    这里后台tomcat中部署的应用使用了spring开发,请求都是.do结尾;可以根据需要修把上例改成 \.action 或 \.jsp 等。
完成上述配置后,目标就已经初步完成了,还剩下一些细节调整,由于每个人的程序都不一样,需要根据自己的情况进行调整,下面给出一些常用配置:
1.java程序获取客户端真实IP:
用户的请求数据通过nginx转发后,使用request.getRemoteAddr()只能获取nginx的IP地址,需要在nginx.conf中增加以下配置
========================================================================
        proxy_set_header  Host  $host;
        proxy_set_header X-Real-IP  $remote_addr;
========================================================================
    Host为用户访问的域名,X-Real-IP 为用户的真实IP,上面的配置可以写在 http、server、location 环境中。
    然后在java代码中,使用request.getHeader("Host")就可以获取域名,request.getHeader("X-Real-IP")可以获取用户真实IP。
2.jsession后缀处理
    当jsp中使用标签时,会自动增加;jsession=..的URL后缀,如果不进行处理,linux环境下nginx会把后缀当成文件名的一部分,导致找不要需要的文件(windows下没测试过);
    增加配置如下:
========================================================================
        rewrite ^(.*)\;jsessiOnid=(.*)$  $1   break;
========================================================================
    可写在server、location环境下,该配置的作用为删除 ;jsessiOnid=.. 的URL后缀
3.目录名自动增加 / 与 java代码控制浏览器跳转
有时会有这一种应用场景,用户通过一个url请求一个目录,tomcat会把该目录的welcome-page返回给用户(如:index.jsp),在index.jsp中正好有 response.sendRedirect("test.do") 这种控制浏览器跳转的代码;
    此时用户请求目录名时(假设为http://server1/test) 就会请求到 http://server1/test/index.jsp 然后浏览器就会跳转到 http://192.168.1.105:8080/test/test.do。
    因为该跳转语句 response.sendRedirect("pc.do") 是由tomcat处理,所以只会返回tomcat中的文件。
    一般情况,这样的跳转在项目中要尽量少地出现,对该情况做特殊处理即可,先说目录名自动增加 / :
========================================================================
        if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
        }
========================================================================
    上述配置可写在 server环境 中。
    然后再增加配置:
========================================================================
        location = /test/ {
proxy_pass  http://server1/test/test.do;
        }
========================================================================
    当nginx接收到 /test 的请求后,直接转发给目标URL,不再让tomcat控制用户浏览器跳转;
4.gzip压缩
    使用gzip对 txt、html、css、js 等文本进行压缩;nignx默认对html格式压缩。
========================================================================
gzip                on;
#    gzip_min_length     1000;
gzip_types          text/plain application/xml text/Javascript text/css application/x-Javascript application/Javascript;
#    gzip_disable        msie6;
    gzip_comp_level     5;
========================================================================
    需要写在 http 环境下。

    这里只说明一下 gzip_types属性,其它的属性不再做过多说明。
    对于js文件,应该是 text/Javascript 格式,但是本人配置后不起作用。。
    使用 Fiddler 分析后,发现js文件还可以是 application/x-Javascript 、 application/javascrip ,增加这两项后实现对js文件的压缩传输。
推荐阅读
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细探讨了Spring框架中遇到的NoSuchBeanDefinitionException异常,具体涉及com.thinkplatform.dao.UserLogDao Bean未定义的问题,并提供了相应的解决方案。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • Bootstrap 插件使用指南
    本文详细介绍了如何在 Web 前端开发中使用 Bootstrap 插件,包括自动触发插件的方法、插件的引用方式以及具体的实例。 ... [详细]
author-avatar
shadowsuyan3
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有