我他么傻逼了, tengine/nginx 到底怎么配置,蛤?求纠错 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tntsec
V2EX    NGINX

我他么傻逼了, tengine/nginx 到底怎么配置,蛤?求纠错

  •  1
     
  •   tntsec 2015-11-03 21:19:51 +08:00 7019 次点击
    这是一个创建于 3703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前使用是正常的,但是我已经搞不清楚 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 条附言    2015-11-03 22:49:43 +08:00
    按照 1 楼提醒更改 if-e 位 try_files
    try_files $uri $uri/ /index.php;
    第 2 条附言    2015-11-05 19:38:56 +08:00
    try_files $uri $uri/ /index.php; 但是后台基本废了
    换回了 if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php$1 last;
    }
    24 条回复    2015-11-09 18:07:07 +08:00
    tntsec
        1
    tntsec  
    OP
       2015-11-03 21:20:14 +08:00
    求姿势
    ryd994
        2
    ryd994  
       2015-11-03 21:36:39 +08:00 via Android
    有时间来伸手为什么不去看看 error log ?
    还有,所有 if!e 都应该用 try_files 代替
    认真读完文档,自己写一个出来不难
    网上拼拼凑凑的模板真是害死人
    ryd994
        3
    ryd994  
       2015-11-03 21:39:17 +08:00 via Android
    还有限制 UA 没有任何卵用
    对付搜索引擎用 robots
    如果对方不遵守 robots ,又凭什么会怪怪写 UA 呢?
    msg7086
        4
    msg7086  
       2015-11-03 21:43:48 +08:00   1
    已经警告过你了,不要随便用 if 。

    nginx 的 conf 不是程序,是申明性的配置文件,不是从上到下一句句执行的,不要把它当成是程序一样去理解。完全是两回事。

    (特别是这种两个 if 混在一起的情况。多个 if 甚至可能直接造成 SIGSEGV
    xfspace
        5
    xfspace  
       2015-11-03 21:46:29 +08:00 via Android   1
    看博客是牛逼人物啊。为什么不问问神奇海螺呢?
    wdlth
        6
    wdlth  
       2015-11-03 22:14:02 +08:00
    既然 useragent 是一样的,可以先判断完后设置一个变量值,再判断变量值也行,不用写两遍。
    tntsec
        7
    tntsec  
    OP
       2015-11-03 22:28:18 +08:00
    @ryd994 这个可以有,这个是 typecho 官方文档里的写法,并没有在意,现在改成了

    try_files $uri $uri/ /index.php;

    限制 UA 这个其实本意是为了限制空 UA ,防不会加载 UA 的低级 CC
    tntsec
        8
    tntsec  
    OP
       2015-11-03 22:29:05 +08:00
    @msg7086 判断 UA 和进制其他方式访问的两个 if 能写到一起吗?
    tntsec
        9
    tntsec  
    OP
       2015-11-03 22:35:46 +08:00
    @xfspace 神奇海螺也不知道呢
    tntsec
        10
    tntsec  
    OP
       2015-11-03 22:36:38 +08:00
    @wdlth 这个好像没啥,用变量赋值感觉跟直接赋值一样,从效率上看都是加载同样的东西
    Andy1999
        11
    Andy1999  
       2015-11-03 22:49:55 +08:00 via iPhone
    你以为百度的都是对的吗::doge
    msg7086
        12
    msg7086  
       2015-11-03 22:52:08 +08:00
    @tntsec 不太清楚。用 if 是属于「非正常逻辑」,需要多试试多调教才行。
    tntsec
        13
    tntsec  
    OP
       2015-11-03 22:52:19 +08:00
    @Andy1999 试了才知道,我不认为 V2EX 里都是对的,文档里对每个选项都讲得太过详细,百度的互相转载。但是真像就在里面
    tntsec
        14
    tntsec  
    OP
       2015-11-03 22:53:34 +08:00
    @msg7086 if 不是正常逻辑吗,判断是不是空 ua ,是就返回 403.判断是不是不常见的请求方式,是就是 403 ,其他 200
    ryd994
        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
    ericFork
        16
    ericFork  
       2015-11-04 02:36:39 +08:00
    看着这么乱的代码排版,这么多的超长 if ,真是看不下去。
    Livid
        17
    Livid  
    MOD
    PRO
       2015-11-04 03:31:33 +08:00
    如果想要写简单的 WAF 逻辑的话,还是上 ngx_lua 吧。 Nginx 自己的 if 真心不靠谱。
    sparkssssssss
        18
    sparkssssssss  
       2015-11-04 07:03:15 +08:00 via iPhone
    mark
    kn007
        19
    kn007  
       2015-11-04 07:34:27 +08:00
    千万别用 if ,心中的痛
    ynztyl10
        20
    ynztyl10  
       2015-11-04 09:30:36 +08:00
    if 语句慎用。。
    vibrance
        21
    vibrance  
       2015-11-04 14:52:51 +08:00
    听说你被扒皮了
    tntsec
        22
    tntsec  
    OP
       2015-11-04 17:08:07 +08:00
    @vibrance 啊?啥
    5870352
        23
    5870352  
       2015-11-09 13:43:37 +08:00
    听说被扒皮了
    tntsec
        24
    tntsec  
    OP
       2015-11-09 18:07:07 +08:00
    @5870352 啥扒皮。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3707 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 10:18 PVG 18:18 LAX 02:18 JFK 05:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86