jjzjj

ngnix+tomcat转发、负载均衡

folyh 2023-04-15 原文

@

目录


前言

使用ngnix转发所有服务的网址到各个服务器,然后在各个服务器同时部署多个服务。

一、流程及图

1.简易流程图如下

一、nginx服务器配置:

1.下载并安装nginx

1.1 将下载好的nginx包传到服务器/usr/local/目录下


# cd /usr/local

// -y表示遇到判断全部yes,autoconf表示自动配置,automake表示自动编译。
# yum -y install gcc gcc-c++ autoconf automake  //gcc、gcc-c++的库文件
# yum install -y pcre pcre-devel         //安装Nginx依赖包
# yum install -y zlib zlib-devel

# tar -zxvf nginx-1.10.2.tar.gz         //解压缩
# cd nginx-1.10.2                //切换到该目录下
# ./configure                  //配置
# make
# make install                 //安装

// 检验是否完成安装
# cd /usr/local
# ls                      //如果存在nginx文件夹,则安装成功

// 注意:最后结束前不要去改解压后的nginx文件,否则安装不成功

2.nginx配置


#设置低权限用户,为了安全而设置的
#user  nobody;
#工作衍生进程数
worker_processes  10;

#设置错误文件存放路径
# error_log  logs/error.log;
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;

#设置pid存放路径(pid是控制系统中重要文件)
pid  logs/nginx.pid;

#设置最大连接数
events {
    worker_connections  102400;
}


