自学内容网 自学内容网

【面试全纪实 | Nginx 02】请回答,你真的熟悉Nginx吗?

🗺️博客地图​​​​​​​

📍1、你如何通过不同于80的端口开启Nginx?

📍2、是否有可能将Nginx的错误替换为502错误、503?

📍3、为什么Nginx性能这么高?

📍4、Nginx怎么处理请求的?

📍5、什么是正向代理和反向代理?

📍6、使用反向代理服务器的优点是什么?

📍7、怎么理解Nginx静态资源?

📍8、如何用Nginx解决前端跨域问题?

📍9、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?

📍10、请解释什么是C10K问题


1、你如何通过不同于80的端口开启Nginx?

为了通过一个不同的端口开启 Nginx ,你必须进入 /etc/Nginx/sites-enabled/ ,如果这是默认文 件,那么你必须打开名为 “default” 的文件。编辑文件,并放置在你想要的端口:

server {
    listen 81;
    ... ...
}

2、是否有可能将Nginx的错误替换为502错误、503?

502 =错误网关

503 =服务器超载

有可能,但是需要先将 fastcgi_intercept_errors 设置为 ON ,并使用错误页面指令。

server {
    listen 80;
    server_name example.com;
 
    location / {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_intercept_errors on;
        error_page 502 503 504 /custom_50x.html;
        root /var/www/html;
    }
}

3、为什么Nginx性能这么高?

‌        Nginx性能高的原因主要包括以下几个方面‌:

  • 异步非阻塞IO模型‌:Nginx采用异步非阻塞事件处理机制,这种方式使得Nginx可以像事件驱动的方式处理请求,不会因为阻塞等待IO而降低处理效率‌。
  • 多进程/多线程处理‌:Nginx采用多进程/多线程的方式处理请求,每个进程/线程独立处理请求,提高了并发处理能力,能够轻松处理大量并发请求‌。
  • IO多路复用模型‌:Nginx使用IO多路复用模型,如epoll,这种模型允许Nginx在事件发生时才将控制返回给程序,其他时候内核挂起进程,随时待命,提高了处理效率‌。
  • 模块化设计‌:Nginx的模块化设计使得代码结构简洁,功能扩展容易,减少了不必要的资源消耗,提高了性能‌。
  • 轻量级和高效‌:Nginx的代码量非常少,占用内存较少,能够在资源受限的系统中运行,且在高负载下不容易崩溃‌。
  • 高度可定制性‌:Nginx支持自定义模块和动态加载功能,开发人员可以根据实际需求进行二次开发,满足个性化需求‌。
  • 负载均衡‌:Nginx内置负载均衡模块,可以将请求分发到多个服务器上,分摊服务器负载,提高整体系统的处理能力‌。

        这些因素共同作用,使得Nginx在处理高并发、高负载的情况下表现出色,成为许多高性能网站和应用的优选服务器软件。

4、Nginx怎么处理请求的?

nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的 location,location就是实际地址

server {                    # 第一个Server区块开始,表示一个独立的虚拟主机站点
    listen 80;             # 提供服务的端口,默认80
    server_name localhost; # 提供服务的域名主机名
    location / {             # 第一个location区块开始
        root html;           # 站点的根目录,相当于Nginx的安装目录
        index index.html index.htm; # 默认的首页文件,多个用空格分开
    }                     # 第一个location区块结果
}

5、什么是正向代理和反向代理?

‌正向代理和‌反向代理是两种不同的代理服务器配置,它们在工作原理和使用方式上有显著的区别。‌

正向代理位于客户端和目标服务器之间,客户端向代理服务器发送请求,并由代理服务器代表客户端与目标服务器通信。反向代理则位于客户端和目标服务器之间,代理服务器接收客户端的请求后,将请求转发给内部网络上的服务器,并将结果返回给客户端。

通俗的讲,正向代理就是一个人发送一个请求直接就到达了目标的服务器,反向代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。

