Nginx完全指南

干货!文章有点长,建议先收藏

  • 引言
  • 一、性能怪兽-Nginx概念深入浅出
  • 二、Nginx环境搭建
  • 三、Nginx反向代理-负载均衡
  • 四、Nginx动静分离
  • 五、Nginx资源压缩
  • 六、Nginx缓冲区
  • 七、Nginx缓存机制
  • 八、Nginx实现IP黑白名单
  • 九、Nginx跨域配置
  • 十、Nginx防盗链设计
  • 十一、Nginx大文件传输配置
  • 十二、Nginx配置SLL证书
  • 十三、Nginx的高可用
  • 十四、Nginx性能优化
  • 十五、放在最后的结尾

引言

早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。

从上面的描述中,主要存在两个问题:①单体结构的部署方式无法承载日益增长的业务流量。②当后端节点宕机后,整个系统会陷入瘫痪,导致整个项目不可用。

因此在这种背景下,引入负载均衡技术可带来的收益:

  • 「系统的高可用:」 当某个节点宕机后可以迅速将流量转移至其他节点。
  • 「系统的高性能:」 多台服务器共同对外提供服务,为整个系统提供了更高规模的吞吐。
  • 「系统的拓展性:」 当业务再次出现增长或萎靡时,可再加入/减少节点,灵活伸缩。

OK~,既然引入负载均衡技术可给我们带来如此巨大的好处,那么又有那些方案可供选择呢?主要有两种负载方案,「「硬件层面与软件层面」」 ,比较常用的硬件负载器有A10、F5等,但这些机器动辄大几万乃至几十万的成本,因此一般大型企业会采用该方案,如银行、国企、央企等。而成本有限,但依旧想做负载均衡的项目,那么可在软件层面实现,如典型的Nginx等,软件层的负载也是本文的重点,毕竟Boss们的准则之一就是:「「能靠技术实现的就尽量不花钱。」」

当然,如果你认为本文对你而言有帮助,记得点赞、收藏、关注三连噢!

一、性能怪兽-Nginx概念深入浅出

Nginx是目前负载均衡技术中的主流方案,几乎绝大部分项目都会使用它,Nginx是一个轻量级的高性能HTTP反向代理服务器,同时它也是一个通用类型的代理服务器,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS等。

Nginx与Redis相同,都是基于多路复用模型构建出的产物,因此它与Redis同样具备 「「资源占用少、并发支持高」」 的特点,在理论上单节点的Nginx同时支持5W并发连接,而实际生产环境中,硬件基础到位再结合简单调优后确实能达到该数值。

先来看看Nginx引入前后,客户端请求处理流程的对比:

原本客户端是直接请求目标服务器,由目标服务器直接完成请求处理工作,但加入Nginx后,所有的请求会先经过Nginx,再由其进行分发到具体的服务器处理,处理完成后再返回Nginx,最后由Nginx将最终的响应结果返回给客户端。

了解了Nginx的基本概念后,再来快速搭建一下环境,以及了解一些Nginx的高级特性,如动静分离、资源压缩、缓存配置、IP黑名单、高可用保障等。

二、Nginx环境搭建

❶首先创建Nginx的目录并进入:

[root@localhost]# mkdir /soft && mkdir /soft/nginx/  
[root@localhost]# cd /soft/nginx/  

❷下载Nginx的安装包,可以通过FTP工具上传离线环境包,也可通过wget命令在线获取安装包:

[root@localhost]# wget https://nginx.org/download/nginx-1.21.6.tar.gz  

没有wget命令的可通过yum命令安装:

[root@localhost]# yum -y install wget  

❸解压Nginx的压缩包:

[root@localhost]# tar -xvzf nginx-1.21.6.tar.gz  

❹下载并安装Nginx所需的依赖库和包:

