【面试官让你介绍】nginx基本功能和工作原理

面试问我nginx原理,我没有回答出来。 深度痛觉,我好好的整理了一些要点,杜绝下次遇到

Nginx基本功能和工作原理

Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。
1、反向代理、正向代理
2、负载均衡
3、Nginx原理
4、Ngnix 实现高性能

反向代理和正向代理

正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理。假如我要访问 localhost:8080/product/img/1.jpg 这个页面,但product/img对应的服务器上并没有1.jpg 这个资源,它是从另一台服务器上调用的资源。这样/product/img/对应的那个服务器就使用了反向代理。即用户只需要把请求发给特定的反向代理服务器,具体请求是谁处理的用户不需要知道(其实也不知道),由代理服务器统一处理。结论就是 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理 的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容 原本就是它自己的一样。

反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
访问静态资源1.jpg

server {
    listen 80;
    autoindex on;
    server_name www.xxxxx(你的网址);
    access_log /usr/local/nginx/logs/access.log combined;
    index index.html index.htm index.jsp index.php;
    #error_page 404 /404.html;
    if ( $query_string ~* ".*[\;'\<\>].*" ){
        return 404;
    }

    location / {
        root /product/img/;
        add_header Access-Control-Allow-Origin *;
    }
}

为后端的多台服务器提供负载平衡

    upstream product_server{
        server www.product.com:8080;
    }
    upstream order_server{
        server www.image.com:8081;
    }
 
 
   #HTTP服务器
   server {
        #监听80端口,80端口是知名端口号,用于HTTP协议
        listen       80;
        
        #定义使用www.xx.com访问
        server_name  www.nginx.com;    
      
        #编码格式
        charset utf-8;
        
        #代理配置参数
        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarder-For $remote_addr;
        
        #默认指向product的server
        location / {
            proxy_pass http://product_server;
        }
 
		#使用location对不同请求做相应处理
        location /product/{
            proxy_pass http://product_server;
        }
 
        location /image/ {
            proxy_pass http://image_server;
        }
        
    }

负载均衡

负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

Nginx原理

Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处理网络请求与响应。
master进程主要用来管理worker进程,具体包括如下4个主要功能:
1、接收来自外界的信号。
2、向各worker进程发送信号。
3、监控woker进程的运行状态。
4、当woker进程退出后(异常情况下),会自动重新启动新的woker进程。

woker进程主要用来处理基本的网络事件:
1、多个worker进程之间是对等且相互独立的,他们同等竞争来自客户端的请求。
2、一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
3、worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。同时,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。

Ngnix 是如何实现高性能的

事件驱动模型

基于异步及非阻塞的事件驱动模型,可以说是 Nginx 得以获得高并发、高性能的关键因素。这一点上和 Netty 类似,底层都是使用的 BSD kqueue、Linux epoll 及 Solaris event ports。

多进程机制

使用多进程的好处有两点:

  1. 进程之间不共享资源,不需要加锁,减少了使用锁对性能造成的影响,同时降低编程的复杂度,降低开发成本。
  2. 采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的worker 进程,确保服务不会中断,从而将风险降到最低。

内存池

为了避免出现内存碎片,减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx 设计了简单的内存池,它的作用主要是把多次向系统申请内存的操作整合成一次,这大大减少了 CPU 资源的消耗,同时减少了内存碎片。

参考资料

1、浅谈Nginx服务器的内部核心架构设计
2、nginx架构模型分析

发布了17 篇原创文章 · 获赞 18 · 访问量 3831

猜你喜欢

转载自blog.csdn.net/weixin_43464303/article/details/105513703
今日推荐