专栏首页玩转JavaEESpring Boot2 系列教程(二十七)Nginx 极简扫盲入门

Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门

上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧!

基本介绍

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。

Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004104 日。

Nginx 特点是占有内存少,并发能力强。

事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,一般来说,如果我们在项目中引入了 Nginx ,我们的项目架构可能是这样:

在这样的架构中 , Nginx 所代表的角色叫做负载均衡服务器或者反向代理服务器,所有请求首先到达 Nginx 上,再由 Nginx 根据提前配置好的转发规则,将客户端发来的请求转发到某一个 Tomcat 上去。

那么这里涉及到两个概念:

  • 负载均衡服务器

就是进行请求转发,降低某一个服务器的压力。负载均衡策略很多,也有很多层,对于一些大型网站基本上从 DNS 就开始负载均衡,负载均衡有硬件和软件之分,各自代表分别是 F5Nginx (目前 Nginx 已经被 F5 收购),早些年,也可以使用 Apache 来做负载均衡,但是效率不如 Nginx ,所以现在主流方案是 Nginx

  • 反向代理服务器:

另一个概念是反向代理服务器,得先说正向代理,看下面一张图:

在这个过程中,Google 并不知道真正访问它的客户端是谁,它只知道这个中间服务器在访问它。因此,这里的代理,实际上是中间服务器代理了客户端,这种代理叫做正向代理。

那么什么是反向代理呢?看下面一张图:

在这个过程中,10086 这个号码相当于是一个代理,真正提供服务的,是话务员,但是对于客户来说,他不关心到底是哪一个话务员提供的服务,他只需要记得 10086 这个号码就行了。

所有的请求打到 10086 上,再由 10086 将请求转发给某一个话务员去处理。因此,在这里,10086 就相当于是一个代理,只不过它代理的是话务员而不是客户端,这种代理称之为反向代理。

Nginx 的优势

在 Java 开发中,Nginx 有着非常广泛的使用,随便举几点:

  1. 使用 Nginx 做静态资源服务器:Java 中的资源可以分为动态和静态,动态需要经过 Tomcat 解析之后,才能返回给浏览器,例如 JSP 页面、Freemarker 页面、控制器返回的 JSON 数据等,都算作动态资源,动态资源经过了 Tomcat 处理,速度必然降低。对于静态资源,例如图片、HTML、JS、CSS 等资源,这种资源可以不必经过 Tomcat 解析,当客户端请求这些资源时,之间将资源返回给客户端就行了。此时,可以使用 Nginx 搭建静态资源服务器,将静态资源直接返回给客户端。
  2. 使用 Nginx 做负载均衡服务器,无论是使用 Dubbo 还是 Spirng Cloud ,除了使用各自自带的负载均衡策略之外,也都可以使用 Nginx 做负载均衡服务器。
  3. 支持高并发、内存消耗少、成本低廉、配置简单、运行稳定等。

Nginx 安装:

由于基本上都是在 Linux 上使用 Nginx,因此松哥这里主要向大家展示 CentOS 7 安装 Nginx:

  1. 首先下载 Nginx
wget http://nginx.org/download/nginx-1.17.0.tar.gz

然后解压下载的目录,进入解压目录中,在编译安装之前,需要安装两个依赖:

yum -y install pcre-devel
yum -y install openssl openssl-devel

然后开始编译安装:

./configure
make
make install

装好之后,默认安装位置在 :

/usr/local/nginx/sbin/nginx

进入到该目录的 sbin 目录下,执行 nginx 即可启动 Nginx

Nginx 启动成功之后,在浏览器中直接访问 Nginx 地址:

看到如上页面,表示 Nginx 已经安装成功了。

如果修改了 Nginx 配置,则可以通过如下命令重新加载 Nginx 配置文件:

./nginx -s reload

总结

本文算是一个简单的 Nginx 扫盲文,希望大家看完后对 Nginx 有一个基本的认知。本文先说到这里,有问题欢迎留言讨论。

1、Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目

2、Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

3、Spring Boot2 系列教程(三)理解 spring-boot-starter-parent

4、Spring Boot2 系列教程(四)理解配置文件 application.properties !

5、Spring Boot2 系列教程(五)Spring Boot中的 yaml 配置

6、Spring Boot2 系列教程(六)自定义 Spring Boot 中的 starter

7、Spring Boot2 系列教程(七)理解自动化配置的原理

8、Spring Boot2 系列教程(八)Spring Boot 中配置 Https

9、Spring Boot2 系列教程(九)Spring Boot 整合 Thymeleaf

10、Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

11、Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置

12、Spring Boot2 系列教程(十二)@ControllerAdvice 的三种使用场景

13、Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理

14、Spring Boot2 系列教程(十四)CORS 解决跨域问题

15、Spring Boot2 系列教程(十五)定义系统启动任务的两种方式

16、Spring Boot2 系列教程(十六)定时任务的两种实现方式

17、Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2

18、Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置

19、Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate

20、Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源

21、Spring Boot2 系列教程(二十一)整合 MyBatis

22、Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

23、Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

26、Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis

本文分享自微信公众号 - 牧码小子(a_javaboy)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx 极简入门教程!

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 N...

    江南一点雨
  • 干货|最新版 Spring Boot2.1.5 教程+案例合集

    最近发了一系列的 Spring Boot 教程,但是发的时候没有顺序,有小伙伴反映不知道该从哪篇文章开始看起,刚好最近工作告一个小小段落,松哥就把这些资料按照学...

    江南一点雨
  • 挖一个大坑,Spring Security 开搞!

    自从 Spring Boot、Spring Cloud 火起来之后,Spring Security 也跟着沾了一把光!

    江南一点雨
  • CloudFlare公共DNS服务遭遇“宕机”

    laulzgoay
  • Spring基本使用

    他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。

    木瓜煲鸡脚
  • 数据结构与算法笔记cp1:基本概念

    ADT 即 Abstract data type,抽象数据类型的三个主体是数据对象 + 关系 + 操作。 我们可以用下面的格式描述抽象数据类型:

    Chor
  • 使用Apache Server 的ab进行web请求压力测试

    参考:http://www.cnblogs.com/spring3mvc/archive/2010/11/23/2414741.html 自己写代码经常是顺着逻...

    Ryan-Miao
  • 如何利用机器人清理太空垃圾?

    尽管我们不太关注,但是越来越多的人在日常生活中需要依赖这些在太空的卫星,像地球观测卫星,通信卫星和全球定位系统等等。轨道碎片不仅仅威胁太空的开发和探测,同样也威...

    机器人网
  • J2EE中整合Spring4和hibernate4

    J2EE中整合Spring4和hibernate4,在这我只给出初略的步骤了,

    克虏伯
  • TensorFlow初学者指南:如何为机器学习项目创建合适的文件架构

    选自MetaFlow 作者:Morgan 机器之心编译 参与:李亚洲、蒋思源 在这篇文章中,作者根据自己的经验为 TensorFlow 初学者给出了设计文件、文...

    机器之心

扫码关注云+社区

领取腾讯云代金券