如何用Nginx快速搭建一个安全的微服务架构
每个微服务都起一个 Nginx 就太重了吧,就不微了;可以使用 Nginx 反向代理到各个微服务
使用c语言开发web应用可以使用cgi来进行开发。
(1)、对于get请求来说,直接getenv("QUERY_STRING")就可以拿到。
(2)、而对于post请求来说,参数是写到标准输入流中的,需要从stdin中读取,或者 cin >> content,或者用FCGI_GET函数取得,用法如下:
char* data = (char*)::malloc(oRequest.iContentLength + 1);
::memset(data, 0, oRequest.iContentLength + 1);
FCGI_fgets(data, oRequest.iContentLength + 1, FCGI_stdin);
今天我们要谈论微服务以及如何使用Nginx构建一个快速的、安全的网络系统。最后,我们将向您展示一个使用Fabric模式如何非常快速和轻松地构建一个微服务的demo。
在我们探讨Fabric模式之前,我想谈一谈微服务并且从Nginx的角度来看这意味着什么。
0:56 - 大转变
微服务已经引起了应用程序架构的重大转变。
当我第一次开始构建应用程序时,他们都是差不多的。幻灯片中所展示的单体架构也象征了应用程序的构造方式。
目前存在着某种类型的虚拟机(VM),对我来说,就是通常的Java。在虚拟机中应用的功能组件以对象的形式存在,这些对象是在内存中相互通讯的,它们将来来回回处理并进行方法调用。偶尔,你会采用诸如通知等机制来接触到其他系统以便获取数据或传递信息。
有了微服务之后,应用程序如何构建的范式是完全不同的了。你的功能组件会从在同一个主机的内存中通过虚拟机相互通讯转变到部署在容器中,并且使用Restful API调用通过HTTP来相互连接。
这是非常强大的,因为它赋予了你功能隔离。它为您提供了更细粒度的可伸缩性,并且你可以获得更好地处理故障的弹性。很多情况下这是简单的事实,你只需要使用HTTP进行跨网络调用。
现在,这种方法也有一些缺点。
一件轶事

我有一个暗黑的秘密,我是一个微软的员工并且从事.Net开发已经很多年了。当我在那儿的时候,我搭建了一个他们的名为Showcase的视频发布平台。
Showcase是一个用来将微软内部发布的所有视频发布到网上的工具。人们可以观看这些视频并进行学习,比如Microsoft Word的使用提示和技巧。这是一个非常受欢迎的平台,我们有很多人使用它,并且其中很多人都会在我们发布的视频上发表评论。
Showcase从一开始就是一个.Net单体应用,随着它日益受欢迎,我们决定应该将它更换为SOA架构。转换是相对容易的。Visual Studio提供了本质上的翻转开关的能力,也就是将你的DLL调用转变为Restful API调用。随着一些小的重构,我们能够让我们的代码运行得相当好。我们也为这些评论和应用内的社区功能使用智能社区服务。
紧密的回路问题

看起来我们是SOA可行的,在我们的首次测试中,一切都工作正常,直到我们将系统切换到我们的Staging环境并开始使用生产环境数据时,我们就会看到一些严重的问题。这些问题在在页面上有很多评论。
这是一个非常受欢迎的平台,其中的一些页面已经有多达2000条评论了。当我们深入这些问题时,我们意识到这些页面需要花费一分钟进行渲染的原因是因为智能社区服务首先需要填充用户名,然后对每一个用户名都需要发起一个对于用户数据库的网络调用来获得用户详细信息并且填充在渲染页面上。这是非常低效的,需要一到两分钟来渲染页面,而在内存中进行通常只需要5到6秒钟。
缓解

当我们经历了发现和解决问题的过程后,我们最终通过一些措施来调整优化系统,比如对所有的请求进行分组。我们缓存了一些数据,最终我们优化了网络来真正的提高性能。
所以,这与微服务有什么关系呢?对的,借助于微服务,你基本上是采用SOA架构的,并且会将其放入超光速引擎中。在SOA架构中所有的对象都是包含在单个虚拟机中并且在其内部管理,在内存中相互通讯,而现在微服务中是使用HTTP进行数据交换的。
当这样做没有问题时,你会获得很好的性能和线性可伸缩性。
Nginx能够很好地与微服务工作

