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;

是否缓存查找时发生错误的文件一类的信息;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值