当前位置: 首页 > news >正文

Nginx(面试)

NGINX

速记问答

Q 什么是Nginx?它的主要特点是什么?

A Nginx是一个高性能的开源Web服务器和反向代理服务器。它以高并发、低内存消耗和高稳定性著称。

Q Nginx与Apache Web服务器有什么区别?

A Nginx与Apache相比,更适用于处理高并发和静态内容。它使用异步、事件驱动的架构,占用更少的内存,并能够更好地处理静态文件和反向代理。

Q 如何在Nginx中配置虚拟主机(Virtual Hosts)?

A 可以在Nginx的配置文件中使用server块来定义不同域名或IP的虚拟主机,并配置相应的站点设置和规则。

Q 如何在Nginx中配置负载均衡?

A 可以使用Nginx的upstream模块配置负载均衡。通过定义多个后端服务器和相应的负载均衡算法,Nginx可以将请求分发到不同的后端服务器。

Q 如何实现Nginx的反向代理功能?

A 可以使用Nginx的proxy_pass指令配置反向代理。将请求代理到指定的后端服务器,Nginx作为中间层接收请求,并将响应转发给客户端。

Q 如何在Nginx中配置SSL/TLS加密?

A 可以使用Nginx的ssl_certificatessl_certificate_key指令配置SSL/TLS证书和私钥,启用HTTPS安全连接。

Q 如何限制对Nginx服务器的访问?

A 可以使用Nginx的allowdeny指令配置访问控制列表(ACL),限制特定IP地址或IP范围的访问。

Q 如何在Nginx中实现URL重写和重定向?

A 可以使用Nginx的rewrite指令配置URL重写规则,将特定的URL重写为其他URL。可以使用returnrewrite指令实现URL重定向。

Q 如何配置Nginx实现静态文件缓存?

A 可以使用Nginx的expiresadd_header指令配置静态文件的缓存策略,控制浏览器缓存文件的时间和缓存头信息。

Q 如何在Nginx中配置HTTP G=897zip压缩?

A 可以使用Nginx的gzip指令启用HTTP Gzip压缩,将服务器响应压缩后发送给客户端,减少传输数据量。

Q 什么是Nginx的反向代理和正向代理?它们的区别是什么?

A Nginx的反向代理是指Nginx作为客户端与后端服务器进行通信,并将请求代理给后端服务器。正向代理是指Nginx作为服务器接收客户端请求,并代理客户端与目标服务器进行通信。区别在于代理的方向和目的。

Q Nginx支持哪些负载均衡算法?如何配置?

A Nginx支持的负载均衡算法包括轮询(round-robin)、IP哈希(ip_hash)、最少连接(least_conn)等。可以使用Nginx的upstream模块的load_balance指令来配置负载均衡算法。

Q 如何实现Nginx的日志切割和轮转?

A 可以使用Nginx的logrotate工具,将日志文件进行切割和轮转。可以配置logrotate工具的配置文件,定期执行日志切割操作。

Q 如何在Nginx中配置HTTP请求限速?

A 可以使用Nginx的limit_req指令配置HTTP请求的限速。可以设置请求的速率限制和可接受的突发请求的数量。

1. Nginx基本概念和特点

1.1 Nginx的主要特点

Nginx是一款HTTP服务器与反向代理服务器。可以作为一个HTTP服务器进行网站的发布处理 ,同时也可以作为反向代理作为负载均衡的实现

Nginx占有内存少,并发能力强。高度的模块化和自由软件许可证使得第三方模块非常丰富。Nginx一个跨平台服务器。

1.2 Nginx与Apache的差异

Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器;Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;Nginx避免子进程的概念,Apache是基于子进程的。

Nginx支持热部署,Apache不支持热部署;Nginx对于静态文件处理具有更高效率,Apache相对一般;Nginx在反向代理场景具有明显优势,Apache相对一般。

1.3 Nginx主要应用场景

http服务 , 虚拟主机 , 正反代理

1.4 Nginx支持的访问控制方式

连接限制 : 支持对连接频率/请求频率/来源进行限制 ,防止DDOS攻击

IP限制 :实现基于IP的访问控制 , 但通过代理可以绕过限制

帐号限制 : 实现用账户密码的登录限制

流量限制 :实现客户端传送响应的速率限制

2. Nginx的工作原理

  • Nginx启动都会创建一个Master进程和多个Worker进程;

    • Master进程负责管理众多Worker进程,包括启动,停止,重新配置等操作。
    • Worker进程是真正处理请求的进程,每个Worker进程都有一个事件驱动的循环,用于接收和处理客户端的请求。
  • 当客户端发送请求时,请求会被发送到Nginx的监听端口,Nginx会根据配置文件的规则将请求发给对应的Worker进程。

  • Worker进程接收到请求后,会根据规则进行处理,包括静态文件的读取和动态请求的转发。

  • Worker进程处理完请求后,会将响应返回客户端。

  • 在处理请求的过程中,Nginx会使用epoll或select等事件驱动机制,实现高效的IO多路复用,从而提高并发处理能力。

