Nginx:常见的面试题和答案

这篇具有很好参考价值的文章主要介绍了Nginx:常见的面试题和答案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 什么是Nginx?

答:Nginx是一款高性能的Web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,同时用于处理高并发的请求,提供快速、可靠的服务。

2. Nginx的优点是什么?

Nginx的优点包括:

  • 高性能:Nginx采用异步非阻塞的方式处理请求,可以处理高并发的请求;
  • 可扩展性:Nginx支持动态模块化,可以根据需要添加或删除模块;
  • 可靠性:Nginx具有良好的稳定性和可靠性,能够保证服务的连续性;
  • 灵活性:Nginx支持多种协议和数据格式,可以用于不同的应用场景。

3. Nginx的配置文件是什么?

答:Nginx的配置文件是nginx.conf文件,通常位于/etc/nginx目录下。配置文件包括全局配置、http配置和server配置等部分,可以用来设置Nginx的运行参数、监听端口、代理规则等。

4. Nginx如何处理静态文件?

答:Nginx可以通过配置静态文件目录来处理静态文件,具体步骤如下:
在nginx.conf文件中配置静态文件目录,例如:

location /static/ {
    root /var/www/;
}
  • 将静态文件放置在指定的目录下,例如/var/www/static/;
  • 通过访问http://localhost/static/filename的方式来访问静态文件。

5. Nginx如何处理动态请求?

答:Nginx可以通过反向代理的方式处理动态请求,具体步骤如下:
在nginx.conf文件中配置代理规则,例如:

location /api/ {
    proxy_pass http://localhost:8080/;
}
  • 将动态请求转发到指定的端口,例如http://localhost:8080/;
  • 在指定的端口上启动相应的应用程序,用于处理动态请求。

6. Nginx如何进行负载均衡?

答:Nginx可以通过配置upstream模块来进行负载均衡,具体步骤如下:

在nginx.conf文件中配置upstream模块,例如:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com;
}

将请求转发到指定的upstream组,例如:

location /api/ {
    proxy_pass http://backend/;
}

Nginx会自动将请求均衡地分配到多个服务器上,从而实现负载均衡。

7. Nginx如何进行HTTPS配置?

答:Nginx可以通过配置SSL模块来进行HTTPS配置,具体步骤如下:

在nginx.conf文件中配置SSL证书和密钥,例如:

ssl_certificate /path/to/ssl.crt;
ssl_certificate_key /path/to/ssl.key;

在server配置中添加SSL配置,例如:

server {
    listen 443 ssl;
    server_name example.com;
    ...
}

重新加载Nginx配置文件,使配置生效。

8. Nginx如何进行缓存配置?

答:Nginx可以通过配置缓存模块来进行缓存配置,具体步骤如下:

在nginx.conf文件中配置缓存目录,例如:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

在location配置中添加缓存配置,例如:

location /api/ {
    proxy_cache my_cache;
    proxy_cache_key $uri$is_args$args;
    proxy_cache_valid 200 60m;
}

Nginx会自动将请求的结果缓存到指定的目录中,从而提高访问速度。

9. 请列举 Nginx 的一些特性。

  • Nginx 服务器的特性包括:
  • 反向代理/L7 负载均衡器
  • 嵌入式 Perl 解释器
  • 动态二进制升级
  • 可用于重新编写 URL,具有非常好的 PCRE 支持

10. 请解释 ngx_http_upstream_module 的作用是什么?

答:ngx_http_upstream_module 用于定义可通过 fastcgi 传递、proxy 传递、uwsgi传递、memcached 传递和 scgi 传递指令来引用的服务器组。

11. 请解释什么是C10K问题?

答:C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。
从网络编程技术的角度来说,主要思路为:

  • 为每个连接分配一个独立的线程/进程。
  • 同一个线程/进程同时处理多个连接(IO 多路复用)

12. 请陈述stub_status和sub_filter指令的作用是什么?

答:Stub_status指令:该指令用于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数

Sub_filter指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据

13. 用Nginx服务器解释-s的目的是什么?

答:用于运行Nginx -s参数的可执行文件。

14. 解释如何在 Nginx 中获得当前的时间?

答:要获得 Nginx 的当前时间,必须使用 SSI 模块、 d a t e g m t 和 date_gmt 和 dategmtdate_local 的变
量。

Proxy_set_header THE-TIME $date_gmt;

15. 解释 Nginx 是否支持将请求压缩到上游?

答:您可以使用 Nginx 模块 gunzip 将请求压缩到上游。gunzip 模块是一个过滤器,
它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。

16. 为什么不使用多线程?

答:Nginx:采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换,所以才使得Nginx支持更高的并发。

17. Nginx的进程模型

答:master-worker模式 在master-worker模式下,有一个master进程和至少一个的worker进程。
单进程模式。 单进程模式只有一个进程

