Nginx面试题

Nginx 面试题


序号 内容 链接地址
1 Java面试题 https://blog.csdn.net/golove666/article/details/137360180
2 JVM面试题 https://blog.csdn.net/golove666/article/details/137245795
3 Servlet面试题 https://blog.csdn.net/golove666/article/details/137395779
4 Maven面试题 https://blog.csdn.net/golove666/article/details/137365977
5 Git面试题 https://blog.csdn.net/golove666/article/details/137368870
6 Gradle面试题 https://blog.csdn.net/golove666/article/details/137368172
7 Jenkins 面试题 https://blog.csdn.net/golove666/article/details/137365214
8 Tomcat面试题 https://blog.csdn.net/golove666/article/details/137364935
9 Docker面试题 https://blog.csdn.net/golove666/article/details/137364760
10 多线程面试题 https://blog.csdn.net/golove666/article/details/137357477
11 Mybatis面试题 https://blog.csdn.net/golove666/article/details/137351745
12 Nginx面试题 https://blog.csdn.net/golove666/article/details/137349465
13 Spring面试题 https://blog.csdn.net/golove666/article/details/137334729
14 Netty面试题 https://blog.csdn.net/golove666/article/details/137263541
15 SpringBoot面试题 https://blog.csdn.net/golove666/article/details/137192312
16 SpringBoot面试题1 https://blog.csdn.net/golove666/article/details/137383473
17 Mysql面试题 https://blog.csdn.net/golove666/article/details/137261529
18 Redis面试题 https://blog.csdn.net/golove666/article/details/137267922
19 PostgreSQL面试题 https://blog.csdn.net/golove666/article/details/137385174
20 Memcached面试题 https://blog.csdn.net/golove666/article/details/137384317
21 Linux面试题 https://blog.csdn.net/golove666/article/details/137384729
22 HTML面试题 https://blog.csdn.net/golove666/article/details/137386352
23 JavaScript面试题 https://blog.csdn.net/golove666/article/details/137385994
24 Vue面试题 https://blog.csdn.net/golove666/article/details/137341572
25 Ajax面试题 https://blog.csdn.net/golove666/article/details/137421929
26 Python面试题 https://blog.csdn.net/golove666/article/details/137385635
27 Spring Cloud Alibaba面试题 https://blog.csdn.net/golove666/article/details/137372112
28 SpringCloud面试题 https://blog.csdn.net/golove666/article/details/137345465
29 RabbitMQ面试题 https://blog.csdn.net/golove666/article/details/137344188
30 Dubbo面试题 https://blog.csdn.net/golove666/article/details/137346834
31 Elasticsearch面试题 https://blog.csdn.net/golove666/article/details/137348184
32 Oracle面试题 https://blog.csdn.net/golove666/article/details/137350452
33 Android面试题 https://blog.csdn.net/golove666/article/details/137358253
34 Kafka面试题 https://blog.csdn.net/golove666/article/details/137358607
35 ZooKeeper面试题 https://blog.csdn.net/golove666/article/details/137359255
36 Kubernetes面试题 https://blog.csdn.net/golove666/article/details/137365540
37 Flink面试题 https://blog.csdn.net/golove666/article/details/137369555
38 Hadoop面试题 https://blog.csdn.net/golove666/article/details/137370194
39 Hive面试题 https://blog.csdn.net/golove666/article/details/137371835
40 Hbase面试题 https://blog.csdn.net/golove666/article/details/137381853
41 Spark面试题 https://blog.csdn.net/golove666/article/details/137382815
42 Golang面试题 https://blog.csdn.net/golove666/article/details/137395486
43 Solr面试题 https://blog.csdn.net/golove666/article/details/137420799

1 Nginx 基础知识

1.1 什么是 Nginx?

Nginx(发音为 “engine x”)是一款开源、高性能的 HTTP 和反向代理服务器。它也常用作负载均衡器和邮件代理服务器。由 Igor Sysoev 开发,并首次公开发布于2004年。Nginx 以其稳定性、丰富的特性集、简单的配置和低资源消耗而广受欢迎。Nginx 特别适用于处理静态内容,并通过反向代理的方式提供动态 Web 应用服务器的支持,能够提供高并发的连接处理能力。它是构建于现代处理器、多线程、事件驱动架构之上,以异步非阻塞方式运行的网络服务器,这使得 Nginx 在高负载环境下可以表现出比传统服务器更优越的性能。

