前言

  同事总问我Nginx做反向代理负载均衡的问题,因此特意留下一篇扫盲贴!

直接部署服务器的风险

  假设,我开发了一个网站,然后买了一台Web服务器和一台数据库服务器,直接部署到公共网络上。如下图,网站用户通过手机、平板、台式机等终端设备,连上网络,输入 118.178.109.187 这个地址,我的系统就读取数据库,然后直接返回一个网页。

  像这种网站部署的方式在今天的网络部署上特别常见。这种部署方式虽然简单、方便,高效,但是也存在着巨大的安全隐患。为什么呢?那是因为我将所有服务器资源都直接暴露在了公共网络上。直接将服务器暴露在网上的风险特别高。据阿里统计,他们每天在全球范围内,会被黑客攻击大概16亿次。是不是很震惊?我的两台服务器在网上裸奔,没有防火墙,没有安全策略,也不知道其他黑客还掌握了哪些漏洞。因此一旦被各种黑客扫描到了,我的服务器就很容易沦为别人的肉鸡,任人宰割。

  所以啊,一旦要直接暴露在网上的服务器都应该是具有强大的安全策略来方式被攻击。比如,防火墙策略要做好,漏洞要修补好,端口不要乱开放等等。而且即便是这样,地球上也没有任何人敢保证他的服务器不被入侵。因此,不被入侵是不可能的了!那么我们应该怎么办呢?我觉得应该增加黑客入侵的门槛,以及减少入侵成功之后的收益。这样费力又不讨好的事情,我相信很多黑客是不愿意做的。

  那说了那么多,怎么操作呢?我觉得要暴露在公网上的服务器,必须都应该是不存储任何数据的服务器,即便是服务器挂了。用户虽然不能访问了,但是至少数据不会丢失。 所以常用的策略就是,重要的东西尽量放内网。

  如下图,手机、平板、台式机等终端设备通过公网访问反向代理服务器。反向代理服务器上有两张网卡,一张网卡是公共网卡,另一张网卡是局域网网卡。反向代理服务器通过将请求反向代理到192.168.1.1这台Web服务器,Web服务器连接局域网的数据库进行SQL查询操作,然后将数据返回给反向代理服务器,反向代理服务器再将数据通过公网传给终端设备。

  这种技术就相对安全一点了,因为只有反向代理服务器直接暴露在公网上了,即便是反向代理服务器被攻击了,只要局域网内的其他服务器不被攻击,也损失不了什么。

反向代理

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

  我们从客户端的视野来看,实际上客户端并不知道真实的服务提供者是哪台服务器,它只知道它请求了反向代理服务器。因此反向代理这种方式又对外隐藏了真实服务器的地址,从一定程度上降低了安全隐患。

在Windows上部署nginx实现Web服务器反向代理和负载均衡

  本次主要通过一个例子来演示一下nginx。大概流程为,建立三个网站 分别是 192.168.17.69:20001 ,192.168.17.69:20002 ,192.168.17.69:20003  。我们在浏览器上输入 192.168.17.69 的时候,通过 nginx 反向代理这三个站点,并实现负载均衡。  

  那么先来介绍一下nginx吧!

  nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

  nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  nginx 的下载地址 http://nginx.org/en/download.html ,我这边使用的是 Windows 版本  nginx-1.14.2 .,下载完之后解压到文件夹,如图:

  nginx的常规配置文件为 conf / nginx.conf

  

  我这边已经配置好了一个最基础的反向代理和负载均衡配置:

worker_processes  1;

events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

   #配置 nginx 的站点为 192.168.17.67 ,反向代理 192.168.17.69:20001 , 192.168.17.69:20002 , 192.168.17.69:20003 三个站点,并实现负载均衡
server {
listen 80;
server_name 192.168.17.69; location / {
proxy_pass http://web;
index index.html index.htm;
}
} upstream web {
server 192.168.17.69:20001;
server 192.168.17.69:20002;
server 192.168.17.69:20003;
}
}

  server 表示 nginx 服务监听 192.168.17.69 服务器的 80 端口。进行 http 协议反向代理 web ,web下面有三个站点。多个就实现负载均衡。

  配置完 nginx 之后,我们将 nginx 运行起来。使用 dos 命令:nginx.exe 或者 start nginx 都可以:

  然后我们来访问一下 192.168.17.69

  

  可以看到,我每次刷新 或者 进入 192.168.17.69 的时候,看到的页面都有些不一样。通过观察,我们可以得知,nginx 将我们的请求进行了反向代理和负责均衡。

