Nginx简介和常用的一些配置
简介
Nginx是一个免费的、开源的、高性能的HTTP服务器和反向代理,以及IMAP/POP3代理服务器。Nginx是为解决C10K问题编写的少数服务器之一。与传统服务器不同,NGNX不依赖线程来处理请求。相反,它使用了更可扩展的事件驱动(异步)架构。这种架构使用较小但更重要的是在负载下可预测的内存量。即使您不希望同时处理数千个请求,您仍然可以从Nginx的高性能和小内存占用中受益。
特点
- 静态的web资源服务器;(图片服务器,或js/css/html/txt等静态资源服务器)
- 结合FastCGI/uwSGI/SCGI等协议反代动态资源请求;
- http/https协议的反向代理;
- imap4/pop3协议的反向代理;
- tcp/udp协议的请求转发;
- 使用epoll模型,使Nginx在高并发环境下表现的很好。但是处理动态请求的时候没有太多优势(静态小文件多的情况下同时处理的连接数多)
- 占用资源少
- 配置简单,灵活
应用的场景
- 处理静态请求(图片,视频服务)html js css flv等等
- 处理动态请求,nginx+fastcgi 的方式运行
- 反向代理,负载均衡
- 缓存服务
安装
这里使用编译安装
可以再官网找到tar包,http://nginx.org/en/download.html
系统: CentOS7
Nginx版本:1.14
yum install openssl openssl-devel gcc gcc-devel pcre pcre-devel -y
useradd -M -s /sbin/nologin nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.14.0.tar.gz ##这里直接wget吧tar包下载下来
tar -xf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure --prefix=/usr/local/nginx1.14 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-threads --with-file-aio
make && make install
ln -sv /usr/local/nginx1.14 /usr/local/nginx
PATH=/usr/local/nginx/sbin/:$PATH
我们可以看一下Nginx目录结构
[root@localhost nginx-1.14.0]# tree /usr/local/nginx -L 1
/usr/local/nginx
├── conf #存放配置文件的目录
├── html #默认的站点目录
├── logs #存放日志的目录
└── sbin #nginx命令的目录
常见配置指令
1.user
格式:user user [group]
定义worker进程所属的用户和用户组
2.pid /PATH/TO/PID_FILE
pid文件路径
3.include file
指明包含进来的其它配置文件片断;
4.load_module file
指明要装载的动态模块
性能优化相关的配置
1.worker_processes number | auto;
worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数;
auto:当前主机物理CPU核心数;
2.worker_cpu_affinity cpumask …;
worker_cpu_affinity auto [cpumask];
cpu核心绑定,将worker进程绑定在固定的cpu核上,我们考虑这样一种场景,worker进程没有绑定在固定的cpu上,worker进程可能每次都在不同的cpu上运行,比如第一次在第一个cpu上,第二次在第二个cpu上,这样你在第一个cpu上的缓存就用不到了。就会被浪费掉,减少了缓存命中。
举个例子,加入有4个cpu我们可以这样写
worker_cpu_affinity 0001 0010 0100 1000;
其中0001表示绑定在0号cpu上,0010表示绑定在1号cpu上。以此类推。
ps axo pid,command,psr| grep nginx| grep -v grep #可以用这个命令查看是否绑定成功,请求进来的时候,执行看一下绑定的cpu变了没。
3.worker_priority number;
指定worker进程的nice值,设定worker进程优先级;[-20,20]
4.worker_rlimit_nofile number;
worker进程所能够打开的文件数量上限;
事件驱动相关的配置
1.worker_connections number;
每个worker进程所能够打开的最大并发连接数数量;
nginx所有进程并发连接数=worker_processes * worker_connections
2.use method;
指明并发连接请求的处理方法,一般使用epoll
3.accept_mutex on | off;
处理新的连接请求的方法;on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程;
与套接字相关的配置:
1.server { … }
配置一个虚拟主机;
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
2.listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
格式:listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
- default_server:设定为默认虚拟主机;
- ssl:限制仅能够通过ssl连接提供服务;
- backlog=number:后援队列长度;
- rcvbuf=size:接收缓冲区大小;
- sndbuf=size:发送缓冲区大小;
3.server_name name …;
指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;
支持通配任意长度的任意字符;server_name www.ice.*
支持~起始的字符做正则表达式模式匹配;
匹配优先级机制:
首先是字符串精确匹配;
左侧*通配符;
右侧*通配符;
正则表达式;
4.tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项;同个链接比如请求多个资源,会到一定程度一起发送,而不是马上发送。开启状态就是直接发。不攒起来发。
5.tcp_nopush on|off;
在sendfile模式下,是否启用TCP_CORK选项;吧响应报文首部和文件起始内容放在一起发送,发送一个文件在一个报文里,因为sendfile是高级io,用户请求的资源在硬盘上,一般是从硬盘读取到内核,然后从内核读取到进程,然后再从进程发往内核,然后再送出去。sendfile模式则是,不需要从内核读取到进程,而是直接从硬盘读取到内核然后直接发送出去。然后报文首部在nginx进程生成,然后发送到内核,内核再从网卡出去。而开启了这个选项会让内核里的资源等一等进程的报文首部。合并成一个文件再发送出去
6.sendfile on | off;
是否启用sendfile功能;sendfile是高级io,用户请求的资源在硬盘上,一般是从硬盘读取到内核,然后从内核读取到进程,然后再从进程发往内核,然后再送出去。sendfile模式则是,不需要从内核读取到进程,而是直接从硬盘读取到内核然后直接发送出去。
定义路径相关的配置:
1.root path;
设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置:http, server, location, if in location;
2.location [ = | ~ | ~* | ^~ ] uri { … }
Sets configuration depending on a request URI.
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;
=:对URI做精确匹配;
~:对URI做正则表达式模式匹配,区分字符大小写;
~*:对URI做正则表达式模式匹配,不区分字符大小写;
^~:对URI的左半部分做匹配检查,不区分字符大小写;
不带符号:匹配起始于此uri的所有的url;
匹配优先级:=, ^~, ~/~*,不带符号;
官方的一个典型例子
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
#请求“/”的时候会匹配configuration A
#请求“/index.html”将会匹配configuration B,
#请求“/documents/document.html”将会匹配configuration C
#请求“/images/1.gif”将会匹配configuration D
#请求“/documents/1.jpg”将会匹配configuration E
3.alias path;
定义路径别名,文档映射的另一种机制;仅能用于location上下文;
注意:location中使用root指令和alias指令的意义不同;
(a) root,给定的路径对应于location中的/uri/左侧的/;
(b) alias,给定的路径对应于location中的/uri/右侧的/;
4.index file …;
默认资源;http, server, location;
5.error_page code … [=[response]] uri;
定义错误页面,可以再location内定制错误页面
# error_page 404 /404.html;
# location = /40x.html { ##这里可以用root指令定制错误页面
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
6.try_files file … uri;
定义客户端请求的相关配置
1.keepalive_timeout timeout [header_timeout];
设定保持连接的超时时长,0表示禁止长连接;默认为75s;
2.keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量,默认为100;
3.keepalive_disable none | browser …;
对哪种浏览器禁用长连接;
4.send_timeout time;
向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长;
5.client_body_buffer_size size;
用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;
client_body_temp_path path [level1 [level2 [level3]]];
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
client_body_temp_path /var/tmp/client_body 2 1 1
1:表示用一位16进制数字表示一级子目录;0-f
2:表示用2位16进程数字表示二级子目录:00-ff
2:表示用2位16进程数字表示三级子目录:00-ff
对客户端进行限制的相关配置:
1.limit_rate rate;
限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;
2.limit_except method … { … }
限制对指定的请求方法之外的其它方法的使用客户端;
limit_except GET {
allow 192.168.1.0/24;
deny all;
}
文件操作优化的配置
1.aio on | off | threads[=pool];
是否启用aio功能;
2.directio size | off;
在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;
3.open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息:
(1) 文件的描述符、文件大小和最近一次的修改时间;
(2) 打开的目录结构;
(3) 没有找到的或者没有权限访问的文件的相关信息;
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;
4.open_file_cache_valid time;
缓存项有效性的检查频率;默认为60s;
5.open_file_cache_min_uses number;
在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;
6.open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息;
上一篇: Resin下配置RMI的指定Host
推荐阅读
-
nginx中查看关于php的配置和php
-
Nginx的安装和配置
-
Maven简介(一)——Maven的安装和settings.xml的配置 博客分类: maven Maven安装installsettings.xml
-
实现基于nginx的tomcat负载均衡和集群配置 博客分类: 实战技术 nginxtomcatmemcached
-
saltstac的简介和安装与配置
-
公用的、基础的、重置的css和一些常用的文件
-
vue中关于router,vuex,axios,api,utils的一些常用配置
-
Java常用的一些多媒体文件基本操作方法简介
-
Java常用的一些多媒体文件基本操作方法简介
-
apache和nginx的一些配置资料 博客分类: ApacheNginx nginxapacherewritevirtualhost