1.2 Nginx 是如何处理 HTTP 请求的?

Nginx 是一种高性能的 HTTP 和反向代理服务器,同时也是一个通用的 TCP/UDP 代理服务器。它是为性能和并发性设计的。Nginx 处理 HTTP 请求的方式分为几个主要部分:

1. 接收请求

当客户端通过网络发送 HTTP 请求到 Nginx 服务器时,Nginx 首先通过监听在特定 IP 地址和端口上的监听连接来接收该请求。

2. 处理请求

一旦 Nginx 接收到请求,它会根据配置文件中的指令(如 nginx.conf)来处理请求。

  • 请求解析:Nginx 解析请求行、请求头和请求体(如果存在)。
  • 服务器选择:Nginx 根据请求的主机名(Host 头)和 URI 来选择要处理请求的服务器和位置块。
  • 配置查找:Nginx 根据请求的 URI 查找匹配的 location 指令,并决定如何处理请求(如代理请求、返回静态文件、重定向等)。

3. 名称解析

如果请求被配置为代理到上游服务器,Nginx 将执行名称解析将主机名转换为 IP 地址。

4. 请求代理

  • 代理传递:如果被配置为反向代理,Nginx 将请求传递给上游服务器,然后等待响应。
  • 负载均衡:如果配置了多个上游服务器,Nginx 可能会使用负载均衡算法来选择一个服务器。

5. 响应处理

一旦上游服务器处理完成请求,并返回 HTTP 响应给 Nginx,Nginx 会将这个响应转发回原始的客户端。

6. 资源清理和请求结束

完成请求后,Nginx 会清理分配给该请求的资源,关闭连接或根据 keepalive 指令保持连接打开等待新的请求。

处理高并发的能力

Nginx 能够高效地处理大量并发连接,主要归功于它的事件驱动架构。Nginx 使用异步非阻塞的方式处理请求,使用较少的线程可以处理大量的连接,处理每个连接都是非常轻量级的:

  • worker 进程:Nginx 在启动时会创建多个 worker 进程。每个 worker 进程都能够独立处理请求,极大地提升了并发处理能力。
  • 事件模型:每个 worker 进程都使用一个高效的事件循环模型来检测并响应 I/O 事件,例如网络请求、网络响应以及计时器事件。

Nginx 处理 HTTP 请求的方式使其成为极其高效和可扩展的服务器。它既可以作为静态资源的 web 服务器,也可以作为代理服务器来转发请求到应用服务器,并实现缓存、负载均衡、SSL 终端、错误处理和 HTTP 响应处理等一系列功能。

1.3 比较 Nginx 和 Apache 的主要差异。

Nginx和Apache都是功能强大的网络服务器,广泛用于网站和应用程序的服务托管。它们各自有一系列的优点和缺点,使用选择通常取决于特定的性能需求、安全要求、可伸缩性、资源消耗和易用性等因素。

性能:

  • Nginx

    • 使用异步事件驱动的架构,处理请求不依赖于线程或进程,能够以更低的内存消耗支持高并发连接,特别是在静态内容传送和反向代理等场景中表现得很好。
    • 非阻塞的连接处理方式使其在高负载环境下不容易产生性能瓶颈。
  • Apache

    • 默认使用基于进程或线程的阻塞式架构来处理请求,虽然可以通过MPM(多处理模块)调整处理请求的方式,但在高并发和静态内容服务上通常不如Nginx高效。

配置和灵活性:

  • Nginx

    • 配置比较简单,针对现代的HTTP功能(如WebSocket、HTTP/2)有更好的原生支持。
    • 不如Apache有同样广泛的模块支持。扩展能力略逊于Apache,但它的核心功能已经足以适应大多数用例。
  • Apache

    • 配置非常灵活,有大量的模块可以添加各种功能,对动态内容(如运行PHP脚本)有很好的支持。
    • .htaccess文件的使用为网站的分布式配置提供了方便,无需修改主服务器配置即可进行授权、重写规则等设置。

