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 解决问题
导致报错的原因既然知道了,那么解决也是很简单的,就是去掉_或者用-代替
个人建议去直接去掉.