http {
	#文件扩展名与文件类型映射表
    include       mime.types;
	map $time_iso8601 $logdate {
    '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
    default    'date-not-found';
	}
	
	#默认文件类型
    default_type  application/octet-stream;
	limit_req_zone $binary_remote_addr zone=qps1:1m  rate=800r/s;
	
 	#用来设置日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
       '"$upstream_addr" "$request_time" "$upstream_response_time"';
	access_log off;
	
	#用来指定日志文件的存放路径
    # access_log  logs/access-$logdate.log;  
	# error_log  logs/error-$logdate.log;
	
	
  	#开启高效文件传输模式
    sendfile            on;
    
    #防止网络阻塞
    tcp_nopush      	on;
	underscores_in_headers on;

    #长连接超时时间,单位是秒
    keepalive_timeout  120;
    
	#(配置请求体缓存区大小) 
	client_max_body_size 50M; 
	
	#(设置客户端请求体最大值)
	#client_body_buffer_size 128k; 
	#fastcgi_intercept_errors on;
	
	#开启gzip压缩,开启后,访问网页会自动压缩
    #gzip  on;
    
    #主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用额代理服务器,默认负载均衡方式为轮询
	upstream mysvr {
	  #设置同一个cookie的两次/多次请求,请求的是同一台服务器
	  #ip_hash;
	 
	  #1.down 表示单前的server暂时不参与负载
      #server 192.168.1.116  down;
      
      #3.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
      #server 192.168.2.21  backup; 
      
      #weigth参数表示权值,权值越高被分配到的几率越大,weight 默认为1.weight越大,负载的权重就越大。     
	  #max_fails 配置的是熔断机制失败次数,即当访问一个服务器的时候,出现三次失败,就发生熔断
	  #fail_timeout 熔断时间,当服务器熔断超过10s后,nginx会重新尝试连接熔断的服务器
	  server 192.168.2.21:7798  weight=3 max_fails=6 fail_timeout=60;   # 服务1
	  server 192.168.2.21:7798  weight=2 max_fails=6 fail_timeout=60;   # 服务2
	  server 192.168.2.22:7798  weight=2 max_fails=6 fail_timeout=60;   # 服务3	  
    }
    
    
    #指定服务器的名称和参数
    server {
        listen       80;
        server_name  www.aaa.com;
		
		#proxy_connect_timeout    600;
		#proxy_read_timeout       600;
		#proxy_send_timeout       600;
		
		#设置字符
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
		
		location /ams.cloud/report/getError.do {
			return 200 '{code: "-1", message: "系统错误",success : false}';
		}
		
		#location / 指用根目录做负载均衡
		location / {
			#设置代理
			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://127.0.0.1:8898;
			#proxy_buffering off;
        }
		
		location /ams.api {
			
			#set $version $http_version;
			# 强制版本升级
		    #if ( $version != "2.0" ) {
			#	return 200 '{code: "-1", message: "版本过低请升级",success : false}';
		    #}
			
			limit_req zone=qps1 burst=6000;
			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://mysvr;
        }
		
		
		location /CLodopfuncs.js {
			proxy_pass http://localhost:8000/CLodopfuncs.js;
		}
		
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 }

二、服务器1、2、3配置(以一台讲解)

1.jdk安装与配置

2.tomcat

1.tomcat安装

2.tomcat配置

1.1 server.xml
<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />


  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>


  <Service name="Catalina">
    <Connector 
	  port="8898" protocol="org.apache.coyote.http11.Http11AprProtocol"
      connectionTimeout="5000"
      minSpareThreads="20"
      maxThreads="2048"
      maxSpareThreads="2048"
      acceptCount="2048"
      minProcessors="20"
      maxProcessors="2048"
      enableLookups="false"
      maxHttpHeaderSize ="102400"
	  maxPostSize="83886080"
      redirectPort="8443" />
	  

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

1.2 web.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1">
  
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>


    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>


    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

随心所往,看见未来。Follow your heart,see night!

欢迎点赞、关注、留言,一起学习、交流!

有关ngnix+tomcat转发、负载均衡的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. ruby-on-rails - EC2 实例在负载均衡器中停止服务 - 2

    我有一个EC2实例正在运行。我有一个负载均衡器,它与EC2实例相关联。PingTarget:HTTP:3001/healthCheckTimeout:5secondsInterval:24secondsUnhealthythreshold:2Healthythreshold:10现在该实例显示为OutofService。我什至尝试更改监听端口等等。一切正常,直到重新启动我的EC2实例。任何帮助将不胜感激。仅供引用:我有一个在端口3001上运行的Rails应用程序,我有一个用于HTTP:80(loadbalancer)到HTTP:3001的监听器。我还在终端中通过ssh检查了正在运行的应

  3. ruby-on-rails - 负载测试期间 Unicorn CPU 使用率激增,优化方法 - 2

    我对为我的RubyonRails3.1.3应用优化我的Unicorn设置的方法很感兴趣。我目前正在高CPU超大实例上生成14个工作进程,因为我的应用程序在负载测试期间似乎受CPU限制。在模拟负载测试中,每秒大约20个请求重放请求,我的实例上的所有8个内核都达到峰值,盒子负载飙升至7-8个。每个unicorn实例使用大约56-60%的CPU。我很好奇可以通过哪些方式对其进行优化?我希望能够每秒将更多请求汇集到这种大小的实例上。内存和所有其他I/O一样完全正常。在我的测试过程中,CPU越来越低。 最佳答案 如果您受CPU限制,您希望使用

  4. ruby - Openshift 端口转发 - 2

    关于它的话题已经很多了。但是我卡住了我成功配置了ssh!现在我想为与TOAD的连接配置端口转发。我用过这个图:https://blog.openshift.com/getting-started-with-port-forwarding-on-openshift/现在当我尝试rhcport-forward-aphp我收到此错误无法解析PKey:没有起始行我创立了这个:http://blog.skypayjm.com/2015/02/accessing-remote-openshifts-database.html我尝试降级ssh,但没有任何改变。有人知道我做错了什么吗?此致,布莱希特

  5. Ruby:跨进程转发接收者、参数和 block - 2

    给定这样的代码:p=procdo|*args,&block|pselfpargspblock[]ifblockendq=procdo|*args,&block|p'before'instance_exec(*args,&p)endo=Object.newo.define_singleton_method(:my_meth,q)o.my_meth(1,2){3}如何在保留q的接收者的同时将调用从p完全转发到q?基本上我也想打印3,但是instance_exec和所有ruby​​方法一样,只能占用一个block。是否可以在不更改p的情况下,让我可以互换使用p和q(我的想法是让q有时包装p)

  6. ruby - 解析 100mb JSON 负载的有效方法 - 2

    我每12小时在我的亚马逊EC2微型实例上运行一次cron作业。它下载118MB的文件并使用json库解析它。这当然会使实例内存不足。我的实例有416MB的可用内存,但随后我运行脚本,它下降到6MB,然后被操作系统杀死。我想知道我在这里有什么选择?是否可以通过Ruby有效地解析它,或者我是否必须下降到像C这样的低级东西?我可以获得一个功能更强大的亚马逊实例,但我真的很想知道是否可以通过Ruby做到这一点。更新:我看过yajl。它可以在解析时为您提供json对象,但问题是,如果您的JSON文件仅包含1个根对象,那么它将被迫解析所有文件。我的JSON看起来像这样:--Root-Obj1-Ob

  7. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  8. ruby - 无法使用 Vagrant 转发端口访问主机上的 Sinatra 应用程序 - 2

    在使用rubyapp.rb和foremanstart启动我的Sinatra应用程序后,我无法使用localhost和主机上的相应端口访问我的应用程序。我还能够从客户机的shell中curl到应用程序,而在主机上curl请求失败。据我所知,guest计算机上不应该安装防火墙,因为我使用的是VagrantUbuntu镜像。我的Vagrantfile如下:Vagrant.configure('2')do|config|config.vm.box='precise32'config.vm.box_url='http://files.vagrantup.com/precise32.box'con

  9. ruby-on-rails - 将 JRuby on Rails 应用程序部署到 Tomcat 的最佳方法是什么? - 2

    我正在寻找将RubyonRails应用程序(在JRuby上运行)部署到Tomcat实例以进行测试的方法。tomcat实例在我可以通过SSH访问的Solaris服务器上运行。我看过使用Capistrano,但似乎没有太多关于使用它部署到Tomcat,甚至关于在JRuby下运行它的信息,而且由于Windows/JRuby环境,我一直在Capistrano中遇到错误我的PC正在运行(是的,它是公司的-不是我的选择,但我必须忍受它)。我正在使用warble来构建.war文件,一旦我手动复制并部署应用程序,它就会部署并运行良好。我想要一些更简单、更自动化的东西来真正实现它。有人做过吗?Web上的

  10. Nginx的6种负载均衡策略 - 2

    Nginx的6种负载均衡策略【轮询/加权轮询weight/ip_hash/least_conn/urlhash/fair】总结:nginx负载均衡策略1、轮询策略轮询策略其实是一个特殊的加权策略,不同的是,服务器组中的各个服务器的权重都是1upstreambackend{server192.168.136.136weight=1;server192.168.136.136:81weight=1;server192.168.136.136:82weight=1;server192.168.136.136:83weight=1;}server{listen80;server_namelocalho

随机推荐