if语句中的Nginx $ server_name

时间:2014-02-07 13:33:07

标签: variables if-statement nginx server-name

似乎这不起作用:

server_name blabla.bla;    
    location ~* (wp-comments-posts|wp-login)\.php$ {
            if ($http_referer !~ ^(http://$servername) ) {
            return 405;
            }
     }

虽然

server_name blabla.bla;    
    location ~* (wp-comments-posts|wp-login)\.php$ {
            if ($http_referer !~ ^(http://blabla.bla) ) {
            return 405;
            }
     }

工作得很好。这是预期的,如果是这样,为什么?或者我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

在读取配置时编译正则表达式,因此它们不能包含变量。

另请注意:

答案 1 :(得分:0)

如果您具有引荐来源网址模块,则可能会喜欢此模块,这将仅允许当前服务器名称成为有效的引荐来源地址。其他所有错误将返回405错误。

        location ~* (wp-comments-post)\.php$ {
            valid_referers server_names;
            
            if ( $invalid_referer ) {
                    return 405;
            }

            ### Do your stuff here
              
        }