6、使用反向代理服务器的优点是什么?

  • 负载均衡‌:反向代理服务器可以将客户端请求动态地分配到多个后端服务器上,根据服务器的负载情况合理分配请求,防止单一服务器过载,提高系统的整体处理能力和响应速度‌。
  • 缓存加速‌:反向代理服务器可以缓存静态内容和频繁访问的动态内容,减少对后端服务器的请求,从而加快网页加载速度,提升用户体验‌。
  • 安全性增强‌:反向代理服务器可以实施安全策略,如防火墙、访问控制和SSL加密等,保护后端服务器免受恶意攻击和未经授权的访问,提高系统的安全性‌。
  • 隐藏后端服务器信息‌:通过反向代理服务器,可以隐藏后端服务器的真实IP地址和其他敏感信息,充当互联网云和web服务器之间的中间层,对外界只显示代理服务器的地址,增强系统的安全性‌。
  • 简化架构和维护‌:反向代理服务器可以将请求分发和流量管理的逻辑集中在一个地方,简化整体架构。同时,后端服务器的管理和维护也更加方便,可以独立地进行配置和扩展,提高系统的可管理性和可维护性‌。
  • 允许多服务器共享同一IP‌:通过使用反向代理服务器,可以实现单个公网IP地址支持多个服务器,这对于IP地址资源紧张的情况下非常有用‌。
  • 防火墙作用‌:所有的客户机请求都必须通过代理服务器访问远程站点,因此可以在代理服务器上设置过滤规则,防止不安全信息的传播‌。
  • 维护镜像服务器‌:在关闭主服务器进行维护时,可以通过代理指向镜像服务器,而不需要关闭整个站点‌。
  • 重定向不同类型的内容到不同的服务器‌:例如,所有视频都来自一个服务器,所有表单输入到另一个服务器。通过这种方式,可以组合多个服务器来生成一个站点‌。

7、怎么理解Nginx静态资源?

静态资源:是在Web开发中不经常改变的文件,比如图片、CSS样式表、JavaScript脚本文件等。这些资源通常是预先编译好的,不需要服务器端的动态处理,对静态资源的访问,就是存放在nginx的html页面,我们可以自己编写。

8、如何用Nginx解决前端跨域问题?

使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。

比如:

  • 前端server的域名为:mz.server.com;
  • 后端服务的域名为:linux.server.com。

现在 mz.server.com 对 linux.server.com 发起请求一定会出现跨域(不遵守同协议、同域名、同端口的同源策略的通信就会产生跨域)。

现在需要启动 nginx 服务器,将 server_name 设置为 mz.server.com,然后设置相应的 location 以拦截前端需要跨域的请求,最后将请求代理回 linux.server.com。如下面的配置:

server {
        listen 80;
        server_name mz.server.com;
        location / {
                proxy_pass linux.server.com;
        }
}

9、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?

只需将请求删除的服务器就可以定义为:

Server {
    listen 80;
    server_name " ";
    return 444;
}

这里服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的 Nginx 的非标准代码 444 被返回,从而终止连接。

10、请解释什么是C10K问题

C10K问题指的是服务器如何支持10000个并发连接的问题。C10K中的“C”代表“Client”(客户端),“10K”则表示10000。这个问题源于互联网的快速发展,特别是在Web2.0时代,用户群体急剧增长,应用程序的逻辑变得更加复杂,需要服务器同时处理大量的并发连接‌。

拓展:

为了解决C10K问题,主要有以下几种策略:

IO多路复用‌:利用select、poll和epoll等机制,一个线程可以管理多个文件描述符,减少线程和进程的创建,从而降低系统资源的消耗‌。

非阻塞IO‌:通过设置socket为非阻塞模式,使用IO就绪通知机制来处理IO操作,避免线程在等待IO时被阻塞‌。

异步IO‌:使用异步IO调用,当IO操作完成时,通过信号量或完成端口进行通知‌。


原文地址:https://blog.csdn.net/lx1056212225/article/details/143722847

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!