Nginx是一个你可以用来过渡到微服务的最佳工具之一。
关于Nginx和微服务的一些历史。我们从一开始就参与了微服务运动,还是第一个从Docker Hub下载应用的,我们的客户以及那些拥有一些世界上最大的微服务安装量的最终用户广泛地在他们的基础设施使用Nginx。
原因是Nginx很小、很快并且很可靠。
Nginx微服务参考架构

我们还致力于在Nginx内部使用微服务工作已经有一段时间了。这是一个我们已经搭建的程式化的Nginx微服务参考架构,目前正在AWS上运行。
我们拥有6个核心的微服务,它们都运行在Docker容器里。我们决定建立一个多语种的应用,所以每个容器都可以运行不同的语言,我们目前使用了Ruby、Python、PHP、Java和Node.js。
我们搭建了这个使用十二要素应用的系统,稍加修改,就会使其更好地为微服务工作从而可以替代Roku平台。稍后,我们将向您展示一个实际上运行在demo里的应用。
MRA的价值

为什么我们要建立这样一个参考的微服务架构呢?
我们建立这个参考架构是因为我们需要给我们的客户提供构建微服务的蓝图,我们也想在微服务上下文中测试Nginx和Nginx Plus的功能,弄清楚如何才能更好地利用它的优势。最后,我们要确保我们对于微服务生态系统以及其可以给我们提供什么有一个深入的理解。
网络问题

让我们回到我们讨论的大转变。
从将运行在内存里并且被虚拟机管理的你的应用的所有功能组件迁移到通过网络进行工作并且相互通讯的方式,你会本质上引入一系列为了应用有效工作需要你解决的问题。
第一你需要服务发现,第二,你需要在架构中为所有不同的实例进行负载均衡,然后还有第三个,你需要操心性能和安全。
无论是好是坏,这些问题密不可分,你必须做权衡,有希望的是我们有一个可以解决所有这些问题的解决方案。
让我们更深入地看待每一个问题。
服务发现
让我们来谈谈服务发现。在单体应用中,APP引擎会管理所有的对象关系,你永远不必担心一个对象与另一个对象的相对位置,你只需要简单的调用一个方法,虚拟机会连接到对象实例,然后在调用完毕后销毁。
然后有了微服务,你需要考虑那些服务的位置。不幸的是,这不是一个普遍的标准流程。您正在使用的各种服务注册中心,无论是Zookeeper、Consul、etcd或者其它的,都会以不同的方式进行工作。在这个过程中,你需要注册你的服务,还需要能够读取这些服务在哪里并且可以被连接。
负载均衡

第二个问题是关于负载均衡的。当您拥有多个服务实例时,您希望能够轻松地连接到它们,将您的请求在它们中高效地分发,并以最快的方式执行,所以不同实例之间的负载均衡是非常重要的问题。
不幸的是,最简单形式的负载均衡是非常低效的。当你开始使用不同的更加复杂的方案做负载均衡时,它也变得更加复杂并且不易于管理。理想情况下,您希望您的开发人员能够基于他们的应用程序的需求决定何种负载均衡方案。例如,如果你连接到一个有状态的应用程序,你需要拥有持久化,这样可以确保你的Session信息会被保留。
安全和快速通讯

也许微服务最令人生畏的领域是性能和安全。
当在内存中运行时,一切都很快。现在,运行在网络上就会慢了一个数量级。
被安全地包含在一个系统中的信息,通常是二进制格式的,现在会被用文本格式在网络上传输。现在是比较容易在网络上布置嗅探器并能够监听你的应用正在被移动的所有数据。
如果要在传输层加密数据,那么会在连接速率和CPU使用率方面引入显著的开销。SSL/TLS在其全面实施阶段需要九个步骤来初始化一个请求。当你的系统每天需要处理成千上万、几万、数十万或数百万的请求时,这就成为性能的一个重要障碍了。
一个解决方案

我们已经在Nginx开发的一些解决方案,我们认为,会解决所有的这些问题,它赋予你健壮的服务发现、非常棒的用户可配置负载均衡以及安全和快速加密。
网络架构

