nginx
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx相关的知识,希望对你有一定的参考价值。
一、nginx的简单介绍
nginx 结构上分为3大模块:
1.核心模块(HTTP模块、EVENT模块和MAIL模块)
2.基础模块(HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块)
3.第三方模块(GI模块、HTTP Proxy模块和HTTP Rewrite模块)
功能上分为三类
1.Handlers(处理模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个。
2.Filters(过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。
3.·Proxies(代理类模块)。就是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如fastcgi等操作交互,实现服务代理和负载均衡等功能。
工作方式上nginx分为单工作进程和多工作进程
1.单工作进程模式下,除主进程外,还有一个单线程的工作进程
2.多工作进程模式下,每个工作进程包含多个进程
Nginx默认为单工作进程模式
二、Nginx配置
Nginx的配置文件是纯文本的形式,它一般Nginx的安装目录的conf目录下。
整个配置文件以block的形式组织,每个block一般以一个大括号{}来表示。
block可以分为几个层次,整个配置文件中Main命令位于最高层,在Main层下面可以有Events、HTTP等层级,而在HTTP层中又包含Server层,即server block,server block中又可分为location层,并且一个server block中可以包含多个location block。
Nginx配置文件主要分为四部分:
main:全局设置
server:主机设置 -----主机和端口
upstream:负载均衡服务器设置 -----设置一系列的后端服务器
location:URL匹配特定位置的设置 -----用于匹配网页的位置
四者之间的关系是server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
下面详细的介绍下nginx.conf
#user 指定Nginx的worker进程运行用户及用户组,默认由nobody账号运行 user nobody nobody; #worker_processes 指定Nginx要开启的进程数,建议设置为等于CPU总核心数 worker_processes 2; #error_log:用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为详细,而crit输出日志最少。 error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; #pid 用来指定进程id的存储文件位置 pid logs/nginx.pid; #worker_rlimit_nofile:用于绑定worker进程和CPU woker_rlimit_nofile 65535 #设定Nginx的工作模式及连接数上限 events { #use用来指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于Linux系统,epoll工作模式是首选 use epoll; #参数“worker_connections”用于定义Nginx每个进程的最大连接数,默认是1024 worker_connections 1024; }
#设定HTTP服务器
http { log_format main ‘$remote_addr - $remote_user [$time_local]"$request"‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" "$http_x_forwarded_for" $upstream_cache_status‘; #main为此日志输出格式的名称,可以在access_log命令中引用 #实现对配置文件所包含文件的设定,可以减少主配置文件的复杂度 include mime.types; #默认文件类型 default_type application/octet-stream; #设置客户端请求的最大的单个文件字节数 client_max_body_size 8m; #用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1KB的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小。这里设置为32KB client_header_buffer_size 32k; #用来指定客户端请求中较大的消息头的缓存最大数量和大小,“4”为个数,“128K”为大小,最大缓存量为4个128KB large_client_header_buffers 4 128k; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改 成off。 sendfile on; #设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接,单位是秒 keepalive_timeout 60; #服务器名字的hash表大小 server_names_hash_bucket_size 128;
Nginx中HttpGzip模块
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript test/css application/xml; gzip_vary on;
gzip:用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流
gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1KB的字节数,小于1KB可能会越压缩越大。
gzip_buffers:表示申请4个单位为16KB的内存作为压缩结果流缓存,默认是申请与原始数据大小相同的内存空间来存储GZIP压缩结果。
gzip_http_version:用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level:用来指定GZIP压缩比,1表示压缩比最小,处理速度最快;9表示压缩比最大,传输速度快,但处理速度最慢,也比较消耗CPU资源
gzip_types:用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的
gzip_vary:让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据
下面代码是虚拟主机的相关配置
server { listen 6100; server_name 192.168.10.10 www.lehh.com www.m.lehh.com; charset utf-8; index index.html index.htm index.jsp; root /web/wwwroot/www.ixdba.net access_log logs/www.ixdba.net.access.log main
server:定义虚拟主机开始的关键字
server_name:用来指定IP地址或域名,多个域名之间用空格分开
index:用于设定访问的默认首页地址
root:用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径
charset:用于设置网页的默认编码格式
access_log:用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式
下面的代码是URL地址配置设置:
loaction ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)${ root /web/wwwroot/www.ixdba.net; expires 30d }
URL地址匹配是Nginx配置中最灵活的部分。通过location关键字定义了地址
匹配的开始。location支持正则表达式匹配,也支持条件判断匹配。用户可以通过location命令实现Nginx对动态、静态网页进行过滤处理。
在上面这段location代码中,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给Nginx处理,而expires用来指定静态文件的过期时间,这里是30天。
同理,下面这段代码是将upload和html下所有文件都交给Nginx来处理,当然,upload和html目录包含在/web/wwwroot/www.ixdba.net目录中。
暂时先写这么多后面内容还很多明天更新重定向和静态缓存的相关配置。
以上是关于nginx的主要内容,如果未能解决你的问题,请参考以下文章