1、nginx功能模块说明

  nginx之所以很强大,是因为具有很多的强大的模块

  nginx核心功能模块:nginx的核心功能模块负责nginx的全局应用,主要对应的是主配置文件中的Main区块和Events区块区域,这里有很多Nginx的必须的全局配置参数

  nginx标准的http功能模块:这些标准的http功能模块,虽然不是nginx软件必须的,但是很常用所以默认情况下都会自动的安装到nginx软件中

  在企业生产环境中,配置、优化、调整都是根据这些模块的功能进行修改相应的参数的

  下面列举出Nginx Http的常用模块:

Nginx Http 功能模块 模块说明
ngx_http_core_module 包括一些核心的http参数配置,对应Nginx配置文件的HTTP区块部分
ngx_http_access_module 访问控制模块,用来控制网站用户对nginx的访问
ngx_http_gzip_module 压缩模块,对nginx返回的数据压缩,属于优化性能模块
ngx_http_fastcgi_module FastCGI模块,和动态应用相关的模块,例如:PHP
ngx_http_proxy_module proxy代理模块
ngx_http_upstaream_module 负载均衡模块,可以实现网站的负载均衡功能及节点健康检查
ngx_http_rewrite_module URL地址重写模块
ngx_http_limit_conn_module 限制用户并发连接数及请求数模块
ngx_http_limit_req_module 根据定义的key限制nginx的请求速率
ngx_http_log_module 访问日志模块,以指定的格式记录nginx的客户端访问日志
ngx_http_auth_basic_module Web认证模块,设置web用户通过账号,密码访问nginx
ngx_http_ssl_module ssl模块,用于加密http连接
ngx_http_stub_status_module 记录nginx基本访问状态信息

2、nginx目录结构说明

  为了更加合适的了解nginx软件的全貌,我们首先有必要对nginx软件的目录结构以及文件功能做个了解:

[root@Nginx html]# tree /opt/nginx/     # 如果执行的时候提示找不到tree命令,可以使用 yum -y install tree 安装
/opt/nginx/
├── client_body_temp
├── conf                   # nginx的配置文件目录,最重要的
│   ├── fastcgi.conf            # fastcgi相关参数配置文件
│   ├── fastcgi.conf.default # fastcgi.conf文件的原始备份文件(后缀是.default的都是文件的原始备份文件)
│   ├── fastcgi_params           # fastcgi的参数文件
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types             # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf             # nginx的主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp              # fastcgi临时数据目录
├── html                   # 编译安装时的默认站点目录
│   ├── 50x.html             # 错误页面优雅显示文件,出现500 502 503 504 会调用此文件
│   └── index.html             # 默认的首页文件,这个文件名也是在nginx.conf中定义好的
├── logs                   # 这是nginx日志的默认目录,包括访问日志和错误日志
│   ├── access.log             # 这是访问日志
│   ├── error.log # 这是错误日志
│   └── nginx.pid              # nginx的pid文件,进程启动后会把pid号写到这个文件
├── proxy_temp                # 临时目录
├── sbin                   # 这是nginx的命令目录
│   └── nginx                # Nginx的启动命令nginx
├── scgi_temp                # 临时目录
└── uwsgi_temp # 临时目录 9 directories, 21 files  

3、nginx主配置文件说明

  Nginx的主配置文件就是一个纯文本类型的文件,它在nginx的安装目录下的conf目录下,整个配置文件是以区块的形式组成的,每个区块以"{}"来表示,区块可以分为几层,整个配置文件中Main区位于最上层,在Main区块的下面是Events区块、HTTP区块,在HTTP区块中又包含了多个server区块,每个server区块中又包含多个location区块

  Nginx配置文件有几百行其中包含了很多的注释信息,为了方便我们更好的理解和查看我们先去掉包含注释和空行的行:

[root@Nginx html]# egrep -v "#|^$" /opt/nginx/conf/nginx.conf

  过滤完成后就剩下下面的这个几行很重要的了

[root@Nginx html]# egrep -v "#|^$" /opt/nginx/conf/nginx.conf    # 去掉文件的注释和空行
worker_processes 1;                  # worker进程的数量
events {                         # 事件区块的开始
worker_connections 1024;             # 每个worker进程支持的最大连接
}                             # 事件区块结束
http {                          # HTTP区块开始
include mime.types;            # Nginx支持的媒体类型库文件
default_type application/octet-stream;    # 默认的媒体类型
sendfile on;                # 开启高效的传输模式
keepalive_timeout 65;              # 连接超时时间
server {                       # 第一个server区块的开始,表示一个独立的虚拟主机站点
listen 80;                # 提供服务的端口,默认80
server_name localhost;           # 提供服务的域名主机名
location / {                  # 第一个location区块的开始
root html;                # 站点的根目录,相当于nginx的安装目录
index index.html index.htm;      # 默认的首页文件,多个用空格分开
}                         # 第一个location区块的结束
error_page 500 502 503 504 /50x.html;  # 出现对应的http状态码,使用50x.html回应用户
location = /50x.html {            # location区块的开始,访问50x.html
root html;                # 指定对应的站点目录为html
}
}
}                              # HTTP区块结束

  整个nginx的配置文件核心框架就是:

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm; }
}
}