让我们来谈谈你可以安装和配置你的网络架构的各种方法。
我们提出了三种网络模型,它们本身并不相互排斥,但我们认为它们属于多种格式的。这三种模式是Proxy模式、Router Mesh模式和Fabric模式——这是最复杂的,并在许多方面在其头部进行负载均衡。
Proxy模式

Proxy模式完全聚焦于你的微服务应用的入站流量,并且事实上忽略内部通讯。
你会获得Nginx提供的所有的HTTP流量管理方面的福利。你可以有SSL/TLS终止、流量整形和安全,并且借助于最新版本的Nginx Plus和ModSecurity,你可以获得WAF能力。
你也可以缓存,你可以将Nginx提供给你的单体应用的所有东西添加到你的微服务系统里,并且借助于Nginx Plus,你可以实现服务发现。当你的API实例上下浮动时,Nginx Plus可以在负载均衡工具里动态地添加和减去它们。
Router Mesh模式

Router Mesh模式类似于Proxy模式,在其中我们有一个前端代理服务来管理接入流量,但它也在服务之间添加了集中式的负载均衡。
每个服务连接到集中式的Router Mesh,它管理不同服务之间的连接分发。Router Mesh模式还允许你在熔断器模式中搭建,以便可以对你的应用添加弹性并允许你采取措施来监控和拉回你的失效的服务实例。
不幸的是,因为该模式增加了一个额外的环节,如果你不得不进行SSL/TLS加密,它事实上加剧了性能问题。这就是引入Fabric模式的原因。
Fabric模式

Fabric模式是将其头部的所有东西翻转的模式。
就像之前的另外两个模式一样,在前面会有一个代理服务器来管理流入流量,但与Router Mesh模式不同的地方就是你用运行在每个容器里的Nginx Plus来替代了集中式的Router。
这个Nginx Plus实例对于所有的HTTP流量作为反向和正向代理,使用这个系统,你可以获得服务发现、健壮的负载均衡和最重要的高性能加密网络。
我们将探讨这是如何发生的,以及我们如何处理这项工作。让我们先来看看一个服务如何连接和分发他们的请求结构的正常流程。
正常的流程

在这个图中,你可以看到投资管理器需要跟用户管理器通讯来获取信息。投资管理器创建了一个HTTP客户端,该客户端针对服务注册中心发起了一个DNS请求并获得返回的一个IP地址,接着初始化了一个到用户管理器的SSL/TLS连接,该连接需要通过九阶段的协商或者是”握手”过程。一旦数据传输完毕,虚拟机会关闭连接并进行HTTP客户端的垃圾回收。
整个过程就是这样。这是相当简单和易于理解的。当你把它分解成这些步骤时,您可以看到该模式是如何真正完成请求和响应过程的。
在Fabric模式中,我们已经改变了这一点。
Fabric模式的细节

你会注意到的第一件事是Nginx Plus是运行在每一个服务里的,并且应用程序代码是在本地与Nginx Plus通信的。因为这些是本地连接,你不需要担心加密问题。它们可以是从Java或者PHP代码到Nginx Plus实例的HTTP请求,并且都是在容器内的本地HTTP请求。
你也注意到Nginx Plus会管理到服务注册中心的连接,我们有一个解析器,通过异步查询注册中心的DNS实例来获取所有的用户管理器实例,并且预先建立连接,这样当Java服务需要从用户管理器请求一些数据的时候,可以使用预先建立的连接。
持久的SSL/TLS连接

微服务之间的有状态的、持久化的并且可以加密的连接是真正的益处。
记得在第一个图中服务实例是如何通过一些流程的吧,比如创建HTTP客户端、协商SSL/TLS连接、发起请求并关闭的吗?在这里,Nginx预先建立了微服务之间的连接,并使用Keepalive特性,保持调用之间的持续连接,这样你就不必为每一个请求处理SSL/TLS协商了。
本质上,我们创建了一个迷你的从服务到服务的VPN连接。在我们最初的测试中,我们发现连接速度增加了77%。
熔断器Plus

