nginx配置即文件结构
作者:bin首先先理解文件的结构:
mian=>event
main=>event=>http=>server=>location
从右往左以此继承,如main中配置就为全局配置;
然后才是每个节点的属性:
1、main:
user :指定nginx允许用户,用户组
worker_processes :指定nginx开启的进程数量
error_log : 指定日志位置,以及日志级别
pid : 进程id储存位置
worker_rlimit_nofile : 用于绑定worker进程和cpu
2、event:
use :设定nginx的工作模式,linux推荐使用epoll
worker_connections :每个进程最大连接数,最大客户端连接数=worker_processes*worker_connections;
3、http:
include : 引入配置文件,减少主配置文件的复杂度
default_type:默认类型,例如php环境并没有安装那么使用二进制流(application/octet-stream)解析,出现流下载框
log_format:定义日志的打印格式,在后面access_log 等地方设置级别可以使用,例如:
log_format combie2 '$remote_addr - $remote_user [$time_local] ' access_log /logs/acc.log combie2 #在这里使用
client_max_body_size : 用户最大单个文件字节数
client_header_buffer_size : 设置请求投大小,一般1kb就够流,特殊有长cookie情况可以再增加
large_client_header_buffers :用来指定缓存最大数量和大小
sendfile :开启(on)高速文件传输模式
keepalive_timeout : 保持活动超时时间
client_header_timeout : 请求头接受超时时间
client_body_timeout : 请求体接受超时时间
send_timeout:响应客户端超时时间
gzip : 开启(on)压缩
4、server:
listen : 监听端口,通常为80
server_name : 指定ip地址或者域名地址,多个用空格隔开
index : 默认首页文件,例如 “index.php index.html” 它会以此从左往右找
root: 访问的根地址,配合index指定访问的文件
charset : 用于指定返回页面的编码格式
access_log : 指定日志文件地址,这里要注意文件读写权限
error_page : 指定错误类型和错误页面 ,示例,在目录找到对于的页面:
error_page 500 502 503 504 /50x.html
location =/50x.html {
root error_page/html/;
}
5、location:
基本语法:location [=|~|~*|^~] /uri/ { … }
其中/uri/就是正则表达式,或者普通的字符串匹配
= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~ 为区分大小写匹配(可用正则表达式)
!~为区分大小写不匹配
~* 为不区分大小写匹配(可用正则表达式)
!~*为不区分大小写不匹配
^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
-f和!-f判断文件是否存在
-d!-d判断目录是否存在
-e和!-e判断文件或者目录是否存在
-x和!-x判断文件是否可以执行
location = / { # 只匹配 / 查询。 } location / { # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。 } location ^~ /images/ { # 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。 } location ~*.(gif|jpg|jpeg)$ { # 匹配任何已 gif、jpg 或 jpeg 结尾的请求。 } location ~*.(gif|jpg|swf)$ { valid_referers none blocked start.igrow.cn sta.igrow.cn; if ($invalid_referer) { #防盗链 rewrite ^/ http://$host/logo.png; } }
值得注意等是在nginx中如果使用花括号{},那么整句正则都要使用单引号或者双引号包起来,因为花括号是nginx的配置端区分符
6、rewrite
语法 rewrite regex flag
使用配置块:server、location、if
flag支持字段
last : 表示rewrite之后搜索相应的uri或location
break : 表示终止匹配
redirect : 临时302重定向
permanent :永久301重定向
如下实现新旧网站交替时,只修改内容而不修改url地址的方式:
server { listen 80; server_name dev.zengbingo.com; location ~ ^/ben/ { rewrite ^/ben/(.*)$ /s?wd=$1 break; proxy_pass http://www.baidu.com; } }
请求:http://dev.zengbingo.com/ben/ben的笔记
实际请求地址为:https://www.baidu.com/s?wd=ben的笔记
并且浏览器上的url地址不会变化;
7、set
语法:set variable value
使用配置块:server location if
例如,使用请求参数变量进行反向代理重写:
server
{
listen 80;
server_name dev.zengbingo.com;
location ~ ^/ben {
set $query $query_string;
rewrite /ben /s?$query break;
proxy_pass http://www.baidu.com;
}
}
请求 :http://dev.zengbingo.com/ben?wd=ben的笔记
实际请求地址:https://www.baidu.com/s?wd=ben的笔记
8、break
语法:break
使用配置块:server、location、if
如果配置了break,那么配置块后面的重写(rewrite将不回执行)