Nginx技术深度剖析(1)

(1)Nginx核心模块:

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

(2)标准的HTTP功能模块集合:

这些模块虽然不是必须的,但是是都很常用啊。因此会被Nginx自动编译安装到Nginx软件中。不建议擅自改动。除非明确知道要干什么,由什么额外的影响。

在生产环境中,配置调优主要就是根据这些模块进行相应的更改来实现的。通过官方文档可以查看。

企业中常用的Nginx http功能模块:

--------------------------------------------------------------------------------------------

ngx_http_core_module            | 包括一些核心的http参数配置,对应Nginx的配置为http区块

--------------------------------------------------------------------------------------------

ngx_http_access_module          | 访问控制模块,用来控制网站用户对Nginx的访问

--------------------------------------------------------------------------------------------

ngx_http_gzip_module            | 压缩模块,对Nginx返回的数据压缩,属于性能优化模块

--------------------------------------------------------------------------------------------

ngx_http_gzip_module            | Fast CGI模块,动态应用相关的模块,例如PHP

--------------------------------------------------------------------------------------------

ngx_http_proxy_module           | proxy代理模块

--------------------------------------------------------------------------------------------

ngx_http_upstream_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连接,例如https

--------------------------------------------------------------------------------------------

ngx_http_stub_status_module     | 记录Nginx基本访问状态信息等的模块

--------------------------------------------------------------------------------------------

Nginx目录结构说明:

.

├── client_body_temp

├── conf                                     #Nginx默认所有配置文件目录,极其重要

│   ├── fastcgi.conf                         #fastcgi相关参数的配置文件

│   ├── fastcgi.conf.default                 #fastcgi.conf文件的原始配置文件备份

│   ├── fastcgi_params                       #fastcgi的参数文件

│   ├── fastcgi_params.default               #fastcgi的参数文件的备份文件

│   ├── koi-utf

│   ├── koi-win

│   ├── mime.types                           #媒体类型

│   ├── mime.types.default                   #媒体类型默认配置备份

│   ├── nginx.conf                           #Nginx的主配置文件

│   ├── nginx.conf.default                   #Nginx的主配置文件的默认配置文件

│   ├── scgi_params                          #scgi相关参数文件,一般用不到

│   ├── scgi_params.default                  #scgi相关参数文件的备份

│   ├── uwsgi_params                         #uwsgi相关参数文件,一般用不到

│   ├── uwsgi_params.default                 #uwsgi相关参数文件的备份文件

│   └── win-utf

├── fastcgi_temp                             #fastcgi临时数据目录

├── html                                     #编译安装时Nginx的站点目录,Apache默认是htdocs

│   ├── 50x.html                             #错误页面,优雅的显示错误

│   └── index.html                           #默认使用的首页文件,一般会是这个,不是必须。

├── logs                                     #Nginx默认的日志路径,包括错误日志及访问日志

│   ├── access.log                           #Nginx的访问日志文件,使用tail -f access.log命令实时观看网站用户的访问情况。

│   ├── error.log                            #Nginx的错误日志文件,Nginx故障信息会报错到该文件。

│   └── nginx.pid                            #Nginx的pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件 。

├── proxy_temp                               #临时目录

├── sbin

│   └── nginx

├── scgi_temp                                #临时目录

└── uwsgi_temp                               #临时目录

Nginx.conf主配置文件:

/application/nginx/conf/nginx.conf:

Nginx的配置文件使用井号(#)注释没有用的配置语句。

整个文件都是以区块的形式组织起来的;

Main区位于最上层,在Main区下面可以有Events区、HTTP区等层级;

在HTTP区中包含一个或多个server区,每个server区中又有一个或多个location区。

#user  nobody;

worker_processes  1;                         #Nginx的work进程数量

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {

worker_connections  1024;                #每个worker进程支持的最大连接数

}

http {

include       mime.types;                #Nginx支持的媒体类型库文件

default_type  application/octet-stream;  #默认的媒体类型

#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;

#keepalive_timeout  0;

keepalive_timeout  65;                  #连接超时

#gzip  on;

server {

listen       80;                    #提供服务的端口,默认是80

server_name  localhost;             #提供服务的主机域名

#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {

root   html;                    #站点的根目录

index  index.html index.htm;    #站点的首页文件,多个文件名使用空格分割

}

#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$ {

#    root           html;

#    fastcgi_pass   127.0.0.1:9000;

#    fastcgi_index  index.php;

#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

#    include        fastcgi_params;

#}

# deny access to .htaccess files, if Apache‘s document root

# concurs with nginx‘s one

#

#location ~ /\.ht {

#    deny  all;

#}

}

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

#    listen       8000;

#    listen       somename:8080;

#    server_name  somename  alias  another.alias;

#    location / {

#        root   html;

#        index  index.html index.htm;

#    }

#}

# HTTPS server

#

#server {

#    listen       443 ssl;

#    server_name  localhost;

#    ssl_certificate      cert.pem;

#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;

#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;

#    ssl_prefer_server_ciphers  on;

#    location / {

#        root   html;

#        index  index.html index.htm;

#    }

#}

}

Nginx的其他配置文件:

如果是配合动态服务(例如PHP服务),Nginx软件还会用到扩展的FastCGI相关配置文件,这个配置是通过再nginx.conf主配置文件中嵌入include命令实现的,不过默认是注释状态。

/application/nginx/conf/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  REQUEST_SCHEME     $scheme;

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;

/application/nginx/conf/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  REQUEST_SCHEME     $scheme;

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;

时间: 2024-10-12 21:09:21

Nginx技术深度剖析(1)的相关文章

Nginx技术深度剖析(2)

Nginx虚拟主机配置实战: 虚拟主机的概念: 所谓虚拟主机就是在Web主机里的一个独立的网站站点,这个站点对应独立的域名(也可能是IP地址或端口),具有独立的程序及资源目录,可以独立的对外提供服务供用户访问. 这个独立的站点在配置里是由一定格式的标签段标记,对于Apache软件来说,一个独立的虚拟主机的标签段通常包含在<VirtualHost></VirtualHost>内,而nginx软件则使用一个server{}标签标识一个虚拟主机. (1)基于域名的虚拟主机 是企业中应用最

横瓜先生深度剖析QQ空间前端后端技术AJAX与FORM等等

[皇帝]北京-横瓜-7年(601069289)  22:06:34 [元帅]横瓜-PHP教父(601069289)  21:35:29 这里是QQ空间的图片上传方法 是FLASH 我草 [元帅]横瓜-PHP教父(601069289)  21:36:31 竟然不是JS QQ空间用FLASH 图片上传方法 [元帅]横瓜-PHP教父(601069289)  21:37:35 至此,整个QQ空间的技术,已经全部被我破解 @IT柏拉图 [元帅]IT柏拉图(2500875)  21:38:11 你真是天才,

深度剖析:CDN内容分发网络技术原理--转载

1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰.解决方案就是在网络传输上利用缓存技术使得Web服务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证. 网络缓存技术,其目的就是减少网络中冗余数据的重复传输,使之最小化,将广域传输转为本地或就近访问.互联网上传递的内容,大部分为重

Redis开发与运维 (数据库技术丛书) PDF 下载,深度剖析Hadoop HDFS PDF 下载

1.Redis开发与运维 (数据库技术丛书) PDF 下载 2.深度剖析Hadoop HDFS (大数据技术丛书) PDF 下载 关注微信公众号:职业开发者之路,百度云免费 下载 PDF 电子书籍,或直接访问:问风网:askwinds.com请添加链接描述,免费资源下载模块下载,问风@程序员部落,更多资源分享等你获取关注微信公众号:职业开发者之路,?更多免费资源分享 原文地址:http://blog.51cto.com/2058005/2350798

DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)

最近花了点时间把<破坏之王-DDOS攻击与防范深度剖析>看了一遍,坦白来说,这本书比较浅显,可以说是入门书,当然对于我这种对DDOS一知半解的人来说,也是一本不错的书,起码我学到了一些东西. DDOS是分布式拒绝服务(Distributed Denial of Service, DDOS)的简写,从名字可以看出,其攻击是分布式的,即多台(可能上万台,甚至更多)电脑同时对目标进行攻击,攻击的目的是让目标无法提供服务.从根本上来说,让目标无法提供服务,办法有很多,比如侵入目标服务器,删除关键服务或

深度剖析WordPress主题结构(转)

利用强大的技术,可以把基于wordpress的网站做成各种各样的形式,这除了要求wordpress主题开发人员精通html,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架. Gevin今天结合The anatomy of a WordPress theme这篇文章,和大家一起剖析WordPress主题的结构.原文作者用图文形式,分别从网站外观.页面组成和后台文件三个方面,形象的向大家展示了WordPress的架构,下面Gevin和大家一起分析WordPress是如何架构

《AngularJS深度剖析与最佳实践》简介

由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持shuang_lang_shuo[破狼]微信号,同时也欢迎大家的高质量文章的投稿. 在2015年一年时间中,我.雪狼大叔.彭洪伟一起共同编写了<AngularJS深度剖析与最佳实践>这本前端Angular.js框架的进阶书籍.在写作期间也得到很多人的支持,特别是在Angularjs中文社区群中的各位群

Struts(一)struts2.2概述与MVC模式深度剖析

struts2.2概述与MVC模式深度剖析 1.Struts2是由webwork与struts一起组成的.struts1与struts2完全不一样.(处理前段到服务器端的交互,也就是web端) 2.通过基于请求响应( Request-Response)模式的应用Framework, 基本上有如下几个表现逻辑结构组成.– 控制器(Controller) ——控制整个Framework中各个组件的协调工作.– 业务逻辑层(Business Logic) ——对Framework本身来说, 这里仅仅只

libevent源码深度剖析二

libevent源码深度剖析二 --Reactor模式 张亮 前面讲到,整个libevent本身就是一个Reactor,因此本节将专门对Reactor模式进行必要的介绍,并列出libevnet中的几个重要组件和Reactor的对应关系,在后面的章节中可能还会提到本节介绍的基本概念. 1 Reactor的事件处理机制 首先来回想一下普通函数调用的机制:程序调用某函数?函数执行,程序等待?函数将结果和控制权返回给程序?程序继续处理. Reactor释义"反应堆",是一种事件驱动机制.和普通