使用Nginx实现服务器反向代理和负载均衡的更多相关文章

  1. Nginx的upstream反向代理、负载均衡详解

    这篇文章的前提是已经配置好了NGINX,而且tomcat已经配置好了,而且能能够访问了. 说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式. 正向代理最大的特点是客户端非常明 ...

  2. nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken

    nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...

  3. nginx详解反向代理、负载均衡、LNMP架构上线动态网站

    简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.N ...

  4. 循序渐进nginx(二):反向代理、负载均衡、缓存服务、静态资源访问

    目录 反向代理 使用 1.创建代理目标服务端: 2.配置nginx反向代理目标服务端: 3.测试使用: 负载均衡 使用 1.准备服务端 2.修改nginx配置 3.测试 负载均衡策略 负载均衡的额外参 ...

  5. Nginx(三):反向代理,负载均衡

    环境准备   配置反向代理,负载均衡,动静分离需要的必备环境,JDK,2个tomcat开启8080和8081端口. 安装jdk [root@localhost ~]# rpm -qa|grep jav ...

  6. Nginx七层反向代理和负载均衡

    1.介绍 1.1 Nginx不仅是一个出色的web软件,其七层代理和负载均衡也是相当出色.Nginx做前端代理,当用户请求服务时,可以根据url进行判断,然后分配到不同的后台webserver上. 1 ...

  7. Nginx 笔记(三)nginx 配置实例 - 反向代理、负载均衡、动静分离

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.反向代理 反向代理准备工作: (1)在 liunx 系统安装 tomcat,使用默认端口 8080 ...

  8. Nginx反向代理以及负载均衡配置

    项目地址:http://git.oschina.net/miki-long/nginx 前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所 ...

  9. Nginx详解(正向代理、反向代理、负载均衡原理)

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

随机推荐

  1. Java 中的 String 真的是不可变吗?

    我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class String implements java.io.Seriali ...

  2. 推荐:7 月份值得一看的 Java 技术干货!

    月底了,又到了我们总结这一个月 Java 技术干货的时候了,又到了我们给粉丝免费送书的日子了. 7 月份干货总结 Oracle 发布了一个全栈虚拟机 GraalVM 一文带你深入拆解 Java 虚拟机 ...

  3. c++多继承多态

    C++多继承多态的实现 如果一个类中存在虚函数,在声明类的对象时,编译器就会给该对象生成一个虚函数指针,该虚函数指针指向该类对应的虚函数表. 多态的实现是因为使用了一种动态绑定的机制,在编译期间不确定 ...

  4. 从零開始学Xamarin.Forms(一) 概述

        Xamarin 读 "ˈzæmərin",是一个基于开源项目mono的可以使用C#开发的收费的跨平台(iOS.Android.Windows Phone.Mac)解决方式. ...

  5. Centos7单机部署ELK+x-pack

    ELK分布式框架作为现在大数据时代分析日志的常为大家使用.现在我们就记录下单机Centos7部署ELK的过程和遇到的问题. 系统要求:Centos7(内核3.5及以上,2核4G) elk版本:6.2. ...

  6. 谈谈 Redux 与 Mobx 思想的适用场景

    谈谈 Redux 与 Mobx 思想的适用场景 Redux 和 Mobx 都是当下比较火热的数据流模型,一个背靠函数式,似乎成为了开源界标配,一个基于面向对象,低调的前行. 函数式 vs 面向对象 首 ...

  7. Spring Cloud Gateway中异常处理

    最近我们的项目在考虑使用Gateway,考虑使用Spring Cloud Gateway,发现网关的异常处理和spring boot 单体应用异常处理还是有很大区别的.让我们来回顾一下异常. 关于异常 ...

  8. PCA实现教程

    数据是机器学习模型的生命燃料.对于特定的问题,总有很多机器学习技术可供选择,但如果没有很多好的数据,问题将不能很好的解决.数据通常是大部分机器学习应用程序中性能提升背后的驱动因素. 有时,数据可能很复 ...

  9. 插槽slot

    主要是让组件的可扩展性更强.1.匿名slot使用 //定义组件my-component <div class="myComponent"> <slot>&l ...

  10. MyBatis源码解析(二)——Environment环境

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6625612.html 本应该先开始说Configuration配置类的,但是这个类有点过于 ...