目前使用是正常的,但是我已经搞不清楚 location 到底是干啥的了
limit_req 写在外面,使用完全没有问题,所有页面都能限制
禁止指定 UA 及 UA 为空的访问的 if 却不能写外面,只能 /和 php 各写一个,如果只写 /那就只能首页限制,其他页面照样访问
nginx -t 没有报错
但是逻辑有没有问题?判断顺序对吗
server {
listen 80;
server_name www.tntsec.com;
#设置只是用 https
#add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
#记录日志,限制缓存为 1M
access_log /var/log/nginx/log/tntsec.log main buffer=1m;
#主目录
root /var/www/html/tntsec;
#index
index index.php index.html index.htm;
#系统负载控制
sysguard on;
sysguard_load load=10 action=/highload.html;
#限制并发,白名单
limit_req_whitelist geo_var_name=white_ip geo_var_value=1;
#限制并发
limit_req zone=one burst=5 forbid_action=/nocc.html;
limit_req zone=two forbid_action=/nocc.html;
limit_req zone=three burst=5 forbid_action=/nocc.html;
#屏蔽指定 IP
#deny 1.1.1.1;
#伪静态
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location / {
#禁止指定 UA 及 UA 为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
access_log off;
return 403;
}
#判断是不是使用代理访问,使用 CDN 请勿开启
#if ($http_x_real_ip != $http_x_forwarded_for){
# access_log off;
# return 403;
# }
#禁止非 GET|HEAD|POST 方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
access_log off;
return 403;
}
}
location ~ .*\.(css|js|ico|png)(.*) {
expires 30d;
}
# error_page 404 /404.html;
# error_page 500 502 503 504 = /500.html;
location ~ ^/admin/ {
deny all;
}
location ~ /(usr/uploads|usr/plugins/CommentToMail/cache|usr/plugins/Sitemap/sitemap|usr/plugins/CommentToMail/log)/.*\.(php|php5)?$
{
deny all;
}
location ~ .*\.php(\/.*)*$ {
#fastcgi_pass 127.0.0.1:9000;
#location ~ [^/]\.php(/|$) {
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
access_log off;
return 403;
}
if ($request_method !~ ^(GET|HEAD|POST)$) {
access_log off;
return 403;
}
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/dev/shm/fpm-cgi.sock;
#fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
1
tntsec OP 求姿势
|
2
ryd994 2015-11-03 21:36:39 +08:00 via Android
有时间来伸手为什么不去看看 error log ?
还有,所有 if!e 都应该用 try_files 代替 认真读完文档,自己写一个出来不难 网上拼拼凑凑的模板真是害死人 |
3
ryd994 2015-11-03 21:39:17 +08:00 via Android
还有限制 UA 没有任何卵用
对付搜索引擎用 robots 如果对方不遵守 robots ,又凭什么会怪怪写 UA 呢? |
4
msg7086 2015-11-03 21:43:48 +08:00 1
已经警告过你了,不要随便用 if 。
nginx 的 conf 不是程序,是申明性的配置文件,不是从上到下一句句执行的,不要把它当成是程序一样去理解。完全是两回事。 (特别是这种两个 if 混在一起的情况。多个 if 甚至可能直接造成 SIGSEGV |
5
xfspace 2015-11-03 21:46:29 +08:00 via Android 1
看博客是牛逼人物啊。为什么不问问神奇海螺呢?
|
6
wdlth 2015-11-03 22:14:02 +08:00
既然 useragent 是一样的,可以先判断完后设置一个变量值,再判断变量值也行,不用写两遍。
|
7
tntsec OP @ryd994 这个可以有,这个是 typecho 官方文档里的写法,并没有在意,现在改成了
try_files $uri $uri/ /index.php; 限制 UA 这个其实本意是为了限制空 UA ,防不会加载 UA 的低级 CC |
11
Andy1999 2015-11-03 22:49:55 +08:00 via iPhone
你以为百度的都是对的吗::doge
|
13
tntsec OP @Andy1999 试了才知道,我不认为 V2EX 里都是对的,文档里对每个选项都讲得太过详细,百度的互相转载。但是真像就在里面
|
14
tntsec OP @msg7086 if 不是正常逻辑吗,判断是不是空 ua ,是就返回 403.判断是不是不常见的请求方式,是就是 403 ,其他 200
|
15
ryd994 2015-11-04 02:00:46 +08:00 via Android 1
@tntsec 我可以向你保证,百度搜索的结果里是找不到真相的。真相只存在于源代码里,最接近真相的是官方英文文档,(伪官方)中文文档严重滞后。你嫌官方文档详细,我还嫌不够呢。连某个指令在哪个 phase 执行都不说。 V2EX 不全对,但质量绝对比百度高得多。
如果你觉得 if 就是普通的条件判断,那说明你 Nginx 不及格。 if 是 rewrite 模块内的指令,不是 Nginx 配置的语法结构。如果 if 和其他模块的配置配合,而你又不明白其内在机制的话,会有非常……呃……奇妙的效果。个人认为,学习 Nginx ,应该从 if is evil 开始 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ 你先看了这篇再说: http://www.aosabook.org/en/nginx.html |
16
ericFork 2015-11-04 02:36:39 +08:00
看着这么乱的代码排版,这么多的超长 if ,真是看不下去。
|
17
Livid MOD 如果想要写简单的 WAF 逻辑的话,还是上 ngx_lua 吧。 Nginx 自己的 if 真心不靠谱。
|
18
coolloves 2015-11-04 07:03:15 +08:00 via iPhone
mark
|
19
kn007 2015-11-04 07:34:27 +08:00
千万别用 if ,心中的痛
|
20
ynztyl10 2015-11-04 09:30:36 +08:00
if 语句慎用。。
|
21
vibrance 2015-11-04 14:52:51 +08:00
听说你被扒皮了
|
23
5870352 2015-11-09 13:43:37 +08:00
听说被扒皮了
|