🗺️博客地图
📍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; # 提供服务的端口,默认80server_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操作完成时,通过信号量或完成端口进行通知。