Nginx简介与基础配置
何为Nginx?
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。最初是为了解决C10k的问题,由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。
其特性有:
√模块化设计,较好的扩展性
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。
模块类型:
核心模块:core modules
标准模块:Standard HTTP modules、Optional HTTP modules、Mail modules
第三方模块
√高可靠性
master/worker,一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;
master:加载配置文件、管理worker进程、平滑升级...
worker:http服务,http代理,fastcgi代理...
√支持热部署
不停机更新配置文件、更换日志文件、更新服务器程序版本
√低内存消耗
1w个keep-alive连接模式下的非活动连接仅消耗2.5M内存
编译安装Nginx
[此处以CentOS 6.5编译安装Nginx-1.10.2版本为例进行说明]
安装前的依赖包(组):
①zlib-devel
②pcre-devel
③openssl-devel
④Development Tools & Server Platform Development
编译三步骤走起:
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-file-aio --with-http_v2_module
make && make install
Nginx的配置
主配置文件:nginx.conf
配置指令:必须以分号结尾,且支持使用变量
内置变量:由模块引入,可直接调用
自定义变量:定义->set variable_name value;引用->$variable_name
配置文件结构:
main block(全局配置段)
events(事件驱动配置段)
http(http协议配置段)
mail(mail配置段)
接下来逐一介绍各配置段:
main block:
正常运行必备的配置
①指定用于运行worker进程的用户和组
Syntax: user user [group];
Default: user nobody nobody;
Context: main
②指定nginx进程的pid文件路径
Syntax: pid file;
Default: pid nginx.pid;
Context: main
③单个worker进程所能够打开的最大文件数
Syntax: worker_rlimit_nofile number;
Default: —
Context: main
优化性能的配置
①worker的进程数;通常应为CPU的核心数减1
Syntax: worker_processes number | auto;
Default: worker_processes ;
Context: main
②
Syntax: worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
Default: —
Context: main
示例:worker_cpu_affinity 0001,0010 ...;
/*
CPUMASK:有几颗CPU就有几位二进制数字
0000 0001 第一个CPU
0000 0010 二
0000 0100 三
0000 1000 ... */
③worker_priority nice;
nice值:[-20,19],对应的优先级是100-139;
用于调试/定位问题的配置
①daemon on | off;
是否以守护进程方式启动nginx进程(默认是on)
②master_process on | off;
是否以master/worker模型启动nginx进程,调试时可关闭此项
③error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [level];
/*错误日志文件的记录方式及日志级别 方式:
file /PATH/TO/SOME_LOG_FILE
stderr 发送到错误输出
syslog:server=address[,parameter=value] 发送给syslog服务器
memory:size 记录到内存中,可一定程度减轻磁盘IO压力 level:
debug(依赖于configure时的--with-debug选项),info,notice,warn,error,crit,alert,emerg
/*
events
①worker_connections number;
设定单个worker进程能够打开的最大并发连接数,只能用在events中,默认值是512,受限于worker_rlimit_nofile number所设定的数量
当前系统Nginx所能承受的最大并发连接数:worker_processes*worker_connections
②use method;
指明并发连接请求处理时使用的方法(select,poll,epoll...)
③accept_mutex on | off;
是否打开worker的负载均衡机制(worker基于轮询方式处理请求),默认是开启的,依赖于main配置段中的lock_file此项定义的锁文件
http
ngx_http_core_module的核心配置
A.定义套接字相关功能的配置
①server {...}
配置一个虚拟主机
server {
listen PORT;
server_name HOSTNAME;
root /PATH/TO/DOCUMENTROOT;
} /*
(1)基于PORT的虚拟主机
listen指令要使用不同的端口;
(2)基于Hostname的虚拟主机
server_name指令指向不同的主机名;
(3)基于IP的虚拟主机
listen IP:PORT;
*/
②listen
①listen address[:port] [default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];
ssl //限制只能通过ssl连接提供服务
default_server //默认虚拟主机
backlog=number //后援队列
rcvbuf=size //接收缓冲大小
sndbuf=size //发送缓冲大小 ②listen port [default_server] [ssl]; ③listen unix:path [default_server] [ssl];
//多用于本地间,基于unix sock通过本地回环接口进行通信(不会经由内核中的协议栈)
③server_name name ...;
指明当前server的主机名,当有多个时,以空白字符分隔,有优先级如下
全名(精确匹配):the exact name 左侧匹配:the longest wildcard name starting with an asterisk, e.g. “*.example.com” 右侧匹配:the longest wildcard name ending with an asterisk, e.g. “mail.*” 正则匹配:the first matching regular expression (in order of appearance in the configuration file),e.g. “~^.*\.example\..*$” //支持使用*表示任意长度的任意字符
//支持使用~起始的正则表达式模式匹配
④tcp_nodelay on | off;
对keepalived模式下的连接是否启用延迟发送功能,仅能用在http,server,location中,默认是开启的
⑤sendfile on | off;
是否启用sendfile(在内核中构建响应报文)功能(默认关闭),最好启动起来
B.定义路径相关的配置
①root path;
设置web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在的目录路径
可用上下文:http,server, location, if in location
②location
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
//根据用户请求的URI来匹配定义的location,匹配到时,此请求将被响应的location块中的指令处理;可用在server和location上下文 其中:
=:URI精确匹配
~:正则表达式模式匹配,区分字符大小写
~*:正则表达式模式匹配,不区分字符大小写
^~:对URI左侧进行正则表达式匹配,不区分字符大小写 //匹配优先级:=>^~>~/~*>不带符号
/*示例*/
location = / {
[ configuration A ]
} location / {
[ configuration B ]
} location /documents/ {
[ configuration C ]
} location ^~ /images/ {
[ configuration D ]
} location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
③alias path;
定义路径别名,文档映射的一种机制;仅用于location中
/*示例*/ location /i/ {
alias /data/w3/images/;
}
相当于www.a.com/data/w3/images/ location /i/ {
root /data/w3/images/;
}
相当于www.a.com/data/w3/images/i/ /*
root指令,给定的路径对于location中的/uri/左侧的/;
alias指令,给定的路径对应于location中的/uri/右侧的/;
*/
④index file ...;
默认主页面
可用上下文:http,server,location
⑤error_page code ... [=[response]] uri;
根据用户请求的资源的http响应的状态码实现错误页面重定向,[=[response]] 可自定义响应码;
可用上下文:http,server,location
⑥try_files file ... uri;
try_files file ... =code;
用在server,location上下文;表示当用户请求的资源不存在时,尝试访问try_files 后面定义的file,可能有多个,第一个没有就访问第二个,以此类推;如果都访问不到,则应用最后的uri
C.定义客户端请求的相关配置
①keepalive_timeout timeout [header_timeout];
设定保持连接的超时时长;0表示禁止长连接;默认为75s
用在http,server,location上下文
②keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量,默认为100
用在http,server,location上下文
③keepalive_disable none | browser ...;
对哪种浏览器禁用长连接
用在http,server,location上下文
如 keepalive_disable msie6
④send_timeout time;
向客户端发送响应报文的超时时长,是指两次写操作之间的间隔时长
用在http,server,location上下文
⑤client_body_buffer_size size;
接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上
用在http,server,location上下文
⑥client_body_temp_path path [level1 [level2 [level3]]];
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
用在http,server,location上下文
/*示例*/ /var/tmp/body 2 1 2 2:两位16进制数字(256种变化)为一级子目录
1:一位16进制数字(16种变化)为二级子目录
2:两位16进制数字(256种变化)为三级子目录
D.对客户端请求进行限制的配置
①limit_rate rate;
限制响应给客户端的传输速率,单位是bytes/second,0表示无限制
用在http,server,location,if in location上下文
②limit_except method ... { ... };
限制对指定的请求方法之外的其他方法的使用
仅能用在location上下文
//示例: limit_except GET POST {
allow 192.168.1.0/32;
deny all;
} //表示除了GET和POST之外的其他请求方法仅允许192.168.1.0/32中的主机使用
E.文件操作优化的相关配置
①aio on | off | threads[=pool];
是否启用aio功能,默认是关闭的
用在http,server,location上下文
②directio size | off;
设定直接IO的大小或关闭此功能,默认是关闭的
用在http,server,location上下文
③open_file_cache off;
open_file_cache max=N [inactive=time];
对打开的文件是否进行缓存
用在http,server,location上下文
/*
nginx可以缓存以下三种信息:
(1)文件的描述符/文件大小和最近一次的修改时间
(2)打开的目录结构
(3)没有找到的或者没有权限访问的文件的信息
*/ max=N //可缓存的缓存项上限;到达后会使用LRU算法实现缓存管理
[inactive=time] //缓存项的超时时长,在此处指定的时长内未被命中的缓存项即为非活动项
④open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息
用在http,server,location上下文
⑤open_file_cache_min_uses number;
在open_file_cache指令的inactive参数指定的时长内,至少命中此处指定的次数方可不被归类到非活动项
用在http,server,location上下文
⑥open_file_cache_valid time;
缓存项有效性的检查频率,默认是60s
用在http,server,location上下文
ngx_http_access_module:实现基于IP的访问控制功能模块
①allow address | CIDR | unix: | all;
②deny address | CIDR | unix: | all;
可用上下文:http, server, location, limit_except
//示例: location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
ngx_http_auth_basic_module:基于http协议进行basic认证
①auth_basic string | off;
②auth_basic_user_file file;
认证用的账号密码文件,格式:name:password:commet
可用上下文:http, server, location, limit_except
//示例: location /admin/ {
auth_basic "admin";
uth_basic_user_file /etc/nginx/.ngxpasswd;
} //密码格式:
htpasswd命令
如:# htpasswd -c -m /etc/nginx/.ngxpasswd tom
# htpasswd -m /etc/nginx/.ngxpasswd alice
ngx_http_stub_status_module:用于输出nginx的基本状态信息,用在server和location上下文
//示例: location /basic_status {
stub_status;
} //显示效果:
Active connections: 291 //处于活动状态的客户端连接数量包括等待的连接
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106 //其中:
reading:处于读取客户端请求报文首部的连接数
writing:处于向客户端发送响应报文过程中的连接数
waiting:处于等待客户端发送请求的空闲连接数
ngx_http_referer_module:是用来阻止访问一个在referer头域值无效请求的网站。要记住,制造要求与适当的referer字段值是很容易的,所以该模块的目的是阻止这样的请求,但要彻底阻断正常的浏览器发送请求的质量流量。还应考虑常规浏览器可能无法发送referer字段即使有效的请求。
①valid_referers none | blocked | server_names | string ...;
定义合法的referer数据
用在server,location上下文
none //请求报文首部没有referer首部 blocked //请求报文的referer首部没有值 server_names //其值是主机名 arbitrary string //直接字符串,可以使用*作为通配符 regular expression //被指定的正则表达式模式匹配到的字符串;要使用~开头 //示例: valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/~\.google\.; if ($invalid_referer) {
return 403;
}
Nginx简介与基础配置的更多相关文章
- nginx安装及基础配置(含jdk安装及配置)
0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...
- Nginx 平滑升级、Nginx的一些基础配置
# Nginx 平滑升级 # 方案一:使用Nginx服务信号进行升级 # 1.将就版本的sbin目录下可执行nginx进行备份(mv nginx nginxold) # 2.将新版本 configur ...
- nginx简介和配置gd
转自:https://www.cnblogs.com/zhouxinfei/p/7862285.html nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也 ...
- 超详细Nginx的安装和配置教程
一. 编译安装nginx 下载nginx安装包 wget http://nginx.org/download/nginx-1.8.0.tar.gz 也可以选择其他版本,官网:http://nginx. ...
- nginx简介与配置
nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯的程序 ...
- nginx 的基础配置[转]
nginx 的基础配置 分类: 工具软件2013-11-13 23:26 11人阅读 评论(0) 收藏 举报 目录(?)[-] 管理配置文件 全局配置 虚拟机server配置 location配置 ...
- Nginx简介及配置实用
Nginx简介 Nginx是一个高性能的HTTP和反向代理服务器: 支持的操作系统众多,windows.linux. MacOS X: 可实现负载均衡: Rewrite功能强大: 电商架构大部分都采用 ...
- 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动
之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...
- 【netcore基础】ubuntu 16.04 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动
今天来整理下 netcore 在 linux(ubuntu) 上的运行环境搭建 对应版本 ubuntu 16.04 .net core 2.1 nginx version: nginx/1.10.3 ...
随机推荐
- WifiManager Wifi 管理器&&知识点
WifiManager 主要使用的技术: SimpleWifi,MahaApp.Metro控件 一 网卡设置 1.获取所有网卡(NetWorkAdapter类) 方法A 通过API SELECT * ...
- 基于V8引擎的C++和JS的相互交互
基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎.去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行:脚本可能是一个表达式:一段js代码:或者一个文件执行表达式返回j ...
- [JZOJ 5698] 密码锁
思路: 差分+排序 #include <bits/stdc++.h> using namespace std; #define ll long long const int maxn = ...
- 尚学python课程---12、python语言介绍
尚学python课程---12.python语言介绍 一.总结 一句话总结: 1.操作简单:简便计算:允许通过单个“import”语句后跟一个函数调用来完成复杂的计算.虽慢 2.库丰富:比如人工智能和 ...
- Mybatis笔记 – insert语句中主键的返回
在DBMS中可以使用insert语句显示指定自增主键值,但Mybatis中不可,即使指定了也无效,可以使用特殊的方式返回主键. 一.自增主键返回 mysql自增主键执行insert提交 ...
- ASP.NET的底层体系2
文章引导 1.ASP.NET的底层体系1 2.ASP.NET的底层体系2 引言 接着上一篇ASP.NET的底层体系1我们继续往下走 一.System.Web.HttpRuntime.ProcessRe ...
- Bzoj 1036 树的统计 分类: ACM TYPE 2014-12-29 18:55 72人阅读 评论(0) 收藏
Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. Q ...
- day4:Python列表(list)元组( tuple)字典(dict)
列表----list 列表:中括号,每个元素用‘,’分割,列表里面也可以嵌套列表,列表里面可以包含数字,字符串,布尔值等,也就是元素的集合 例:test = [2,4,'sun','yao'] #索引 ...
- 炮兵阵地 /// 状压DP oj26314
题目大意: 炮兵阵地 设置炮兵的位置 其上两位 下两位 左两位 右两位 不能同时设置炮兵 这题是 corn fields玉米地 的升级版 可以先看下这题的注释 更详细些 第一种方法是网上大多数题解的解 ...
- object_detection/protos/*.proto: No such file or directory
1 背景 使用TensorFlow Object Detection API的时,在object_detection/protos/中,可以看到一些proto 文件,需要使用protoc程序将这些pr ...