nginx实现后端tomcat的负载均衡调度

在这里插入图片描述

1. Nginx编译安装

参见:
https://blog.csdn.net/qq_29974229/article/details/121266195

2. Tomcat 和JDK编译安装

参见:
https://blog.csdn.net/qq_29974229/article/details/121494218

3. Nginx配置

/apps/nginx/conf/nginx.conf

worker_processes  2;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream webserver {
        server 192.168.31.18:8080;
        server 192.168.31.28:8080;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://webserver;
        }
    }
}

3.2 启动Nginx

nginx -t
nginx

4. 测试

4.1 测试后端服务器页面

其实这步还是很关键的,首先要保证后端服务器是可以被正常访问的,再去配置和测试负载均衡.很多新手都会直接去测负载均衡,一旦出错,错误原因调查起来就会很复杂.
在这里插入图片描述

4.2 通过Nginx代理

在这里插入图片描述

4.3 使用windows浏览器测试

在这里插入图片描述
在这里插入图片描述

5. 报错

今天配置的时候又碰到了个报错.
报错内容如下:

类型 异常报告

消息 The character [_] is never valid in a domain name.

描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

例外情况

java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
	org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:994)
	org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:890)
	org.apache.tomcat.util.http.parser.Host.parse(Host.java:66)
	org.apache.tomcat.util.http.parser.Host.parse(Host.java:40)
	org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:303)
	org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:1049)
	org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:601)
	org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831)
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1650)
	org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.lang.Thread.run(Thread.java:748)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看

在这里插入图片描述

5.1 造成错误的原因

在配置upstream时,名称带了下划线( _ ) 导致了The character [_] is never valid in a domain name.的报错
配置如下:
在这里插入图片描述

5.2 解决问题

导致报错的原因既然知道了,那么解决也是很简单的,就是去掉_或者用-代替
个人建议去直接去掉.
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_29974229/article/details/121496167