nginx

反向代理(Reverse Proxy)是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户端的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网路上的主机访问内部网络时,这种代理服务的方式成为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对于反向代理服务器的攻击并不会使网页信息遭到破坏,这样就增强了Web服务器的安全性。

反向代理方式和包过滤方式或者普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或者包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

上图表示:反向代理

上图表示:正向代理

环境:nginx 1.6.3

本机环境:openSUSE leap 42.1,运行nginx服务器

虚拟机Centos7,该虚拟机的hostname为hadoop2,运行tomcat服务器,

1、安装nginx:略

2、安装tomcat:略

3、运行计划:

a) 如果是html文件,就执行nginx上面的html文件;

b) 如果是jsp文件,就执行tomcat上面的jps文件。

c) 如果是图片、js、css等静态文件,就执行nginx上面的--也就是本机环境上面的静态文件。

检查tomcat和nginx是否安装成功,分别使用命令:ps -ef | grep tomcat和ps -ef | grep nginx。

如果没有问题,那么,就可以配置nginx的nginx.conf的配置文件,使得能够完成上面所说的“运行计划”了。配置文件如下:

我这里是在原来默认的nginx.conf配置文件上面修改的,只需要添加一个upstream(上游服务器,也就是被负载均衡的服务器,这里指的是tomcat服务器,这里只配置一台)、在server下面增加三个location,分别用于过滤jsp、css和js、图片。下面红色颜色字体所示。其中,对于图片、css和js等静态资源,也就是红色字体的第二第三个location,我这里指定了root /home/xxxx这个资源目录,这个目录和上游服务器tomcat服务器上面war文件是一样的(副本关系)。这样做的目的是让nginx服务器直接向客户端返回静态资源,而无须再调用上游的服务器。

