首页 > 系统相关 >Nginx(面试)

Nginx(面试)

时间:2024-03-30 10:31:37浏览次数:15  
标签:请求 nginx 配置 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,面试,服务器,日志
From: https://blog.csdn.net/2401_82773077/article/details/137052175

相关文章

  • Java IO面试题(四)
    ###1.Netty中的事件循环模型是如何实现异步非阻塞IO的?Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。它主要基于JavaNIO(非阻塞IO)构建,但提供了更高级的抽象和工具,使得开发者能够更容易地编写出高效且易于维护的网络应用......
  • Java IO面试题(五)
    1.什么是Java的AsynchronousServerSocketChannel?与ServerSocketChannel相比有何优势?Java的AsynchronousServerSocketChannel是一个面向流的侦听套接字的异步通道,用于处理网络I/O操作。它是JavaNIO2.0(也称为NewI/O)的一部分,提供了异步非阻塞的I/O操作。AsynchronousServ......
  • Java面试必问题22:如何创建线程池(偏重点)&&创建线程池的注意事项
    企业最佳实践:不要使用Executors直接创建线程池,会出现OOM问题,要使用ThreadPoolExecutor构造方法创建,引用自《阿里巴巴开发手册》【强制】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽......
  • Java面试必问题21:线程池核心参数
    publicThreadPoolExecutor(intcorePoolSize,                        intmaximumPoolSize,                        longkeepAliveTime,                        TimeUnitunit,        ......
  • 下载阿里云服务器的SSL证书,并部署到Nginx服务中
    环境说明linux系统版本:lsb_release-a  JDK版本:1.8  不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。.1.登录阿里云服务器,下载SSL证书。  选择SSL证书->免费证书->下载。  选择Nginx证书进行下载,因为真实访问的时候,都是访问ng......
  • redis面试题-持续更新~
    1、我没有执行bgsave条件,执行了shutdown之后,数据会不会丢?不会丢,因为只要执行shutdown会默认,会先执行一条bgsave。 2、kill-9会丢数据,kill不会丢数据,为什么?kill-9比较暴力,直接把父进程砍掉了,kill(或者pkill)会让redis把活干完(可以理解为kill为正常的推出流程,和前面......
  • 深入解析Java继承机制:面向对象编程的核心探究【Java面试题】
    作为一名对技术充满热情的学习者,我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代,我远非专家,而是一位不断追求进步的旅行者。通过这篇博客,我想分享我在某个领域的学习经验,与大家共同探讨、共同成长。请大家以开放的心态阅读,相信你们也会在这段知识之......
  • 广州嘉为科技java后台面试(已oc)
    前言我就喜欢这种响应及时迅速的hr,面完十分钟之后说面试通过了,oc,孩子的第一个oc啊TAT那个腾讯云1小时45分钟的面试还挂了真的让我太难过了,真·鹅子粉转黑跟这个公司约面经历也挺神奇的我3.12就跟hr发起对话了结果已读不回XD然后20号再去骚扰就找我要简历21号跟我约面22......
  • windows下nginx-rtmp-module的编译方法
    ForewordLinux为当前nginx添加rtmp模块非常的方便,sudo./configure--add-module+sudomake就完事儿了,但是windows比较复杂,没有包管理器,所以各个模块的源码要自己找,下面是我在windows11下的nginxwithrtmpmodule的编译记录。编译器工具链大概有msvctoolchain,perl......
  • Spring Boot 获取 bean 的 3 种方式!还有谁不会?,Java面试官
    @AutowiredprivatestaticAutoMethodDemoServicestaticAutoMethodDemoService;@PostConstructpublicvoidinit(){staticAutoMethodDemoService=autoMethodDemoService;}publicstaticStringgetAuthorizer(){returnstaticAutoMethodDemoService.test();}}......