18. 为什么Nginx性能这么高?

答:因为它的事件处理机制:异步非阻塞事件处理机制运用了epoll模型,提供了一个队列,排队解决。

19. 为什么要做动静分离?

  • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
  • 让静态的资源只走静态资源服务器,动态的走动态的服务器。
  • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
  • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

20. 什么叫CDN服务?

答:CDN ,即内容分发网络。其目的是,通过在现有的 Internet中 增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度。一般来说,因为现在 CDN 服务比较大众,所以基本所有公司都会使用 CDN 服务。

21. Nginx负载均衡的算法怎么实现的?策略有哪些?

为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

Nginx负载均衡实现的策略有以下五种:

  • 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

upstream backserver { 
 server 192.168.31.12; 
 server 192.168.31.13; 
} 
  • 权重 weight

    weight的值越大,分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

权重越高,在被访问的概率越大,如上例,分别是20%,80%。

upstream backserver { 
 server 192.168.0.12 weight=2; 
 server 192.168.0.13 weight=8; 
} 
  • ip_hash( IP绑定)
    每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题
upstream backserver { 
 ip_hash; 
 server 192.168.0.12:88; 
 server 192.168.0.13:80; 
} 
  • fair(第三方插件)
    必须安装upstream_fair模块。

对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。

哪个服务器的响应速度快,就将请求分配到那个服务器上。

upstream backserver { 
 server server1; 
 server server2; 
 fair; 
} 
  • url_hash(第三方插件)
    必须安装Nginx的hash软件包

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

upstream backserver { 
 server squid1:3128; 
 server squid2:3128; 
 hash $request_uri; 
 hash_method crc32; 
} 

22. Nginx限流怎么做的?

答:Nginx限流就是限制用户请求速度,防止服务器受不了,限流有3种:

  • 正常限制访问频率(正常流量)
  • 突发限制访问频率(突发流量)
  • 限制并发连接数
    Nginx的限流都是基于漏桶流算法

23. Nginx常见的优化配置有哪些?

  • 调整worker_processes
    指Nginx要生成的worker数量,最佳实践是每个CPU运行1个工作进程。

了解系统中的CPU核心数,输入:

$ grep processor / proc / cpuinfo | wc -401
  • 最大化worker_connections
    Nginx Web服务器可以同时提供服务的客户端数。与worker_processes结合使用时,获得每秒可以服务的最大客户端数
最大客户端数/秒=工作进程*工作者连接数

为了最大化Nginx的全部潜力,应将工作者连接设置为核心一次可以运行的允许的最大进程数1024。

  • 启用Gzip压缩
    压缩文件大小,减少了客户端http的传输带宽,因此提高了页面加载速度

建议的gzip配置示例如下:( 在http部分内)

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text / plain text / css application / json application / javascript text / xml application / xml + rss text / javascript;
  • 为静态文件启用缓存
    为静态文件启用缓存,以减少带宽并提高性能,可以添加下面的命令,限定计算机缓存网页的静态文件:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
  • Timeouts
    keepalive连接减少了打开和关闭连接所需的CPU和网络开销,获得最佳性能需要调整的变量可参考:
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
  • 禁用access_logs
    访问日志记录,它记录每个nginx请求,因此消耗了大量CPU资源,从而降低了nginx性能。

完全禁用访问日志记录

access_log off;

如果必须具有访问日志记录,则启用访问日志缓冲

access_log /var/log/nginx/access.log buffer = 4096k

24. Nginx与Apache选择?

Apache

  • apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache

  • apache 发展到现在,模块超多,基本想到的都可以找到

  • apache 更为成熟,少 bug ,nginx 的 bug 相对较多

  • apache 超稳定

  • apache 对 PHP 支持比较简单,nginx 需要配合其他后端用

  • apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

  • apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

Nginx

  • 轻量级,采用 C 语言 进行编写,同样的 web 服务,会占用更少的内存及资源

  • 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。

  • nginx 处理静态文件好,静态处理性能比 apache 高三倍以上

  • nginx 的设计高度模块化,编写模块相对简单

  • nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃

  • nginx 作为负载均衡服务器,支持 7 层负载均衡

  • nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器

  • 启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级

  • 社区活跃,各种高性能模块出品迅速

25. Nginx IO模型

答:Nginx 支持多种并发模型,并发模型的具体实现根据系统平台而有所不同。在支持多种并发模型的平台上,Nginx 自动选择最高效的模型。但我们也可以使用 use 指令在配置文件中显式地定义某个并发模型。