worker_processes  1;events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;upstream tomcatServer{server hadoop2:8080 max_fails=2 fail_timeout=30s;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {#root   html;root /home/liangyh/Installed/tomcat/webapps/ROOT;index  index.html index.htm;}location ~ \.(jsp|do)?$ {        #波浪线表示正则匹配,它的后面就是正则表达式。  这里的作用是所有的jsp文件请求都向上游服务器请求。proxy_pass http://tomcatServer;proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header Host $host;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {#静态图片文件,这里的$符号后面最好留一个空格,如果没有空格,我这里使用nginx -t命令不通过。root /home/liangyh/Installed/tomcat/webapps/ROOT;expires 1d; #一天后过期}location ~ .*\.(js|css)$ {   #静态文件js、cssroot /home/liangyh/Installed/tomcat/webapps/ROOT;expires 1h;          #一个小时后过期}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

配置好上面的配置文件之后,我们需要使配置文件生效,可以执行命令:

1、查询nginx的master进程号:ps -ef | grep nginx | grep master|awk '{print $2}'

2、在不用重启的情况下是nginx.conf配置文件生效:sudo kill -HUP nginx 主进程号

下面我们使用浏览器测试一下(注意:我的目录/home/liangyh/Installed/tomcat/webapps/ROOT下面有index.jsp和index.html文件。):

1、在浏览器上面输入:localhost

2、在浏览器上面输入:localhost/index.jsp

效果如下图表示:

我不通过nginx服务器也可以访问到虚拟机hadoop2上面的tomcat服务器。如下图所示:

总结:上面所展示的是nginx作为反向代理服务器,负责转发客户端的请求和tomcat服务器的response,如果是动态网页,比如jsp,才转发请求到上游服务器,如果是静态文件,比如图片文件,就直接从nginx自己那里拿。

下面是nginx作为负载均衡服务器的配置:

环境:在上面反向代理的配置的基础之上修改upstream tomcatServer。如下图所示,两台tomcat应用服务都在hadoop2这个节点上面,它们的权值一样。其他的配置和上面的一样。

upstream tomcatServer{server hadoop2:8080 weight=1 max_fails=2 fail_timeout=30s;server hadoop2:8081 weight=1 max_fails=2 fail_timeout=30s;
}

在hadoop2节点上面启动两个tomcat(具体需要修改tomcat中的server.xml文件的两个端口,分别是8080客户端监听端口和8005的shutdown端口)。启动之后,可以在本地访问到。如下图:

上面两张图片所示的是:不通过nginx服务器访问tomcat的方式。

下面是通过nginx来访问:输入localhost/index.jsp,刷新页面,就会交替出现下面两个页面,结果说明nginx的负载均衡服务起作用了。

总结:nginx的负载均衡的配置是很简单的,只需要指定不同的web application server的ip:port或者域名:port和权重就可以了。这个负载 均衡方式是默认的加权轮询算法。其他的工作,nginx会自动帮我们完成。

思考:在nginx和tomcat服务器上面都有相同的war文件,这样存在多个副本不方便于版本更新。可不可以做到只需要把war存在tomcat服务其中,nginx服务器不需要存war文件,只需要缓存静态文件就可以了?

nginx反向代理,负载均衡相关推荐

  1. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  2. nginx 反向代理负载均衡 tomcat集群应用

    nginx 反向代理负载均衡 tomcat集群应用 环境介绍: 系统:centos5.8_64 192.168.0.201:nginx服务器 192.168.0.202:tomcat服务器 192.1 ...

  3. Nginx反向代理 负载均衡sky

    Nginx服务部署 Nginx简介 Nginx (engine x) 是一个轻量级的.高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗 ...

  4. Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链

    文章目录 1. Nginx简介 1.1 Nginx背景 1.2 Nginx的优点 1.3 Nginx的功能特性及常用功能 2.Nginx安装 2.1 下载上传解压 1.2 安装 3.nginx核心概念 ...

  5. Nginx 反向代理 负载均衡 动静分离 高可用 原理

    1.Nginx简介 1.1 概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能 ...

  6. Nginx 反向代理+负载均衡

    一.Nginx 的引入背景 ● 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户. 用户少, ...

  7. Tomcat集群+Nginx反向代理+负载均衡

    Tomcat集群 所谓tomcat集群,就是向外提供并行服务的多台机器,任何一台服务器宕机,其他服务器还可以代替它向外提供服务,从而不影响用户访问 为了提高tomcat集群的高可用性,还需要实现ngi ...

  8. Nginx——反向代理 负载均衡(无理论,案例实操)

    1.开篇 有关Nginx的下载安装.相关理论内容,这里就不再多说了,详情可以参考我的这几篇文章: https://szh-forever-young.blog.csdn.net/article/det ...

  9. Nginx反向代理负载均衡

    环境准备: 总共四台机器,两台装有Nginx的机器做负载均衡,两台机器装有Apache作为WEB服务器. 机器信息 hostname IP 说明 lb01 192.168.1.19 nginx主负载均 ...

  10. nginx反向代理/负载均衡MySQL

    从Nginx1.9开始,官方提供了一个ngx_stream_core_module模块,该模块支持了TCP代理以及负载均衡功能. 要想启用该模块,在nginx编译时,指定编译参数 --with-str ...

最新文章

  1. Retrofit 原理解析
  2. G - Bad Hair Day (单调栈)
  3. Kubernetes安装之五:配置kubectl客户端
  4. JAVA中System.out.println和System.out.print有什么区别
  5. [TODO]com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
  6. Ranger-AdminServer安装Version2.0.0
  7. Python2 圆满落幕,Python 继续辉煌! | 原力计划
  8. github客户端进行token认证
  9. python求小于n的最大素数_找出小于n的最大素数,其中n =〜10 ^ 230 - python
  10. 小程序,微信支付:支付失败,商户号该产品权限未开通,请前往商户平台 产品中心检查后重试
  11. 在.NET中进行AutoCAD二次开发(C#+ObjectArx) (二)
  12. 《拥抱变化——社交网络时代的企业转型之道》一第1章 助力社交商务成功的AGENDA体系...
  13. 仿迅雷播放器遇到的字符串处理函数
  14. 也许是得益于快播案,电子证物的程序正义问题终于有了保障
  15. 《王道》数据结构之绪论(一)
  16. 什么是Crunchyroll,它提供什么动漫?
  17. [工具类] Flash builder 4.6 下载 破解 序列号
  18. 基于Egret的微信小游戏H5项目总结
  19. 非广州户籍可以报考广州公务员么_看看官方怎么说
  20. Centos 7 手把手教你部署gitlab-ce

热门文章

  1. js 文件不让通过地址访问_区块链与以太坊实战(5):访问以太坊节点的N中方式...
  2. 7-27 冒泡法排序 (C语言)
  3. android+关闭selinux权限问题,快速解决Android中的selinux权限问题【转】
  4. python oserror errorno 39_shutil.rmtree 函数 OSError: [Errno 39] Directory not empty: 错误原因
  5. python中内建函数_python常用内建函数
  6. Cocos2dx源码记录(1) CCGLProgram
  7. Xcode iOS9.3 配置包 iOS10.0 配置包 iOS10.2 配置包 could not find developer disk image
  8. 因Facebook帖子涉嫌包含仇恨言论 德国警方突击搜查36名用户住所
  9. haproxy参数优化
  10. shell监控MySQL服务是否正常