- [面试题]Java【基础】
- [面试题]Java【虚拟机】
- [面试题]Java【并发】
- [面试题]Java【集合】
- [面试题]MySQL
- [面试题]Maven
- [面试题]Spring Boot
- [面试题]Spring Cloud
- [面试题]Spring MVC
- [面试题]Spring
- [面试题]MyBatis
- [面试题]Nginx
请解释一下什么是 Nginx ?
Nginx ,是一个 Web 服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。
目前使用的最多的 Web 服务器或者代理服务器,像淘宝、新浪、网易、迅雷等都在使用。
Nginx 的主要功能如下:
- 作为 http server (代替 Apache ,对 PHP 需要 FastCGI 处理器支持)
FastCGI:Nginx 本身不支持 PHP 等语言,但是它可以通过 FastCGI 来将请求扔给某些语言或框架处理。
- 反向代理服务器
- 实现负载均衡
- 虚拟主机
fastcgi 与 cgi 的区别?
1)cgi
web 服务器会根据请求的内容,然后会 fork 一个新进程来运行外部 c 程序(或 perl 脚本…), 这个进程会把处理完的数据返回给
web 服务器,最后 web 服务器把内容发送给用户,刚才 fork 的进程也随之退出。如果下次用户还请求改动态脚本,那么 web
服务器又再次 fork 一个新进程,周而复始的进行。
2)fastcgi
web 服务器收到一个请求时,他不会重新 fork 一个进程(因为这个进程在 web 服务器启动时就开启了,而且不会退出),web
服务器直接把内容传递给这个进程(进程间通信,但 fastcgi 使用了别的方式,tcp 方式通信),这个进程收到请求后进行处理,把结果返回给 web 服务器,最后自己接着等待下一个请求的到来,而不是退出。
综上,差别在于是否重复 fork 进程,处理请求。
关于 Nginx 和 fastcgi 是如何运行的,可以看看 《Nginx + FastCGI运行原理》 。
同样,关于 cgi 可能也会存在 《php 面试题五之 nginx 如何调用 php 和 php-fpm 的作用和工作原理》 问题。
Nginx 常用命令?
- 启动 nginx 。
- 停止 nginx -s stop 或 nginx -s quit 。
- 重载配置 ./sbin/nginx -s reload(平滑重启) 或 service nginx reload 。
- 重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。
- 查看 nginx 版本 nginx -v 。
- 检查配置文件是否正确 nginx -t 。
- 显示帮助信息 nginx -h 。
Nginx 常用配置?
worker_processes 8; # 工作进程个数
worker_connections 65535; # 每个工作进程能并发处理(发起)的最大连接数(包含所有连接数)
error_log /data/logs/nginx/error.log; # 错误日志打印地址
access_log /data/logs/nginx/access.log; # 进入日志打印地址
log_format main '$remote_addr"$request" ''$status $upstream_addr "$request_time"'; # 进入日志格式
## 如果未使用 fastcgi 功能的,可以无视
fastcgi_connect_timeout=300; # 连接到后端 fastcgi 超时时间
fastcgi_send_timeout=300; # 向 fastcgi 请求超时时间(这个指定值已经完成两次握手后向fastcgi传送请求的超时时间)
fastcgi_rend_timeout=300; # 接收 fastcgi 应答超时时间,同理也是2次握手后
fastcgi_buffer_size=64k; # 读取 fastcgi 应答第一部分需要多大缓冲区,该值表示使用1个64kb的缓冲区读取应答第一部分(应答头),可以设置为fastcgi_buffers选项缓冲区大小
fastcgi_buffers 4 64k; # 指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求,假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存
fastcgi_cache TEST; # 开启fastcgi缓存并为其指定为TEST名称,降低cpu负载,防止502错误发生
listen 80; # 监听端口
server_name rrc.test.jiedaibao.com; # 允许域名
root /data/release/rrc/web; # 项目根目录
index index.php index.html index.htm; # 访问根文件
Nginx 日志格式中的 $time_local 表示的是什么时间?请求开始的时间?请求结束的时间?其次,当我们从前到后观察日志中的 $time_local 时间时,有时候会发现时间顺序前后错乱的现象,请说明原因?
$time_local :在服务器里请求开始写入本地的时间。
因为请求发生时间有前有后,所以会时间顺序前后错乱。
Nginx 有哪些优点?
- 跨平台、配置简单。
- 非阻塞、高并发连接
处理 2-3 万并发连接数,官方监测能支持 5 万并发。
- 内存消耗小
开启 10 个 Nginx 才占 150M 内存。
- 成本低廉,且开源。
- 稳定性高,宕机的概率非常小。
使用“反向代理服务器”的优点是什么?
反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和 Web 服务器之间的中间层。这对于安全方面来说是很好的,特别是当我们使用 Web 托管服务时。
这里,先不考虑负载均衡。
什么是正向代理?
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
- 客户端才能使用正向代理。
- 正向代理总结就一句话:代理端代理的是客户端。例如说: 我们使用的翻墙软件,OpenVPN 等等。
什么是反向代理?
反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理总结就一句话:代理端代理的是服务端。
请列举 Nginx 和 Apache 之间的不同点?
- 轻量级,同样起 web 服务,Nginx 比 Apache 占用更少的内存及资源。
- 抗并发,Nginx 处理请求是异步非阻塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能。
- 最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程。
- Nginx 高度模块化的设计,编写模块相对简单。
LVS、Nginx、HAproxy 有什么区别?
- LVS :是基于四层的转发。
- HAproxy : 是基于四层和七层的转发,是专业的代理服务器。
- Nginx :是 WEB 服务器,缓存服务器,又是反向代理服务器,可以做七层的转发。
标签:面试题,请求,nginx,Nginx,进程,服务器,fastcgi From: https://blog.csdn.net/gaozhi0/article/details/139764453Nginx 引入 TCP 插件之后,也可以支持四层的转发。