前言

  同事总问我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. 简单聊一聊那些svg的沿路径运动

    之前遇见动画就很想用css实现,显然有些效果是我们力所不能及,实现起来麻烦,效果不好,让人捉急.其实归结起来,不同的动画有自己的优势,根据实际情况进行取舍.本文就告诉大家如何用SVG写出个简单动画.就 ...

  2. git 撤回放到暂存区的文件

    git reset HEAD filename 如:git reset HEAD test.txt 或者使用 git reset .  撤回所有文件(注意后面还有个.)

  3. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  4. PXC快速入门

    1.快速入门 实验环境: Node Host IP Node1 pxc1 192.168.70.61 Node2 pxc2 192.168.70.62 Node3 pxc3 192.168.70.63 ...

  5. Go基础系列:为select设置超时时间

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 After() 谁也无法保证某 ...

  6. (2)编译安装lamp三部曲之mysql-技术流ken

    简介 采用yum安装lamp简单,快捷,在工作中也得到了普遍应用.但是如果我们需要某些特定模块功能,以及制定安装位置等,就需要用到编译安装了,接下来将编译安装lamp之mysql. mysql的简介网 ...

  7. Linux命令-设置免密码登录

    设置免密码登陆:[root@Redis01 test]# cd /install/[root@Redis01 install]# rm -rf test/[root@Redis01 install]# ...

  8. spark之scala程序开发(集群运行模式):单词出现次数统计

    准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...

  9. TensorFlow(2)Softmax Regression

    Softmax Regression Chapter Basics generate random Tensors Three usual activation function in Neural ...

  10. [C#] C# 知识回顾 - Lambda

    C# 知识回顾 - Lambda 序 它是第十一个希腊字母,一个拥有失意.无奈.孤独.低调等含义的流行符号,也指示一款称为“半条命”的游戏. 不过,这次我所讲的是 C# 中的 Lambda. 目录 L ...