nginx反向代理tomcat

代理服务可简单的分为正向代理和反向代理:

1. 正向代理: 用于代理内部网络对 Internet 的连接请求(VPN/NAT),客户端指定代理服务器,
将本来要直接发送给目标 Web 服务器的 HTTP 请求先发送到代理服务器上, 然后由代理服务
器去访问 Web 服务器, 并将 Web 服务器的 Response 回传给客户端:(别人给我提个服务)
2. 反向代理: 与正向代理相反,如果局域网向 Internet 提供资源,并让 Internet 上的其他用户可以
访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服
务器接受来自 Internet 的连接,然后将请求转发给内部网络上的服务器,并将 Response 回传给
Internet 上请求连接的客户端:(我给别人提供服务)
一、 nginx 反向代理: Web 服务器的调度器
1、 反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端的连接请求,然后将请
求转发给网络上的 web 服务器(可能是 apachenginxtomcatiis 等),并将从 web 服务
器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个服务器。

从上图可以看出:反向代理服务器代理网站 Web 服务器接收 Http 请求,对请求进行转发。
而且 nginx作为反向代理服务器可以根据用户请求的内容把请求转发给后端不同的 web服务
器,例如静动分离,再例如在 nginx 上创建多个虚拟主机, 这样就成功的做到了在浏览器中
输入不同域名(url) 的时候访问后端的不同 web 服务器或 web 群集。

2反向代理的作用
保护网站安全: 任何来自 Internet 的请求都必须先经过代理服务器

通过配置缓存功能加速 Web 请求: 可以缓存真实 Web 服务器上的某些静态资源,减轻真
Web 服务器的负载压力;

实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

二、nginx
1nginx 简介
Nginx 是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。因它的稳定性、
丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 Nginx(发音同 engine x),它是
由俄罗斯程序员 Igor Sysoev 所开发的。起初是供俄国大型的门户网站及搜索引擎 Rambler
(俄语:Рамблер)使用。此软件 BSD-like 协议下发行,可以在 UNIXGNU/Linux
BSDMac OS XSolaris,以及 Microsoft Windows 等操作系统中运行。
Nginx 的应用现状
Nginx 已经在俄罗斯最大的门户网站── Rambler Mediawww.rambler.ru)上运行,同时俄
罗斯超过 20%的虚拟主机平台采用 Nginx 作为反向代理服务器。
在国内,已经有 淘宝、新浪博客、新浪播客、网易新闻、六间房、 56.comDiscuz!、水木
社区、豆瓣、 YUPOO、海内、迅雷在线 等多家网站使用 Nginx 作为 Web 服务器或反向代
理服务器。
2Nginx 的核心特点
1) 跨平台: Nginx 可以在大多数 OS 编译运行,而且也有 Windows 的版本;
2) 配置异常简单: 非常容易上手。
3非阻塞、高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 23
万并发连接数。(这得益于 Nginx 使用了最新的 epoll 模型);
注:
对于一个 Web 服务器来说,首先看一个请求的基本过程:建立连接—接收数据—发送数据,
在系统底层看来 :上述过程(建立连接—接收数据—发送数据)在系统底层就是读写事件。
如果采用阻塞调用的方式,当读写事件没有准备好时,那么就只能等待,当前线程被挂起,
等事件准备好了,才能进行读写事件。
如果采用非阻塞调用的方式:事件马上返回,告诉你事件还没准备好呢,过会再来吧。过一
会,再来检查一下事件,直到事件准备好了为止,在这期间,你就可以先去做其它事情,然
后再来看看事件好了没。虽然不阻塞了,但你得不时地过来检查一下事件的状态,你可以做
更多的事情了,但带来的开销也是不小的。 非阻塞调用指在不能立刻得到结果之前,该调用
不会阻塞当前线程
4) 事件驱动: 通信机制采用 epoll 模型,支持更大的并发连接
非阻塞通过不断检查事件的状态来判断是否进行读写操作,这样带来的开销很大,因此就有
异步非阻塞的事件处理机制。这种机制让你可以同时监控多个事件,调用他们是非阻塞的,
但可以设置超时时间,在超时时间之内,如果有事件准备好了,就返回。这种机制解决了上
面阻塞调用与非阻塞调用的两个问题。
epoll 模型为例:当事件没有准备好时,就放入 epoll(队列)里面。如果有事件准备好了,
那么就去处理;当事件没有准备好时,才在 epoll 里面等着。这样,我们就可以并发处理大
量的并发了,当然,这里的并发请求,是指未处理完的请求。 线程只有一个,所以同时能处
理的请求当然只有一个了,只是在请求之间进行不断地切换而已,切换也是因为异步事件未
准备好,而主动让出的。这里的切换是没有任何代价,你可以理解为循环处理多个准备好的
事件。
多线程方式相比,这种事件处理方式是有很大的优势的, 不需要创建线程,每个请求占用的
内存也很少, 没有上下文切换, 事件处理非常的轻量级,并发数再多也不会导致无谓的资
源浪费(上下文切换)。对于 apache 服务器,每个请求会独占一个工作线程,当并发数上到
几千时,就同时有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战:因为线
程带来的内存占用非常大,线程的上下文切换带来的 cpu 开销很大,自然性能就上不 去,
从而导致在高并发场景下性能下降严重。
总结: 通过异步非阻塞的事件处理机制, Nginx 实现由进程循环处理多个准备好的事件,从
而实现高并发和轻量级。
5Master/Worker 结构:一个 master 进程,生成一个或多个 worker 进程。

