https://blog.csdn.net/a303549861/article/details/88672901
1.什么是 Nginx ?
1.Nginx ,是一个 Web 服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。
2.前使用的最多的 Web 服务器或者代理服务器,像淘宝、新浪、网易、迅雷等都在使用。
2.Nginx 的主要作用有哪些?
1.作为 http server (代替 Apache ,对 PHP 需要 FastCGI 处理器支持)
2.FastCGI:Nginx 本身不支持 PHP 等语言,但是它可以通过 FastCGI 来将请求扔给某些语言或框架处理。
3.反向代理服务器
4.实现负载均衡
5.虚拟主机
3.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 。
4.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; # 访问根文件
5.Nginx 有哪些优点?
跨平台、配置简单。
非阻塞、高并发连接
处理 2-3 万并发连接数,官方监测能支持 5 万并发。
内存消耗小
开启 10 个 Nginx 才占 150M 内存。
成本低廉,且开源。
稳定性高,宕机的概率非常小。
6.请列举 Nginx 和 Apache 之间的不同点
7. Nginx 如何处理 HTTP 请求?
1,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到指定的 ip 地址端口,再 listen 监听)。
2,再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进程 )出多个子进程出来。
3,子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户端与nginx进行三次握手,与 nginx 建立好一个连接后。此时,某一个子进程会 accept 成功,得到这个建立好的连接的 Socket ,然后创建 nginx 对连接的封装,即 ngx_connection_t 结构体。
4,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。
5,还是有一些逻辑,继续在 「Nginx 是如何实现高并发的?」 问题中来看。
6,Nginx 或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
8.Nginx 是如何实现高并发的?
1.Netty、Redis 基本采用相同思路。
2.webserver 刚好属于网络 IO 密集型应用,不算是计算密集型
9.Nginx 有哪些负载均衡策略?
1.轮询(默认)round_robin
2.IP 哈希 ip_hash
3.最少连接 least_conn