web服务之nginx的结构

一、nginx结构

Nginx (engine x)是一个高性能的 HTTP和反向代理 web服务器,同时也提供了 IMAP/POP3/SMTP服务。

1.工作架构

 nginx有两种工作模式:master-worker模式和单进程模式。在 master-worker模式下,有一个 master进程和至少一个的 worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的特点和适用场景。

 

1>master-worker

该模式下,nginx启动成功后,会有一个 master进程和至少一个的 worker进程。master进程负责处理系统信号,加载配置,管理 worker进程(启动,杀死,监控,发送消息/信号等)。worker进程负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是 worker进程。生产环境下一般使用

优点:

1.稳定性高,只要还有worker进程存活,就能够提供服务,并且一个 worker进程挂掉  master进程会立即启动一个新的 worker进程,保证worker进程数量不变,降低服务中断的概率。

2.配合linux的cpu亲和性配置,可以充分利用多核cpu的优势,提升性能

3.处理信号:配置重新加载/升级时可以做到尽可能少或者不中断服务(热重启)

2>单进程模式

 单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。由于只有一个进程,因此可以很方便地利用 gdb等工具进行调试。该模式不支持 nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。

2.nginx进程结构

 

3.配置文件结构

1>全局配置段

#user  nobody;        #程序运行的用户和组
worker_processes  1;  #启动进程,指定 nginx启动的工作进程数量,建议按照  cpu数目来指定,一般等于  cpu核心数目

#error_log  logs/error.log;   #定义错误日志
#error_log  logs/error.log  notice; #定义错误日志的级别
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;   #程序Pid存放位置

events {
 use epoll;
accept_mutex on;  #同一时间的多个请求由worker进程轮流处理,而防止被同时唤醒多个worker,默认设置成off,新请求会唤醒所有的worker进程,此过程也被成为“惊群”,建议设置成on;

multi_accept on  ;  #on时nginx服务器的每个工作进程可以同时接受多个网络请求,如果设置成off,则每次只能接收一个请求,建议打开
    worker_connections  1024;  #单个工作进程的最大连接数,total_processes=worker_processes * worker_connections
}

 2>http段

#http段
http {
    include       mime.types;  #文件的扩展名映射表  
    default_type  application/octet-stream;   #mime扩展支持的格式,代表.*

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;   #特殊的数据传输功能,用于开启文件高效传输模式,同时将tcp_nopush on 和tcp_nodelay on 两个指令设置为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率
    #tcp_nopush     on;

    #keepalive_timeout  0;      #会话保持的超时时间,单位为s,0代表不断开。
    keepalive_timeout  65;
          
    #gzip  on;       #压缩

3>server段

#server段
    server {              #服务配置部分
        listen       80;      #监听的端口
        server_name  localhost;   #服务器域名,可以有多个,用空格分来
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        location / {     #网站的根目录
            root   html;   #相对路径的根目录
            index index.html index.htm  index.php;  
        }                     #默认首页的类型
        
        #error_page  404              /404.html;
        
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;   #错误页
        location = /50x.html {
            root   html;
        }
        
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {                  #反向代理
        #    proxy_pass   http://127.0.0.1; 
        #}
        
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {          #反向代理到php-fpm来处理php的页面
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }
        
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

}

4.nginx的模块

nginx是由内核和模块构成的。nginx的模块从结构上分为三个模块,分别为:

1、核心模块:HTTP模块、EVENT模块和MAIL模块。
2、基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块。
3、第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块和Limit_req模块等。

从功能上分,nginx又可以分为三个模块

 1、处理器模块(Handlers)。 此模块直接处理请求,并进行输出内容和修改headers信息等操作,处理器模块一般只能有1个。
2、过滤器模块(Filters)。 此模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。
3、代理类模块(Proxies)。 此类模块主要与一些后端服务FastCGI等进行交互,实现服务代理和负载均衡等功能。

nginx的常用模块

 

模块名称功能
rewrite重写 URL
proxy代理
sslSSL 加密
worker_processes进程数
event事件驱动模型
resize_file文件大小限制
http_accessHTTP 访问权限控制
http_limit_methodsHTTP 方法限制
http_limit_connHTTP 连接限制
http_limit_req_zoneHTTP 请求配额 zone
http_auth_loginHTTP 认证登录
http_auth_passHTTP 认证授权
smtpSMTP 代理
imapIMAP 代理
http_autoindexHTTP 自动展开目录
x_forwarded_for代理 IP 追踪
set_real_ip_from代理 IP 白名单
real_ip_header代理 IP 响应头
x_forwarded_proto代理协议追踪
x_forwarded_端口代理端口追踪
模块名称模块作用
ngx_http_access_module四层基于 IP 的访问控制,可以通过匹配客户端源 IP 地址进行限制
ngx_http_auth_basic_module状态页,使用 basic 机制进行用户认证,在编译安装 nginx 的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误
ngx_http_stub_status_module状态统计模块
ngx_http_gzip_module文件的压缩功能
ngx_http_gzip_static_module静态压缩模块
ngx_http_ssl_modulenginx 的 https 功能
ngx_http_rewrite_module重定向模块,解析和处理 rewrite 请求
ngx_http_referer_module防盗链功能,基于访问安全考虑
ngx_http_proxy_module将客户端的请求以 http 协议转发至指定服务器进行处理
ngx_stream_proxy_module将客户端的请求以 tcp 协议转发至指定服务器处理
ngx_http_fastcgi_module将客户端对 php 的请求以 fastcgi 协议转发至指定服务器助理
ngx_http_uwsgi_module将客户端对 Python 的请求以 uwsgi 协议转发至指定服务器处理
ngx_http_headers_module可以实现对头部报文添加指定的 key 与值
ngx_http_upstream_module负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_stream_upstream_module后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module实现通过 fastcgi 协议将指定的客户端请求转发至 php-fpm 处理
ngx_http_flv_module为 flv 伪流媒体服务端提供支持

 

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值