4、nginx其他配置文件说明

  如果是配合动态服务(如:PHP服务),nginx软件还会用到扩展的fastcgi相关的配置文件,这个配置是通过在nginx.conf主配置文件中嵌入include命令来实现的,不过默认是注释的不生效

  fastcgi.conf配置文件初始内容:

[root@Nginx conf]# cat fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

  fastcgi_params默认配置文件内容包含:

[root@Nginx conf]# cat fastcgi_params

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

  以上配置文件中没有做中文注释的就是表示在生产环境中比较少用的,关于动态扩展的配置我们会在后续的文章中体现

nginx深入剖析的更多相关文章

  1. 菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t

    菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  2. 菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表ngx_chain_t

    菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog. ...

  3. 菜鸟nginx源代码剖析 框架篇(一) 从main函数看nginx启动流程

    菜鸟nginx源代码剖析 框架篇(一) 从main函数看nginx启动流程 Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...

  4. 菜鸟nginx源代码剖析数据结构篇(十) 自旋锁ngx_spinlock

    菜鸟nginx源代码剖析数据结构篇(十) 自旋锁ngx_spinlock Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.cs ...

  5. 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx "I love you"

    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...

  6. 菜鸟nginx源代码剖析数据结构篇(六) 哈希表 ngx_hash_t(上)

    菜鸟nginx源代码剖析数据结构篇(六) 哈希表 ngx_hash_t(上) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog. ...

  7. 菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t

    菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...

  8. 菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)

      菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)   Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:B ...

  9. NGINX源代码剖析 之 CPU绑定(CPU亲和性)

    作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...

随机推荐

  1. ThreadLocal的练习代码

    场景: 有三个小孩儿,买了一个变形金刚玩具(Transformer).... 三个小孩都争着玩这个玩具....没有一个人可以玩... 第一种方式:每个人各玩一会.... 第二种方式:再买两个玩具,一个 ...

  2. 自动化部署-从maven到shell脚本到jenkins

    Java代码自动部署 [ ①Java代码自动部署-总结简介] 代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节.对于Java开发者来说,Java代码的发布部署也是 ...

  3. Android四大组件之---activity生命周期详解

    废话不多说, 先来一张Google提供的一张经典的生命周期流程图: 有的朋友可能看英文的有点费劲,再提供一张中文版的  O(∩_∩)O 相信已经很多人对这张图再熟悉不过了,下面笔者按照自己的理解并结合 ...

  4. ThreadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别

    Java并发编程中在使用到ThreadPoolExecutor时,对它的三个关闭方法(shutdown().shutdownNow().awaitTermination())的异同点如下: shutd ...

  5. 制作windows服务

    1.下载winsw-1.8-bin.exe并更名: 2.配置winsw-1.8-bin.exe同上名<?xml version="1.0" encoding="UT ...

  6. LockSupport 阻塞原语

    LockSupport是用来创建锁和其他同步类的基本线程阻塞原语. LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark() ...

  7. BIO与NIO、AIO的区别(这个容易理解)

    转自:http://blog.csdn.net/skiof007/article/details/52873421 BIO与NIO.AIO的区别(这个容易理解) IO的方式通常分为几种,同步阻塞的BI ...

  8. php 冒泡排序的两种思路以及优化

    php冒泡排序,两种思路,时间复杂度都是O(n^2),当然最优的时间复杂度就是O(n),以下说的都是正序排列(倒序的话,把内层循环的大于号换成小于号就好了) 第一种冒泡排序 思路就是把第一个数跟所有的 ...

  9. 从PHP5.0到PHP7.1的性能全评测

    本文是最初是来自国外的这篇:PHP Performance Evolution 2016, 感谢高可用架构公众号翻译成了中文版, 此处是转载的高可用架构翻译后的文章从PHP 5到PHP 7性能全评测( ...

  10. APIO 2018 游记

    上接CTSC 2018 游记 day1 早上大概八九点起来洗了个澡跑到隔壁寝发现 tj 还在??? 原来昨天晚上听错名字了... 下午一起去 wfj 王府井玩,陪李总逛逛奢侈品店... 走了两三个小时 ...