Windows下nginx+tomcat实现简单的负载均衡、动静分离等
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。客户端不需要任何配置就可以访问。反向代理是感知不到的。
正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。正向代理可以感知。
nginx支持配置反向代理,通过反向代理实现网站的负载均衡。
一、nginx的下载
官网:http://nginx.org/en/download.html
下载里面的最新稳定版 Stable version nginx/Windows-1.14.1
下载下来是个压缩包nginx-1.14.1.zip,解压如下
确保默认80端口没被使用,双击nginx.exe,在浏览器地址栏输入localhost,可看到如下界面
二、nginx的常用命令(在cmd命令行下定位到nginx目录)
start nginx 开启nginx nginx -v 显示 nginx 的版本。 nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。 nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。 nginx -s reload 修改Nginx配置信息后,不需要关闭nginx后重新启动nginx,可让改动生效。 nginx -s reopen 重新打开日志文件。 nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。 nginx -t 不运行,仅测试配置文件。nginx 将检查配置文件的语法正确性,并尝试打开配置文件中所引用到的文件。
三、简单实现负载均衡
1、准备两个tomcat,本次测试用apache-tomcat-9.0.0.M15,复印一份,分别重命名为apache-tomcat-9.0.0.M15-1、apache-tomcat-9.0.0.M15-2
2、修改这两个tomcat的各3个端口,其中第一个tomcat的启动端口为10001,第2个tomcat的启动端口为10002,打开tomcat的conf目录下的server.xml,修改如下:
apache-tomcat-9.0.0.M15-1
<Server port="10011" shutdown="SHUTDOWN"> (原来是8005) <Connector port="10001" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> (原来是8080) <Connector port="10021" protocol="AJP/1.3" redirectPort="8443" /> (原来是8009)
apache-tomcat-9.0.0.M15-2
<Server port="10012" shutdown="SHUTDOWN"> (原来是8005) <Connector port="10002" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> (原来是8080) <Connector port="10023" protocol="AJP/1.3" redirectPort="8443" /> (原来是8009)
为了下面nginx区分访问的是哪一个tomcat,修改上面两个tomcat的默认页面webapps\ROOT\index.jsp,简单加个标识,
访问http://localhost:10001,标识“Apache Tomcat/9.0.0.M15 ------tomcat1”,如下
访问http://localhost:10002,标识“Apache Tomcat/9.0.0.M15 ------tomcat2”,如下
3、修改nginx配置文件
D:\javatool\nginx-1.14.1\conf\nginx.conf
因为我本机的80端口被占用了,所以修改nginx的端口为10000,详细见下图:
4、启动nginx
在命令行下start nginx后,一个窗口一闪而过,可以在cmd命令窗口输入命令 tasklist /fi "imagename eq nginx.exe" ,出现如下结果说明启动成功
5、浏览器访问http://localhost:10000
可看到访问的是http://localhost:10001或http://localhost:10002,
手工刷新,可看到两者的访问比例是1:2,就是上面nginx.conf配置的weight值1和2。
-------------------------------------------------------------------------------------------------------------
附:
Nginx负载均衡的upstream目前支持以下几种方式的分配
#1、轮询(默认)
#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream linuxidc { server 10.0.0.10; server 10.0.0.11; }
#2、weight
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream linuxidc{ server 10.0.0.10 weight=5; server 10.0.0.11 weight=10; }
#2、ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
但是存在一个问题:假如访问的tomcat挂了,那nginx的故障转移机制将会分发给另一个tomcat服务器,这样一来所有请求这个tomcat的所有用户session会失效,需要重新登陆。
upstream favresin{ ip_hash; server 10.0.0.10:8080; server 10.0.0.11:8080; }
#3、fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream favresin{ server 10.0.0.10:8080; server 10.0.0.11:8080; fair; }
#4、url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream还能够为每一个设备设置状态值,这些状态值的含义分别例如以下:
down 表示单前的server临时不參与负载。
weight 默觉得1.weight越大,负载的权重就越大。
max_fails :同意请求失败的次数默觉得1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
fail_timeout : max_fails次失败后。暂停的时间。
backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060; server 10.0.0.11:7070 backup; }
四、实现动态和静态分离、绑定域名的配置
nginx.conf的配置如下
server { listen 80; #端口号 server_name xxx.com; #域名 #charset koi8-r; #access_log logs/host.access.log main; location ~ .*\.(jpg|png|gif|jpeg|css|html|swf)$ {#针对这些扩展名生效 root D:/deploy/static/; #静态资源的路径 } location /js/ { #针对路径/js/生效 root D:/deploy/static/; #静态资源的路径 } location / { proxy_pass http://localhost:8080; #tomcat的地址 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; } #...其它省略... }
五、nginx集群Tomcat,nginx采用轮询方式的Session共享解决
多个Tomcat,可以使用Tomcat内置的Session复制方案。
1、多个Tomcat的相关端口号配置不一样;
参考:https://www.cnblogs.com/gdjlc/p/7026052.html
2、打开tomcat目录下conf/server.xml,找到下面配置,默认是注释的,取消注释
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
3、打开项目的web.xml(不是tomcat/conf/web.xml),增加<distributable/>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!--这里是其它配置,略--> <distributable/> </web-app>
4、nginx.conf的配置
upstream local_tomcat{ server localhost:8080; server localhost:8090; } server { listen 80; #端口号 server_name xxx.com; #域名 #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://local_tomcat; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; } #其它略...... }
相关文章
- Windows核心编程 第五章 作业(下)
- Windows核心编程 第四章 进程(中)
- Windows Server 2012R2 路由和网桥设置
- solr7.4 tomcat环境下搭建(windows)
- C# 编写Windows Service(windows服务程序)
- windows驱动程序
- tomcat做成windows服务之后使用JMX监控的问题
- docker for windows--Windows 10 家庭中文版安装kali并配置更新源
- docker for windows--Windows 10 家庭中文版安装clickhouse 22.3版本及配置
- Windows让Tomcat以Apr的方式运行
- Java Tomcat 注册为Windows系统服务
- Windows下面startup.bat启动Tomcat偶发死锁问题
- Windows安装Tomcat失败:Failed installing tomcat7 service
- Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口
- 微软CEO:Windows Phone份额虽低但不可或缺
- (windows)局域网内无法访问FTP服务器的解决方法
- 英国皇家海军潜艇系统曝光:Windows XP潜艇版
- Windows 10 Build 15048 ISO镜像下载:无限接近正式版
- 微软好绝情:Windows 7再无重大更新!
- Windows XP 连接windows 7 远程桌面 软件
- Windows系统完全卸载删除 Node.js
- 如何绕过Windows Server 2008 R2上的身份验证
- C/C++ Windows API——获取计算机信息