==================================================================================
通用配置:
include 是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度.类似于 Apache 中的 include 方法.
default_type 属于 HTTP 核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置 PHP 环境时,Nginx 是不予解析的,此时,用浏览器访问 PHP 文件就会出现下载窗口.
log_format 是 Nginx 的 HttpLog 模块指令,用于指定 Nginx 日志的输出格式.main 为此日志输出格式的名称,可以在下面的 access_log 指令中引用.
client_max_body_size 用来设置允许客户端请求的最大的单个文件字节数.
client_header_buffer_size 用于指定来自客户端请求头的 headerbuffer 大小.对于大多数请求,1KB 的缓冲区大小已经足够,如果自定义了消息头或有更大的 cookie,可以增加缓冲区大小.这里设置为 32KB.
large_client_header_buffers 用来指定客户端请求中较大的消息头的缓存最大数量和大小, "4" 为个数,"128K" 为大小,最大缓存为 4 个 128KB.
sendfile 参数用于开启高效文件传输模式.将 tcp_nopush 和 tcp_nodely 两个指令设置为 on,用于防止网络阻塞.
keepalive_timeout 用于设置客户端连接保持活动的超时时间.在超过这个时间之后,服务器会关闭该连接.
client_header_timeout 用于设置客户端请求头读取超时时间.如果超过这个时间,客户端还没有发送任何数据,Nginx 将返回 "Request time out(408)" 错误.
client_body_timeout 用于设置客户端请求主体读取超时时间,默认值为 60.如果超过这个时间,客户端还没有发送任何数据,Nginx 将返回 "Request time out(408)" 错误.
send_timeout 用于指定响应客户端的超时时间.这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx 将会关闭连接.
gzip 用于设置开启或者关闭 gzip 模块,"gzip on" 表示开启 gzip 压缩,实时压缩输出数据流.
http://nginx.org/en/docs/http/ngx_http_core_module.html
1),定义套接字功能 (虚拟主机)
server 标志定义虚拟主机开始;
listen 用于指定虚拟主机的服务器端口;
server_name 用来指定 IP 地址或者域名,多个域名之间用空格分开;
index 用于设定访问的默认首页地址;
root 指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径;
charset 用于设置网页的默认编码格式.
access_log 用来指定此虚拟主机的访问日志存放路径.最后的 main 用于指定访问日志的输出格式.
1#.server {...}
配置一个虚拟主机
套接字种类: v4,v6,unix socket //Unix socket 使用的是
server {
listen PORT;
server_name HOSTNAME;
root /path/to/documentroot;
...
}
2#.listen address[:port][default_server] [ssl] [backlog=number][rcvbuf=size][sndbuf=size]//
listen port [default_server] [ssl]// 指定本机所有可用端口
listen unix:path [default_server] [ssl] // 使用 unix socket 通信
default_server: 默认虚拟主机 // 用户请求的都不匹配时的默认返回信息
[backlog=number]// 后援队列: 人太多, 等待队列排满了, 靠后援队列, 后援队列也满了,那就超时了
[rcvbuf=size] // 接受缓冲大小
[sndbuf=size] // 发送缓冲大小
ssl: 限制只能通过 ssl 链接提供服务
3#.server_name: 指定当前 server 的主机名; 后可跟一个空白字符分隔的多个主机;
*: 匹配任意长度任意字符
~: 正则表达式模式匹配 ,"\d" 数字 0-9
假如用户请求的能够被多个 server 匹配到,则根据优先级,优先顺序如下
1. 精确名称
2. 左侧通配, *.mt.comm
3. 右侧通配, www.mt.*
4. 正则表达式匹配
正如: www.mt.com
Nagle 算法.它规定:如果包的大小满足 MSS,那么可以立即发送,否则数据会被放到缓冲区,等到已经发送的包被确认了之后才能继续发送.
1.server_name www.mt.comm;
2.server_name *.mt.comm;
3.server_name www.mt.*;
4.server_name ~^.*\.mt\..*$;
4#.tcp_nodelay on | off; // 只有在长连接时启用
通过这样的规定,可以降低网络里小包的数量,从而提升网络性能.
tcp 自己的优化, 把多个小文件打包成一个文件发送
第一个到达的时候,太小了, 等待几个小的结合到一起发, 节约带宽
对 keepalived 模式下的链接启用 tcp_nodelay 选项
5#.tcp_nopush on | off;// 只有在 sendfile 启用时才有用
开启或者关闭 nginx 在 FreeBSD 上使用 TCP_NOPUSH 套接字选项, 在 Linux 上使用 TCP_CORK 套接字选项. 选项仅在使用 sendfile 的时候才开启.
默认是关闭的
6#.sendfile on|off
在内核中直接封装响应报文, 并发送, 默认是关闭的, 建议开启
... // 等等
备注:tcp_nopush 和 tcp_nodelay 的详细说明详见:https://www.cnblogs.com/wajika/p/6573014.html
2),定义路径相关配置
1#.root PATH // 位置 http,单个 server,located 中仅对当前 url 生效, if in location
可用于 server,http,location,if in location
设置 web 资源路径映射, 用于用户请求的 URL 所对应的本地文件系统上的文档目录路径
匹配模式:
2#.location
location [= | ~ | ~* | ^~ |@] uri {...} // 优先级
=: 精确匹配
~: 正则表达式模式匹配, 区分字符大小写
~*: 正则表达式模式匹配, 不区分字符大小写
^~: 锚定行首 // 对开头前的 uri 匹配
@:是用来定义 "Named Location" 的(可以理解为独立于 "普通 location" 和 "正则 location" 之外的第三种类型),这种 "Named Location" 不是用来处理普通的 HTTP 请求的,它是专门用来处理 "内部重定向(internally redirected )" 请求的.
注意:这里说的 "内部重定向(internally redirected )" 是不需要跟浏览器交互的,纯粹是服务端的一个转发行为.
匹配优先级:=,^~,~*,~, 不带符号 // 从大到小
location @name {...}
location 可以放在 server 内部,也可放在 location 内部
根据用户请求的 URI 来匹配定义的 location, 匹配到时, 此请求将被响应的 location 中所配置的块所响应
示例 1:
示例 2:
location ~*\.txt {
gzip on;
}
server {
...
location {
...
}
location {
...
}
}
示例 3:
location ~ .*\.(gif|jpg|jpeg|png|bmgf|swf)$ { // 区分大小写
root /web/www/picture;
expires 30d; // 指定静态文件的过期时间为 30 天
}
示例 4:
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://localhost:8080;
}
将 upload 和 html 下的所有文件都交给 Nginx 来处理.
location ~ ^/(upload|html)/ {
root /web/www;
expires 30d;
}
只能用在 location 中
// 假如有多个 location 匹配到了
3#.alias path: // 定义路径别名
注意:
location /i/ {
alias /data/w3/images/;
}
alias 指令,给定的路径对应于 location 中的 / uri / 后的这个 url
注: 附件 2
4#.index index.html // 设置默认主页
http,server,location 中都可以定义
5#. 自定义错误页面 // 根据用户请求的资源的 http 响应码
定义在: http,server,location 中
3),定义客户端请求的相关配置
error_page code ... [=[response]] uri;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
error_page 404 =200 /empty.gif; // 重定向 404 响应码为 200
error_page
6#.try_file // 应用于 server,location,
try_files file ... uri; // 用户请求的页面不存在, 使用的响应文件,依次查找,都没有,就用 uri
try_files file ... =code;
location /images/ {
try_files $uri /images/default.gif;
}
例如: keepalive_disable msie6 //msie6 不支持长连接
1#.keepalive 相关, 应用在 http,server,location
keepalive_disable none|browser // 关闭对哪些浏览器的 keepalive
设定用于存储客户端请求报文的 body 部分的临时存储路径及子目录结构和数量
2#.keepalive_requests number // 一次长连接所允许请求资源的最大数量
3#.keepalive_timeout timeout [header_timeout]; // 超时时间,默认 75s
keepalive_timeout 75s // 默认
4#.send_timeout 60s // 向客户端发送响应报文的超时时长;特别地, 是指两次写操作之间的间隔时长
5#.client_body_buffer_size size; // 接受客户端请求报文的 body 部分的缓冲区大小,默认为 16k, 超出此大小时,其将被暂存到磁盘上
client_body_buffer_size 8k|16k;
6#.client_body_temp_path path [level1 [level2 [level3]]];
例如 / var/tmp/body/1,2,3 子目录, 分级存储,
level1,创建多少个 1 级子目录,多少个 2 级子目录,多少个 3 级子目录
/var/tmp/body 2 1 // 创建一级子目录 256 个,每个一级目录创建 16 个子目录
2:16 进制表示从 00-ff,2 个十六进制字符来创建一级子目录,1 个 16 进制字符来创建二级子目录
2 个 16 进制表示范围: 256
4),对客户的请求进行限制的配置
client_body_temp_path /spool/nginx/client_temp 1 2;
6#.client_body_in_file_only on | clean | off;
7#.client_body_in_single_buffer on | off;
8#.
9#.client_body_timeout time;
10#.client_header_buffer_size size;
11#.client_header_timeout time;
12#.client_max_body_size size;
使用 dd 命令创建测试文件
1#.limit_rate rate // 限制响应给客户端每 s 响应的速率, 单位: bytes/second 默认是 0: 不做限制
location /download/ {
root /web/htdocs;
limit_rate 20;
}
wget 去下载
5),文件操作优化的配置
2#.limit_execpt method...{...} // 使用范围 location
limit_execpt GET POST { // 只允许该主机可以使用 GET,POST 之外的其他方法
allow 192.168.1.1/32; //GET 方法是大家都可以使用
deny all;
}
curl -X /// 使用自定义方法
nginx 可以缓存以下三种信息:
1#.aio on|off|threads[=pool] // 异步 IO,定义为 http,server,location 中
location /video/ { // 线程池不指定,用多少,启用多少
aio on;
oputput_bufffers 64k;
}
2#.directio size|off // 直接 io,http,server,location,// 数据不再内存中保留, 直接写入到 disk
3#.open_file_cache off; // 是否缓存, 缓存文件的元数据, 并不是文件的内容
open_file_cache max=N [inactive=time] // 缓存多少个文件的信息, 失效时间 20s
// 当条目满载的时候, 使用 LRU 最近最少使用算法剔除那些不经常使用的
//inactive: 多长时间内没有被访问,就定为超时, 剔除
1. 文件的描述符, 文件大小, 和最近一次修改的时间
2. 打开的目录的结构,
3. 没有找到的文件,或者没有权限访问的文件的相关信息
五,其他模块
open_file_cache max=1000 inactive=20s
4#.open_file_cache_errors on | off; // 是否缓存查找时发生错误的文件的相关信息
5#.open_file_cache_min_uses number; //open_file_cache 指定的 inactive 参数定义的时长内, 至少被命中此处指定的次数, 方可不被归类为 inactive
6#.open_file_cache_valid time //valid: 合法的, 每隔多长时间检查一下缓存是否失效,默认 60s
应用 Context:http, server, location, limit_except
1),ngx_http_access_module
http://nginx.org/en/docs/http/ngx_http_core_module.html
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
allow address | CIDR | unix: | all;
使用 openpasswd 或者 htpasswd 生成
2),ngx_http_auth_basic_module
location /admin/ {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
Syntax: auth_basic string | off;
Default:
auth_basic off;
Context: http, server, location, limit_except
文件格式:
yum -y install httpd
htpasswd -c -m /etc/nginx/.nginxpasswd tom //-d crypt 加密
htpaswwd -m /etc/nginx/.nginxpasswd wolf
nginx 状态输出: 以后做监控的时候会用到
name:passwd:comment
vim /etc/nginx/nginx.conf
http {
server {
server_name www.mt.com;
root /web/www;
listen 80;
location /admin/ {
auth_basic "Admin Area.";
auth_basic_user_file /etc/nginx/.ngpasswd;
}
}
// 注: location 只能在 server 内部, 否则会报错
3),ngx_http_stub_status_module // 状态页面
none: 请求报文中首部没有 refer 首部
4),ngx_http_referer_module // 引用参考, 从哪里获取到的数据
valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;
if ($invalid_referer) { // 不被 valid_referers 匹配到的都是 invalid_refer 变量的内容
return 403;
}
valid_referers none | blocked | server_names | string
// 定义合法的
blocked: 请求报文 refer 首部没有值
server_names: 给定一个服务器名称, 来自于该服务器的都认为是合法的
string:
直接字符串, 可以使用 * 作为通配符;
指定正则表达式匹配到的字符串; 要使用~ 开头;
valid_referers none blocked server_names *.mt.com *.mt.* ~\.mt\.
注: 该模块主要用于防盗链
六,实验实验一:开启 status 页面
来源: http://www.bubuko.com/infodetail-2482753.html