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

10.nginx限流方案的实现(三种方式)

  1、limit_conn_zone

    1.配置:

    http{

     limit_conn_zone $binary_remote_addr zone=one:10m;
     server
     {
       ......
      limit_conn one 10;
      ......
     }
    }
    其中“limit_conn one 10”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。
    该配置表明:客户端的并发连接数只能是10个。

  2、limit_req_zone

    1.配置

    http{

     limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
     server
     {
       ......
      limit_req zone=req_one burst=120;
      ......
     }
    }

    其中“limit_req zone=req_one burst=120”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。

    rate=1r/s的意思是每个地址每秒只能请求一次,也就是说令牌桶burst=120一共有120块令牌,并且每秒钟只新增1块令牌,120块令牌发完后,多出来的请求就会返回503.

  3、ngx_http_upstream_module