注: Master-Worker 设计模式主要包含两个主要组件 Master WorkerMaster 维护着 Worker
队列, 将请求下发到多个 Worker 并行执行, Worker 主要进行实际逻辑计算,并将结果返回
Master
nginx 采用这种进程模型有什么好处?采用独立的进程,可以让互相之间不会影响,一个进
程退出后,其它进程还在工作,服务不会中断, Master 进程则很快重新启动新的 Worker

进程。当然, Worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 Worker
上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
6) 内存消耗小: 处理大并发的请求内存消耗非常小。在 3 万并发连接下,开启的 10
Nginx 进程才消耗 150M 内存(15M*10=150M)。
7) 内置的健康检查功能: 如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响
前端访问。
8) 节省带宽: 支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
9) 稳定性高: 用于反向代理,宕机的概率微乎其微。
三、 Nginx+apache 构筑 Web 服务器集群的负载均衡

nginx 配置反向代理
配置 nginx 作为反向代理和负载均衡,同时利用其缓存功能,将静态页面在 nginx 缓存,以
达到降低后端服务器连接数的目的并检查后端 web 服务器的健康状况。

nginx配置反向代理示例

环境:

nginx1:192.168.157.10

tomcat1:192.168.157.10

tomcat2:192.168.157.10

服务都在一台服务器上了,tomcat是两个独立的程序,tomcat如果装在一台要配置tomcat环境变量才可以启动

安装 zlib-develpcre-devel 等依赖包

yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel 

下载nginx:    wget http://nginx.org/download/nginx-1.13.0.tar.gz

由于我是测试只单独装默认自带的模块,请根据自身环境情况配置自身的模块

tar xzf nginx-1.13.0.tar.gz
进入目录 运行 ./configure  产生makefile
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

完成后/usr/local/下会产生一个nginx的目录,/usr/local/是默认二进制程序默认位置

注: nginx 的所有模块必须在编译的时候添加,不能再运行的时候动态加载。
注: 如果你想在已安装好的 nginx 上添加第三方模块,依然需要重新编译,但为了不覆盖你
原有的配置,请不要 make install,而是直接拷贝可执行文件:
# nginx –V

[root@www nginx-1.13.0]#./configure --add-module=…… #你的第三方模块
[root@www nginx-1.13.0] #make 后不要 make install,改为手动拷贝,先备份
[root@www nginx-1.13.0] #cp /usr/local/nginx1.10/sbin/nginx /usr/local/nginx1.10/sbin/nginx.bak
[root@www nginx-1.13.0] #cp objs/nginx /usr/local/nginx1.10/sbin/nginx

配置 nginx 反向代理: 反向代理+负载均衡+健康探测
查看 nginx 加载的模块

[root@www ~]## nginx -V 
nginx version: nginx/1.13.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx1.10 --user=www --group=www
--with-http_stub_status_module --with-http_realip_module --with-http_ssl_module
--with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client
--http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi
--with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module
--add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
nginx 的所有模块必须在编译的时候添加,不能再运行的时候动态加载。 

配置防火墙规则或者关闭防火墙

firewall-cmd --permanent --add-port=80/tcp

vi /usr/local/nginx/conf/nginx.conf
在http内添加不要添加到server内
        upstream lxstest{
                server 192.168.157.10:9090 weight=1;
                server 192.168.157.10:8080 weight=1;
            }
在server内添加在location里添加一条proxy_pass http://lxstest;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://lxstest;
        }

保存并推出

nginx -t 查看配置文件是否正确并启动

[root@localhost src]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost src]# nginx
nginx -s reload 重新刷新配置文件

测试访问,由于简单测试,就自己随便搞个测试页

 ok完成,具体看自身情况往配置文件加入参数

原文地址:https://www.cnblogs.com/luck666/p/10208284.html