可伸缩性和可靠性:

  • Nginx

    • 在为现代高流量网站和应用服务时表现出色,良好的反向代理和负载均衡能力使其常被用于微服务架构中。
    • 具有很好的缓存能力,能够作为一个有效的缓存服务器来减少对后端应用服务器的请求。
  • Apache

    • 具有成熟的模块和社区支持,大量的第三方模块可以扩展其功能。
    • 好的动态内容支持使其广泛应用于共享托管环境和PHP应用服务中。

安全性:

  • NginxApache 都提供了强大的安全特性和模块,可以配置SSL/TLS,IP地址过滤,身份认证等。
  • Apache的.htaccess特性可以让用户在不触碰主配置的情况下实现目录级别的安全设置。

在某些环境中,Nginx和Apache也可以组合使用,例如,使用Nginx作为静态内容的服务器和负载均衡器,而Apache处理动态内容。最终决定使用哪种服务器软件通常取决于你的需求、现有基础设施和团队熟悉程度。

2 配置和性能优化

2.1 描述 Nginx 配置文件的结构。

Nginx 是一个高性能的 HTTP 和反向代理服务器,它的配置文件是用来定义和控制 Nginx 服务器行为的文本文件。Nginx 配置文件的结构是分层次的、使用块结构化的,下面是 Nginx 配置文件的基础结构组成:

主配置结构

Nginx 配置文件通常被分为几个部分:

  1. 全局块(Global block):
    定义全局设置,比如用户、工作进程数和日志文件的位置,它通常位于配置文件的最顶部。
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
  1. events 块
    配置影响 Nginx 服务器或与客户端网络连接相关的设置。
events {
    worker_connections 1024;
}
  1. http 块
    包含了最多的配置指令,支持 HTTP 协议所需的各种配置,这些指令可以影响整个服务器的工作方式。
http {
    # 全局 HTTP 配置
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    # 日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # HTTP 服务器
    server {
        # 监听端口
        listen       80;
        server_name  localhost;
        
        # 文档根目录
        root         /usr/share/nginx/html;
        
        # 首页
        index        index.html index.htm;
        
        # URI 路径和文件映射
        location / {
            try_files $uri $uri/ =404;
        }
        
        # 其他 location 块...
    }
    
    # 其他服务器(虚拟主机)
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-en
  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
回答: nginx面试题高频问题包括如下几个方面: 1. Nginx中如何限制访问频率? 在Nginx中,可以使用ngx_http_limit_req_module模块来限制访问频率,其原理是基于漏桶算法实现的。可以在nginx.conf配置文件中使用limit_req_zone命令和limit_req命令来限制单个IP的请求处理频率。\[1\] 2. Nginx中如何判断某个IP不可访问? 可以使用Nginx的配置指令来判断某个IP是否可访问。例如,可以使用if语句来判断访问的IP地址是否为特定的IP,如果是,则返回403禁止访问。例如:if ($remote_addr = 192.168.9.115) { return 403; }\[2\] 3. Nginx和Apache的区别是什么? Nginx和Apache是两种常见的Web服务器,它们有一些核心区别。最核心的区别在于Nginx是异步的,多个连接可以对应一个进程,而Apache是同步的,一个连接对应一个进程。此外,Nginx是基于事件的Web服务器,而Apache是基于流程的Web服务器。Nginx在内存消耗和连接方面表现较好,适合负载均衡,而Apache在支持多种语言和插件方面更加灵活。\[3\] 4. 什么是动态资源和静态资源分离? 动态资源和静态资源分离是一种优化Web服务器性能的方法。动态资源是指需要经过服务器处理的资源,例如PHP脚本,而静态资源是指不需要经过服务器处理的资源,例如HTML文件、CSS文件、图片等。通过将动态资源和静态资源分别存放在不同的服务器或者不同的路径下,可以提高服务器的处理效率和响应速度。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Nginx常见面试题整理---40题](https://blog.csdn.net/qq_29974229/article/details/125718921)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

golove666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值