Nginx中支持的并发模型:

  • select
    IO 多路复用、标准并发模型。在编译 Nginx 时,如果所使用的系统平台没有更高效的并发模型,select 模块将被自动编译。configure 脚本的选项:–with-select_module 和 --without-select_module 可被用来强制性地开启或禁止 select 模块的编译。

  • poll
    IO 多路复用、标准并发模型。与 select 类似,在编译 Nginx 时,如果所使用的系统平台没有更高效的并发模型,poll 模块将被自动编译。configure 脚本的选项:–with-poll_module 和 --without-poll_module 可用于强制性地开启或禁止 poll 模块的编译。

  • epoll
    IO 多路复用、高效并发模型,可在 Linux 2.6+ 及以上内核可以使用。

  • kqueue
    IO 多路复用、高效并发模型,可在 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0, and Mac OS X 平台中使用。

  • /dev/poll
    高效并发模型,可在 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+, and Tru64 UNIX 5.1A+ 平台使用。

  • eventport
    高效并发模型,可用于 Solaris 10 平台,PS:由于一些已知的问题,建议使用/dev/poll替代。
    Nginx:常见的面试题和答案文章来源地址https://www.toymoban.com/news/detail-429307.html

到了这里,关于Nginx:常见的面试题和答案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试必备,Linux面试题和答案!

    ​ 作为 测试开发,对于Linux相关知识,不管是面试还是工作,多多少少你还是得会点。 再说了,现在行情极差,要求又高, linux也是面试重头戏,所以,今天给你分享Linux相关面试题和答案。 1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示

    2024年04月22日
    浏览(39)
  • 十个docker面试题和答案

    以下是十个 Docker 面试题和答案: 1.Docker 是什么?它与虚拟机的区别是什么? 答:Docker 是一种开源的容器化平台,可以使开发人员和运维人员轻松地创建、部署和运行应用程序。Docker 容器和虚拟机最大的区别在于,Docker 容器共享主机操作系统的内核,因此更加轻量级、快速

    2024年02月07日
    浏览(44)
  • 经典JavaScript手写面试题和答案

    2024年02月06日
    浏览(67)
  • C++ 程序猿面试题和答案

    1 . 下列那种语言是面向对象的 (C) A. C          B. PASCAL        C. C++          D. FORTRAN77 2 .在 Windows9x 下,可以进入 MS-D0S 方式。当在 DOS 提示符下键入 ( B ) 命令后,系统将退出 MS-DOS方式,返回到 WIndows 方式。 A. CLOSE   B. EXIT       C. QUIT        D. RETUR

    2024年02月08日
    浏览(56)
  • 8道ES高频面试题和答案

    如何在Elasticsearch中执行模糊搜索(Fuzzy Search)? 解答: 在Elasticsearch中,可以使用模糊搜索(Fuzzy Search)来查找与给定术语相似的文档。模糊搜索是一种基于编辑距离的近似匹配方法,可以处理拼写错误或相似词的情况。 在一个电商平台的商业项目中,可以使用模糊搜索来

    2024年02月07日
    浏览(38)
  • 精选Golang高频面试题和答案汇总

    大家好,我是阳哥。 之前写的《 GO必知必会面试题汇总》,已经阅读破万,收藏230+。 也欢迎大家收藏、转发本文。 这篇文章给大家整理了17道Go语言高频面试题和答案详解,每道题都给出了 代码示例 ,方便大家更好的理解。 Go语言中的并发安全性是什么?如何确保并发安全

    2024年02月11日
    浏览(46)
  • 精选8道ES高频面试题和答案,后悔没早点看。

    不要再干巴巴的背诵八股文了,一定要结合具体场景回答面试问题! 我们在回答面试题的时候,不能干巴巴的去背八股文,一定要结合应用场景,最好能结合过去做过的项目,去和面试官沟通。 这些场景题虽然不要求我们手撕代码,但是解决思路和关键方法还是要烂熟于心

    2024年02月11日
    浏览(42)
  • 10年测开经验面试35K公司后,吐血整理出高频面试题和答案!

    在当今竞争激烈的职场环境中,拥有丰富的测试开发经验已成为众多企业青睐的重要条件之一。而在面试过程中,高频面试题更是能够考察应聘者的实际能力和知识水平。本文作者具备10年的测试开发经验,并通过面试获得了35K公司的职位,特意整理出了高频面试题及其答案

    2024年02月21日
    浏览(50)
  • HTTP规范中的那些容易掉进去的坑,java常用面试题和答案

    1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量、静态方法、静态类。 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不产生static 变量的拷贝,而是该类所有实例变量共用同一个 static 变量。也就是说这个静态变量只加载

    2024年03月18日
    浏览(46)
  • FPGA面试试题(附个人整理答案)

    一、什么是FPGA,内部资源构成?        答:FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种可以通过编程来配置的半导体设备。FPGA由成千上万个 可配置逻辑块 (CLB)和 可编程的互联资源 组成,可以实现复杂的数字计算功能。与其他类型的集成电路相比,如专用

    2024年04月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包