在Fabric模式以及Router Mesh模式中,你也可以从创建和使用熔断器模式中获得好处。
本质上,您定义了一个在服务内部的活跃的健康检查,并设置缓存,以便在服务不可用的情况下保留数据,从而获得完整的熔断器功能。
所以,现在我可以确定你认为Fabirc模式听起来很酷,并且想在实际环境中跃跃欲试。
前端开发者必备:Nginx部署前端项目,让你的Web应用快速、稳定、安全地...
1. 安装与启动: 通过包管理器或源码编译安装Nginx,安装后以命令行启动。2. 配置基础: 在\/etc\/nginx\/nginx.conf中,配置虚拟主机(server)和请求处理(location),如指定网站根目录(root)和响应文件(index.html)。3. 前端项目打包: 使用Webpack等工具将源代码打包成静态文件,存放于dist目录。4. 部署...
nginx 详细的使用教程
安装路径可通过whereis nginx查找。修改端口号:如端口被占用,可在conf\/nginx.conf中修改,并用nginx -s reload命令重启服务。Web服务部署静态资源部署:通过配置location将请求重定向至静态资源目录。HTTPS配置:获取SSL\/TLS证书,配置SSL证书和私钥路径以启用HTTPS。代理功能正向代理:转发客户端请求至backend...
nginx有什么用
1. 作为HTTP服务器:Nginx可以作为HTTP服务器,处理静态文件的请求。它具有高效的处理能力,能够高效地传递和响应HTTP请求,提高网站的响应速度和用户体验。此外,Nginx还支持多种网络协议,包括HTTPS协议加密通信等。2. 反向代理和负载均衡:Nginx常被用作反向代理服务器,能够处理来自客户端的请求并将其转发...
如何用Nginx快速搭建一个安全的微服务架构
在这里,Nginx预先建立了微服务之间的连接,并使用Keepalive特性,保持调用之间的持续连接,这样你就不必为每一个请求处理SSL\/TLS协商了。本质上,我们创建了一个迷你的从服务到服务的VPN连接。在我们最初的测试中,我们发现连接速度增加了77%。熔断器Plus在Fabric模式以及Router Mesh模式中,你也可以从创建和使用熔断器模...
十年经验程序员,手把手教你使用Nginx搭建web集群【建议新手收藏】_百 ...
快速掌握Nginx搭建web集群 在web服务中,集群是提高可用性和性能的关键。传统web模型存在单点故障和服务器压力问题。Nginx集群通过分发器和业务服务器分工,有效应对这些问题。1. 集群原理 并行处理:分发器接收请求,业务服务器处理,分发器再响应用户,减轻单点压力。 组成要素:分发器、业务服务器...
nginx的启动关闭命令
1. 使用系统服务命令关闭:`sudo service nginx stop`2. 使用Nginx的quit信号关闭:找到Nginx进程ID,使用命令`kill -s QUIT `来优雅地关闭Nginx。3. 使用Nginx的快速关闭选项:在某些情况下,可以使用`.\/nginx -s stop`命令快速停止Nginx服务。但请注意,这种方法可能会立即停止所有活动连接,并不总...
nginx有什么用
1. 静态资源处理:Nginx可以作为静态资源的服务器,如图片、HTML、CSS等文件的服务器。它具备极高的性能,能够在高并发场景下保持优秀的响应速度和处理能力。2. 反向代理:Nginx经常作为反向代理服务器使用,能够处理来自客户端的请求并将这些请求转发到后端的应用服务器。在这个过程中,Nginx可以帮助实现...
nginx有什么用
其次,Nginx作为一个反向代理服务器,其主要作用是将客户端的请求转发到后端服务器。在很多架构中,Nginx部署在Web服务器和应用服务器之间,作为反向代理来均衡负载。这样,客户端的请求不会直接访问应用服务器,而是通过Nginx进行转发。这种架构可以有效地分散服务器的负载,提高系统的整体性能和稳定性。此外...
跨域问题很难吗?来!教你使用 Nginx 反向代理轻松解决
跨域问题并非难以解决,本文将教你如何使用Nginx反向代理来轻松应对。首先,确认服务端未处理跨域,并通过Postman测试接口正常。遇到跨域时,要理解涉及的4个响应头,如Access-Control-Allow-Origin等。遇到预检请求时,浏览器会先询问服务器,Nginx代理的设置至关重要。例如,将Nginx代理端口设置为22222,配置...
nginx有什么用
性能更为显著。使用nginx时,可以利用其ImapProxyExample进行配置,以实现反向加速代理功能,或者通过与Apache配合使用PHP脚本进行后端验证,或者利用嵌入式Perl模块作为imap\/pop代理和认证服务。总之,nginx是一个高效、灵活且广泛应用的服务器解决方案,是许多企业优化web服务架构的首选之一。
相万大补: 怎么用nginx在windows上搭建web服务器解决方法所需工具:一台联网的电脑phpStudy 2014版windows 2003 server sp2 服务器一台1.phpstudy安装在第四步时选择Nginx&php 或默认安装完成后切换Nginx,2.安装换成后打开phpStudy控制面板选择PHP版本 3.打开phpStudy(24中组合 自由切换)选择Nginx+php你所需要的版本4.选择相应版本后点击应用等待自动切换,如防火墙弹出阻止框,选择允许访问如果没有请忽略 5.完成后在控制面板可看到Nginx已经启动
东昌府区19665358533: 如何架设NginxPhpWeb服务器 ?
相万大补: 1、下载Nginx程序包,仅有1M左右大小,相当小巧功能强大! 2、将下载好的zip压缩包的文件全部解压,双击运行nginx.exe,你会看到一个黑色窗口一闪而过就没了,这...
东昌府区19665358533: Apache和Nginx防盗链的几种配置方法 - ?
相万大补: 要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件.换句话说,通过referer,网站可以检测...
东昌府区19665358533: 如何在windows上配置并运行Nginx - ?
相万大补: 1、下载nginx稳定版2、解压nginx.zip,将解压后的目录移动到指定要求目录,如c:\nginx3、进到该目录去,nginx.exe是nginx启动程序,conf是nginx一些配置文件目录,其中nginx.conf是nginx主配置文件4、编辑主配置文件nginx.conf#表示注释 ...
东昌府区19665358533: nginx负载均衡以及集群是怎么搭建的 ?
相万大补: 需要下载一个apk和一个zip.apk用于控制,zip里面包含了 nginx mysql pgsql php 的二进制文件和配置文件.如果apk里面有一键安装,如果不行就打开anmpp.sh,自己看着办.环境搭建完成之后,我们打开bftpd、nginx、php-fpm这三个,然后启动环境.浏览器输入172.0.0.1,看到phpinfo了,说明成功运行.
东昌府区19665358533: 如何在远程Linux服务器上搭建Nginx - ?
相万大补: 1.将nginx的压缩包nginx-1.8.0.tar.gz上传到Linux服务器2.由于nginx是C语言开发的并且我们这里是通过编译nginx的源码来安装nginx,所以Linux上要安装C语言的编译环境gcc, 如果已经安装此步可以省略,否则执行命令:yum install gcc-c++ ...
东昌府区19665358533: nginx和tomcat怎么搭建 - ?
相万大补: 一、 工具nginx-1.8.0apache-tomcat-6.0.33二、 目标实现高性能负载均衡的Tomcat集群:三、 步骤1、首先下载Nginx,要下载稳定版:2、然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2:3、然后修...
东昌府区19665358533: 如何用 Nginx 配置透明 HTTP 和 HTTPS 代理 - ?
相万大补: 1、首先需要配置站点的WoSign SSl证书打开Nginx安装目录下conf目录中的nginx.conf文件 找到# HTTPS server##server {# listen 443;# server_name localhost;# ssl on;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_...
东昌府区19665358533: window8怎么配置nginx - ?
相万大补: 工具原料:电脑+win8+php环境 window8配置nginx方法如下: 1、首先需要准备的应用程序包. nginx:nginx/Windows-1.0.4php:php-5.2.16-nts-Win32-VC6-x86.zip (nginx下php是以FastCGI的方式运行,所以我们下载非线程安全也就是nts的php...
东昌府区19665358533: 如何使用Nginx配置文件?
相万大补: 编译Nginx时,configure脚本的--prefix选项可以设置Nginx的运行路径,比如:./configure –prefix=/home/Nginx,此时,安装后的Nginx将会放在/home/Nginx目录,而配置文件就会在/home/Nginx/conf目录下.如果你没有显式的指--prefix选项,默...