content_by_lua ‘’; set_by_lua $c "return ngx.var.a + ngx.var.b"; rewrite_by_lua "ngx.var.a = ngx.var.a + 1"; access_by_lua 'if ngx.var.remote_addr == "127.0.0.1" thenreturnendngx.exit(403)';
虚拟主机
server_name .a.org; #可以用正则表达式 *.a.org 跟a.org 可以合并为 .a.org 多个域名并排,空格分隔
显示目录或文件
autoindex on;
autoindex_exact_size on; #显示文件大小
autoindex_localtime on; #显示最后修改时间
压缩返回
gzip on;
gzip_types text/plain application/x-javascript text/css application/xml; #指定类型文件压缩
gzip_min_length 1000;
gzip_buffers 4 8k;
默认读取的文件
index index.php index.html index.htm;
设置网站的根目录
root /var/nginx/avdata/public_html; #确保有目录权限x
默认请求处理
location / { #默认的处理try_files $uri $uri/ index.php?$args;
}
默认处理的匹配方式 配置的$uri 即不包含参数以/开头的请求地址
~ 区分大小写正则匹配
~* 不区分大小写正则匹配
^~ 如果匹配之后将停止往下检查
= 完全相等
例:
location ~ .php$ {#匹配.php的请求
try_files $uri $uri/ index.php?$args;#$args显示传递GET参数
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; }
location = index.php {#匹配index.php ,非页面上输入index.php的请求.页面上index.php的请求为/index.phpinclude fastcgi_params;fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;#$fastcgi_script_name默认跟$uri相同fastcgi_index index.php;
}
静态文件超时
location ~* .(jpg|jpeg|gif|png|js|css)$ {#匹配指定结尾文件access_log off;#错误不记录日志expires 30d;#客户端缓存30天
}
通过规则:
{}里面的设置不影响外部的设置,
location / {root /var/nginx/a/public_html/hi; }
外部的设置影响{}里的设置,所以可以在虚拟主机的外部定义root,全局共用
IP监听
listen 80; #IP:端口 或者直接端口,监听全部IP
简单重写代替
# 最后一个是处理方式或者是处理地址,之前的为文件或目录
# 找不到对应文件或目录将用最后一个作为请求代替
# $uri/ 以/结尾表示目录
try_files $uri $uri/ index.php;#文件或目录找不到的时候用index.php代替$uri
别名
location /i/ {alias /good/; #但$uri为/i/*规则的时候,$uri将被修改为/good/* 不能用于正则表达式内的location }
禁止访问
location ~ .db$ {#符合.db 结尾的文件禁止访问deny all;
}
指定IP访问
location ~ .db$ {#本机可访问.db 结尾的文件allow 127.0.0.1;
}
其他权限:
location /hello {allow 127.0.0.1; deny all; echo "hello world"; }
传输速度限制
#超过传输指定文件后限制速度
limit_rate_after 1m;
limit_rate 100k;
404错误记录
log_not_found off;# 404错误不记录
定义静态404错误
location / {//找不到文件定义状态吗try_files $uri $uri/ =404; } location ~ .php$ {fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_intercept_errors on;//让错误显示到前端fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html;//自定义404
规则:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
#ReWrite语法
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
一些核心及内置变量:http://nginx.org/cn/docs/http/ngx_http_core_module.html
附属:
一般Nginx 变量值容器的生命期是与当前请求相关联的,有特殊的。
变量是声明的,非过程的
设置变量
set $a aaa;
输出变量
echo $a;
echo "a $a;"
正常下,$都将被转义 所以 通过以下办法定义有$字符的变量
geo $do { default "$"; }
执行某个地址:
echo_exec /bar;
echo_location /bar "a=1&b=2";
获得参数:
$arg_*
输出指令不能有多条
配合echo的前后
echo_before_body "before..."; echo_after_body "after...";
处理顺序:
rewrite access content (echo proxy_pass 等) index #(地址不为/弃权处理) autoindex #(地址不为/弃权处理) ngx_static find-config 。。。 try-files /file1 /file2 =403 #(挨个尝试文件是否存在)
LUA 调用:
content_by_lua ‘ ngx.exit(403)’; set_by_lua $c "return ngx.var.a + ngx.var.b"; rewrite_by_lua "ngx.var.a = ngx.var.a + 1"; access_by_lua 'if ngx.var.remote_addr == "127.0.0.1" thenreturnendngx.exit(403)';
示例:
server {listen 80; server_name xx.com www.xx.com; gzip on; gzip_types text/plain application/x-javascript text/css application/xml; gzip_min_length 1000; gzip_buffers 4 8k; root /var/www/xx/public_html/; error_page 500 502 503 504 /50x.html; location = /50x.html {root html; }location / {index index.php index.html index.htm; try_files $uri $uri/ index.php?$args; }location ~ .(ico|gif|bmp|jpg|jpeg|png|swf|js|css) {expires 7d; try_files $uri $uri/ index.php?$args; }location ~ .php$ {fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param KOHANA_ENV "TESTING"; fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/"; include fastcgi_params; }location = index.php {include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_param KOHANA_ENV "TESTING"; fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/"; fastcgi_index index.php; }}
一般情况下记得把PHP某些函数禁用
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source,dl
disable_classes = perl