设置缓存请求过期时间
在 web 开发中我们常常要用的 nginx 作为高性能的http和反代web服务器,有些时候我们需要对网站程序配置统一的默认缓存配置,这个时候我们就可以通过配置 nginx 设置缓存请求过期时间来实现。
设置nginx配置cache-control参数
浏览器如果在过期时间内发现新的文件,则不会使用缓存的数据,而是直接向 nginx 服务器请求新的数据。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)$ {
#禁止缓存,每次都从服务器请求
#add_header Cache-Control no-store;
#设置过期时间60秒,60秒过后向服务器重新请求数据
#add_header Cache-Control max-age=60;
}
设置nginx配置expires参数
使用 expires 参数优先级比 cache-control 参数要低,一旦配置 expires 则自动设置 cache-control 头标
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)?$ {
#设置缓存过期时间两分钟
expires 2m;
# access_log off;
}
语法:expires [time|epoch|max|off]
默认值:off
time:
- 2s-两秒
- 2m-两分钟
- 2h-两小时
- 2d-两天
使用 time 可以为正负数,负数表示 no-cache 正数或零表示 max-age=time
epoch:
不设置失效时间
需要注意的是,这两种缓存方式只能在用户不对浏览器强制刷新的情况下生效,如果用户通过url来进行访问,是可以访问到缓存的。
常用屏蔽规则配置
目前大部分网站大多使用了 nginx 作为 web 服务器 nginx 虽然非常强大,但默认情况下并不能阻挡恶意访问,我们可以通过一些常用的 nginx 规则配置来做一些简单常规的安全处理。
防止某些类型文件被下载
如果网站数据库导出到站点根目录进行备份,很有可能也会被别人下载,从而导致数据丢失的风险,以上规则可以防止一些常规文件被下载,可根据实际情况调整。
location ~ \.(zip|rar|sql|bak|gz|7z)$ {
return 444;
}
屏蔽非常见蜘蛛爬虫配置
如果我们经常分析网站日志就会发现,一些奇怪的UA总是频繁的来访问网站,而这些UA对网站收录毫无意义,反而增加服务器压力,可以直接将其屏蔽掉禁止访问
if ($http_user_agent ~* (SemrushBot|python|MJ12bot|AhrefsBot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup)) {
return 444;
}
# 如:User-Agent:Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
禁止某个目录执行脚本配置
我们可以通过以上配置禁止目录内有效脚本执行,比如网站上传目录,通常存放的都是静态文件,如果因程序验证不严谨被上传木马程序,导致网站被黑,以上规则请根据自身情况改为您自己的目录,需要禁止的脚本后缀也可以自行添加。
#uploads|runtime|templets 这些目录禁止执行PHP
location ~* ^/(uploads|runtime|templets)/.*.(php|php5|php7)$ {
return 444;
}
注意:一定要放在 location ~ .php$ 之前否则不生效
屏蔽指定ip或ip段配置
如果网站被恶意灌水或cc攻击,可从网站日志中分析特征ip,将其ip或ip段进行屏蔽,通过配置以上配置我们可以过滤恶意的国外ip。
#屏蔽192.168.1.1这个IP
deny 192.168.1.1;
#屏蔽192.168.2.* 这个段
deny 192.168.2.0/24;
#屏蔽所有
deny all;
#允许192.168.0.1这个IP
allow 192.168.0.1;
配置规则注意事项
如无特殊注明,以上的命令均添加到 server 段内,修改 nginx 配置之前务必做好备份,修改完毕后需要重载一次 nginx 否则不会生效。
使用Lua作为脚本扩展模块
借助于 lua-nginx-module 我们可以将 lua 作为 nginx 的扩展脚本模块实现更高级的功能
安装luajit和lua-nginx-module
https://blog.csdn.net/zhaoydzhaoyd/article/details/107916968
直接输出content
- content_by_lua
location /lua1 {
default_type 'text/html';
content_by_lua "ngx.say('hello my lua1')";
charset utf-8;
}
文件方式处理输出content
- content_by_lua_file ```nginx
location /lua { default_type ‘text/html’; content_by_lua_file conf/lua/hello.lua; #相对于nginx安装目录 charset utf-8; }
<a name="SSjPf"></a>
### 异步记录日志例子
- log_by_lua_file
```nginx
location ~ {
log_by_lua_file conf/lua/log.lua; #相对于nginx安装目录
}
- log.lua ```nginx local method = ngx.var.request_method; local headers = ngx.req.get_headers();
function writefile(filename, info) local wfile=io.open(filename, “a+”) assert(wfile) wfile:write(info) wfile:close() end
local log_text =”method:”..method..”\r\n”;
for k, v in pairs(headers) do log_text=log_text..k .. “:” .. v..”\r\n”; end
writefile(“/www/server/nginx/conf/lua/lua_test.log”,log_text); ```
nginx模块指令
日志处理器
- log_by_lua
-
设置nginx变量,可以实现复杂的复制逻辑
set_by_lua
-
请求访问阶段处理,用于访问控制
access_by_lua
-
内容处理器,接收请求处理并输出响应
content_by_lua
-
lua api
ngx.var nginx变量
- ngx.req.get_headers 获取请求头
- ngx.req.get_uri_args 获取URL请求参数
- ngx.redirect 重定向
- ngx.print 输出响应内容体
- ngx.say 同ngx.print,但是会在最后输出一个换行符
- ngx.header 输出响应头
参考文档
https://www.runoob.com/lua/lua-tutorial.html
https://www.kancloud.cn/qq13867685/openresty-api-cn/159139