3. Nginx的优化技巧

  • 隐藏版本信息
  • 隐藏Nginx要修改的源代码
  • 更改Nginx服务的默认用户
  • 降权启动Nginx
  • 优化Nginx的进程个数
  • 绑定不同的Nginx到不同的CPU上
  • Nginx事件处理模型优化
  • 调整Nginx单个进程允许客户端最大连接数
  • 配置Nginx Worker进程最大打开文件数
  • 开机高效文件传输模式
  • Nginx gzip压缩实现性能优化
  • 编写脚本实现日志轮讯,不记录无用的日志,修改日志访问权限
  • 根据扩展名限制程序和文件访问
  • 限制网站来源的IP访问
  • 配置Nginx禁止非法域名解析访问企业网站
  • Nginx防爬虫优化
  • 控制Nginx并发连接数量

4. Nginx的日志管理

  • nginx 具备非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过 log_format 命令来定义

    • access_log:访问日志;
    • log_format:日志格式;
    • rewrite_log:重定向日志;
    • error_log:错误日志;
  • 日志切割脚本(以access.log为例)

    • 目地:每天的0点0分把nginx日志重命名为日期后缀格式,并重新生成新日志文件。
#nginx日志切割脚本
#author: http://www.nginx.cn
#!/bin/bash
#日志文件存放目录
logs_path='/usr/local/nginx/logs/'
#pid文件位置
pid_path='/usr/local/nginx/nginx.pid'
#重命名日志文件
mv ${logs_path}access.log ${logs_path}access_$(date -d 'yesterday' +'%Y%m%d').log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`
设置corntab定时任务
0 0 * * * bash /usr/local/nginx/nginx_log.sh

5. Nginx的负载均衡和反向代理

6.1 upstream模块 :使用upstream模块定义一个服务器组,配置后端服务器。

6.2 权重分配 :为upstream中的服务器分配权重 ,实现不用的负载分配策略。

6.3 健康检查 :配置健康检查来监控后端服务器的状态,并将请求路由到健康的服务器。

6.4 持久链接 : 使用keepalive指令保持与后端服务器的持久连接,减少连接开销。

6.5 IP哈希 : 使用ip_hash指令实现基于客户端IP的会话持久性,以提高缓存效率和用户体验。

6. Nginx的配置文件解析

  • Nginx 主配置文件 /etc/nginx/nginx.conf 是一个纯文本类型的文件,整个配置文件是以区块的形式组织,通常每一个区块以一对大括号{}来表示开始与结束。

    • 如果使用yum安装主配置文件就在/etc/nginx/nginx.conf ,如果是编译安装的,那么配置文件在编译时所指定的目录。
  • Main 位于 nginx.conf 配置文件的最高层;

    • Main层配置的参数对所有Server都生效。
  • Main 层下可以有 Event、HTTP 层;

    • events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接。
    • http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
  • Http 层下面允许有多个 Server 层,用于对不同的网站做不同的配置;

    • 通常 Server 配置在独立的/etc/nginx/conf.d/*.conf中,通过引用的方式调用,如下/etc/nginx/conf.d/default.conf:

      Server 块也被叫做“虚拟主机”部分,它描述的是一组根据不同 server_name 指令逻辑分割的资源

  • Server 层下面允许有多个 Location,用于对不同的路径进行不同模块的配置。

相关文章:

Nginx(面试)

NGINX 速记问答 Q 什么是Nginx?它的主要特点是什么? A Nginx是一个高性能的开源Web服务器和反向代理服务器。它以高并发、低内存消耗和高稳定性著称。 Q Nginx与Apache Web服务器有什么区别? A Nginx与Apache相比,更适用于处…...

net::ERR_SSL_PROTOCOL_ERROR

小程序 发起网络请求 解决: 如果还没有申请SSL证书,那就直接把https请求改为http 测试可以用 上线不推荐...

BaseDao封装增删改查(超详解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍对数据库中表中的数据进行增改删查询,封装一个工具类(BaseDao)的详细使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 &…...

【Python操作基础】——元组

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…...

光伏投融资该如何计算?

光伏投融资是光伏产业发展过程中的重要环节,其计算涉及到多个方面,包括项目规模、预期收益、成本分析、风险评估等。合理的投融资计算能够为光伏项目的实施提供资金保障,同时也能够降低投资风险,提高项目的经济效益。 首先&#x…...

【更新中】Leetcode中遇到的最短路径算法

dijsktra算法模板: def dijkstra(x):#x表示出发点dis[inf]*n #dis记录从x出发到各个点的最短距离,初始化为infdis[x]0 #源点到自己的距离为0vis[False]*n #检查各个点是否访问过for _ in range(n-1): #检查除了源点的其他n-1个点,更新dis…...

Git学习笔记之基础

本笔记是阅读《git pro》所写,仅供参考。 《git pro》网址https://git-scm.com/book/en/v2 git官网 https://git-scm.com/ 一、git起步 1.1、检查配置信息 git config --list查看所有的配置以及它们所在的文件 git config --list --show-origin可能有重复的变量名…...

STCubeIDE 编译bootloader

头文件重复引用解决办法。 参考:STM32CubeIDE IAP原理讲解,及UART双APP交替升级IAP实现-CSDN博客 移植到Air32时,RAM的大小(无论boot程序还是app 程序) 尽量不动,如果动了会影响最终的 APP 跳转 flash 大小可以随意修改&#xf…...

Python学习:函数

函数定义 在Python中,函数(Function)是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次,提高代码的可读性和可维护性。以下是定义函数的基本语法和结构: def function_name(parameters):&…...

docker run 使用 -p 命令一直显示端口被占用

解决办法 将 -p 换成 --net host 例如: docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /root/oneapi/data:/data justsong/one-api # 换成 docker run --name one-api -d --restart always --net...

Rust 实战练习 - 1. 输入,输出,环境变量,字符,字符串

目标: 获取程序命令行参数标准输入输出获取环境变量字符串,字符初步学习 cargo传递参数,需要加上-- use std::{env, ffi::OsString, io, io::Write};fn main() {println!("OS Env: {:?} > {:?}", env::current_dir().unwra…...

RuoYi-Vue-Plus(登录流程)

一、前端登录请求 登录按钮: src\views\login.vue 页面中登录片段,调用了handleLogin 方法,如下: @click.native.prevent="handleLogin" <el-button:loading="loading"size="medium"type="primary"style="width:100%;&qu…...

【数学】 【分数】 【字符串】972. 相等的有理数

本文涉及知识点 数学 分数 字符串 LeetCode972. 相等的有理数 给定两个字符串 s 和 t &#xff0c;每个字符串代表一个非负有理数&#xff0c;只有当它们表示相同的数字时才返回 true 。字符串中可以使用括号来表示有理数的重复部分。 有理数 最多可以用三个部分来表示&…...

【4】DongshanPI-Seven 应用开发_文件IO

目录 1.文件IO1.1 文件IO分类1.2 查看系统调用IO用法 2. open 函数3. write 函数4. read 函数5 dup函数 1.文件IO 1.1 文件IO分类 在Linux系统中&#xff0c;一切都是“文件”&#xff1a;普通文件、驱动程序、网络通信等。所有的操作都是通过文件IO来操作的。 在Linux操作文…...

SEO 的未来:GPT 和 AI 如何改变关键词研究

谷歌Gemini与百度文心一言&#xff1a;AI训练数据的较量 介绍 想象一下&#xff0c;有一个工具不仅可以理解错综复杂的关键字网络&#xff0c;还可以预测搜索引擎查询的变化趋势。 这就是生成式预训练 Transformer (GPT) 和其他人工智能技术发挥作用的地方&#xff0c;以我们从…...

面试八股文之JAVA基础

JAVA基础 DNS、CDN&#xff1f;如何实现对象克隆?父子类静态代码块, 非静态代码块, 构造方法执行顺序?String s new String("abc") 创建了几个对象, 分别放到哪里?OSI网络模型七层&#xff1f;应用层协议&#xff1f;http协议和https协议区别&#xff1f;传输层协…...

网络连接中——长连接和短连接详解

一、TCP功能 TCP在真正开始进行数据传输之前,Server 和 Client 之间必须建立一个连接。当数据传输完成后,双方不再需要这个连接时,就可以释放这个连接。 TCP连接的建立是通过三次握手,而连接的释放是通过四次挥手。所以说,每个TCP连接的建立和释放都是需要消耗资源和时间…...

PEReDi 完全隐私的央行数字货币方案

第一个对完全隐私保护建模的方案&#xff0c;基于账户模型&#xff0c;要求交易双方都在线。 角色分类 中央银行 B B B&#xff1a;负责发行数字货币和货币政策&#xff0c;但不控制用户账户的状态&#xff0c;没有能力对交易的发送者或接收者进行去匿名化或披露与特定交易相…...

yolov5+pyside6+登录+用户管理目标检测可视化源码

一、软件简介 这是基于yolov5目标检测实现的源码&#xff0c;提供了用户登录功能界面&#xff1b; 用户需要输入正确的用户名和密码才可以登录。如果是超级管理员&#xff0c;可以修改普通用户的信息&#xff0c;并且在检测界面的右上角显示【管理用户】按钮。 支持图片、视频、…...

电脑如何设置个性便签 电脑个性便签分享

每次坐在电脑前&#xff0c;我都仿佛置身于一片信息的海洋。工作、生活、学习&#xff0c;方方面面的事情都需要我用心去记录。在这样一个快节奏的时代&#xff0c;电脑无疑成了我最得力的助手。但记事的时候&#xff0c;我总希望有一个既方便又有个性的工具&#xff0c;能让我…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...