nginx深入剖析
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深入剖析的更多相关文章
- 菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t
菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...
- 菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog. ...
- 菜鸟nginx源代码剖析 框架篇(一) 从main函数看nginx启动流程
菜鸟nginx源代码剖析 框架篇(一) 从main函数看nginx启动流程 Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...
- 菜鸟nginx源代码剖析数据结构篇(十) 自旋锁ngx_spinlock
菜鸟nginx源代码剖析数据结构篇(十) 自旋锁ngx_spinlock Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.cs ...
- 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx "I love you"
菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...
- 菜鸟nginx源代码剖析数据结构篇(六) 哈希表 ngx_hash_t(上)
菜鸟nginx源代码剖析数据结构篇(六) 哈希表 ngx_hash_t(上) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog. ...
- 菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t
菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...
- 菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)
菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:B ...
- NGINX源代码剖析 之 CPU绑定(CPU亲和性)
作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...
随机推荐
- mxonline 总结
课程相关 课程列表 课程的剪接 课程详情 课程章节 课程关联的授课机构,课程关联的授课教师 热门课程 相关课程推荐 课程留言 需要登录 若未登录,返回到登录页面 留言失败反馈信息 留言成功,异步刷新页 ...
- 【原创】Your Connection is not private
用Chrome打开google等https网站时碰到问题: “your connection is not private”. 后来发现是跟GoAgent的安全证书有关系(我用XX.NETFQ) 解决 ...
- (转)30 个实例详解 TOP 命令
原文:http://blog.jobbole.com/112873/?utm_source=blog Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服 ...
- SpringSecurity学习之快速上手
互联网项目中,安全与权限控制是不可回避的问题,为了解决这一些列问题,许多安全框架应运而生了.这些框架旨在帮我们解决公用的安全问题,让我们的程序更加健壮,从而让程序员全身心投入到业务开发当中.那么Spr ...
- MYSQL用户权限管理(Grant,Revoke)
MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL指令Grant(分配权限)和Revoke(回收权限)来实现. Grant可以把指定的权限分配给特定的用户,如果这个用户不存在 ...
- (转)Java多线程学习(吐血超详细总结)
本文转自:http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能 ...
- Docker基础教程(命令详解)
# docker --help Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h ...
- Python制作回合制手游外挂简单教程(上)
引入: 每次玩回合制游戏的时候,反反复复的日常任务让人不胜其烦 玩问道的时候,我们希望能够自动刷道,玩梦幻希望能自动做师门.捉鬼等等 说明: 该外挂只能模拟鼠标键盘操作,并不能修改游戏数据 我这里使用 ...
- MongoDB的“not master and slaveok=false”错误解决
在客户端操作MongoDB时经常会如下错误: SECONDARY> show collections; Fri Jul :: uncaught exception: error: { } 原因是 ...
- C# ABP 允许跨域请求
备注:无论有没有安装 apb zero模块,都可以使用本文的跨域 首先配置Web Api: 1. 在Web API项目下,安装包 Install-Package Microsoft.AspNet.We ...