[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ gcc-c++  
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ pcre pcre-devel4  
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ zlib zlib-devel  
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ openssl openssl-devel 

也可以通过yum命令一键下载(推荐上面哪种方式):

[root@localhost]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel  

执行完成后,然后ls查看目录文件,会看一大堆依赖:

紧接着通过rpm命令依次将依赖包一个个构建,或者通过如下指令一键安装所有依赖包:

[root@localhost]# rpm -ivh --nodeps *.rpm  

❺进入解压后的nginx目录,然后执行Nginx的配置脚本,为后续的安装提前配置好环境,默认位于/usr/local/nginx/目录下(可自定义目录):

[root@localhost]# cd nginx-1.21.6  
[root@localhost]# ./configure --prefix=/soft/nginx/  

❻编译并安装Nginx

[root@localhost]# make && make install  

❼最后回到前面的/soft/nginx/目录,输入ls即可看见安装nginx完成后生成的文件。

❽修改安装后生成的conf目录下的nginx.conf配置文件:

[root@localhost]# vi conf/nginx.conf  
    修改端口号:listen    80;  
 修改IP地址:server_name  你当前机器的本地IP(线上配置域名);  

❾制定配置文件并启动Nginx

[root@localhost]# sbin/nginx -c conf/nginx.conf  
[root@localhost]# ps aux | grep nginx  

Nginx其他操作命令:

sbin/nginx -t -c conf/nginx.conf # 检测配置文件是否正常  
sbin/nginx -s reload -c conf/nginx.conf # 修改配置后平滑重启  
sbin/nginx -s quit # 优雅关闭Nginx,会在执行完当前的任务后再退出  
sbin/nginx -s stop # 强制终止Nginx,不管当前是否有任务在执行  

❿开放80端口,并更新防火墙:

[root@localhost]# firewall-cmd --zone=public --add-port=80/tcp --permanent  
[root@localhost]# firewall-cmd --reload  
[root@localhost]# firewall-cmd --zone=public --list-ports  

⓫在Windows/Mac的浏览器中,直接输入刚刚配置的IP地址访问Nginx

最终看到如上的Nginx欢迎界面,代表Nginx安装完成。推荐:[Java面试题][Java]

三、Nginx反向代理-负载均衡

首先通过SpringBoot+Freemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下:

@Controller  
public class IndexNginxController {
     
    @Value("${server.port}")  
    private String port;  
  
    @RequestMapping("/")  
    public ModelAndView index(){
     
        ModelAndView model = new ModelAndView();  
        model.addObject("port", port);  
        model.setViewName("index");  
        return model;  
    }  
}  

在该Controller类中,存在一个成员变量:port,它的值即是从application.properties配置文件中获取server.port值。当出现访问/资源的请求时,跳转前端index页面,并将该值携带返回。

前端的index.ftl文件代码如下:

<html>  
    <head>  
        <title>Nginx演示页面</title>  
        <link href="nginx_style.css" rel="stylesheet" type="text/css"/>  
    </head>  
    <body>  
        <div style="border: 2px solid red;margin: auto;width: 800px;text-align: center">  
            <div  id="nginx_title">  
                <h1>欢迎来到熊猫高级会所,我是竹子${
   port}号!</h1>  
            </div>  
        </div>  
    </body>  
</html>  

从上可以看出其逻辑并不复杂,仅是从响应中获取了port输出。

OK~,前提工作准备就绪后,再简单修改一下nginx.conf的配置即可:

upstream nginx_boot{
     
   # 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2  
   server 192.168.0.000:8080 weight=100 max_fails=2 fail_timeout=30s;   
   server 192.168.0.000:8090 weight=200 max_fails=2 fail_timeout=30s;  
   # 这里的IP请配置成你WEB服务所在的机器IP  
}  
  
server {
     
    location / {
     
        root   html;  
        # 配置一下index的地址,最后加上index.ftl。  
        index  index.html index.htm index.jsp index.ftl;  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《nginx完全开发指南》是一本介绍nginx的操作和开发的详细指南Nginx是一款开源的高性能Web服务器和反向代理服务器,它的设计极为简洁,可以快速高效地处理大量的Web请求。本书详细介绍了Nginx的运行原理和基本配置、常见模块、反向代理、负载均衡、HTTPS部署、Nginx扩展开发等方面的知识。其中,重点介绍了Nginx的C语言扩展开发,包含了连接池、内存池、数据缓存、日志模块、定时器等核心功能的实现。同时,本书还涵盖了Nginx在高并发、高性能场景下的优化方法,包括TCP参数调整、负载均衡算法、后端服务器连接池等方面的内容。 对于参与Web开发的工程师和运维人员而言,《nginx完全开发指南》是一本非常实用的技术指南。书中除了详细介绍了Nginx的基本功能和应用场景外,还深入探讨了Nginx扩展开发的核心理念和实现方法,让读者深入理解Nginx的工作原理,从而更好地适应不同的需求。此外,书中的实例代码和案例分析,也能让读者在理论基础上更好地掌握Nginx的实际应用,提高自己的技能水平。 总之,《nginx完全开发指南》是一本非常全面的Nginx技术指南,对于想要深入了解Nginx的开发和优化的读者而言,是一本不可多得的技术参考书籍。 ### 回答2: 《nginx完全开发指南》是一本关于Web服务器Nginx的实践指南,详细介绍了Nginx的原理、安装配置、可行性和高级应用。本书涵盖了大量的实用技巧和实例,易于新手入门,对于有经验的开发人员来说也是一本不可多得的参考手册。 本书首先详细介绍了Nginx的概念、安装和配置,包括Nginx的架构、事件模型、编译安装和运行配置。接着,本书详细介绍了Nginx的HTTP服务器、反向代理和负载均衡,以及如何使用Nginx搭建多个虚拟主机和动态Web站点。 同时,本书也介绍了安全、缓存和公共网关接口等高级主题,以及如何使用Nginx进行日志处理、性能优化和Web服务监测。此外,本书还涉及了Nginx与PHP、Python、Ruby等语言的集成,以及与MySQL和Redis等数据库的交互。 总之,《nginx完全开发指南》对Nginx的开发和应用提供了全面的指导和实例,既适合初学者,也适合有经验的开发人员。同时,该书结合了开发和实践,为读者提供了深入了解Nginx并灵活应用的能力和方法。 ### 回答3: 《Nginx完全开发指南》是一本面向Linux系统管理员和开发人员的实用指南,适合初学者和有一定经验的人员学习使用。本书通过详细讲解Nginx服务器的安装、配置、请求处理等方面的内容,让读者掌握使用Nginx搭建Web服务器的技能。 该书首先介绍了Nginx服务器的概述和整体架构,接着深入探讨了Nginx的安装和配置方法,包括如何进行源码编译、模块加载、运行环境配置等方面的内容。其次,该书详细分析了Nginx服务器的请求处理机制和动态模块的编写方法,帮助读者深入了解Nginx服务器的运行原理和核心功能。 此外,本书还介绍了Nginx服务器的高级应用和优化技巧,例如反向代理、负载均衡、SSL加密、缓存控制等方面的内容。这些内容可以帮助读者在实际工作中更好地运用Nginx服务器,提高服务器的性能和可靠性。 总体来说,《Nginx完全开发指南》是一本非常实用的书籍,内容深入浅出,易于理解,适合初学者和有一定经验的读者阅读和学习。对于需要使用Nginx服务器搭建Web应用的开发人员和系统管理员来说,该书是一本不可多得的好书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值