标签: regex

nginx 重写在 url 末尾附加一个参数

我需要配置我的反向代理,以便在 url 的末尾添加以下参数: &locale=de-de

这几乎有效:

rewrite ^(.*)$ $1&locale=de-de break;

但是,问题是我需要附加 '&locale=de-de'仅当它不存在并且有 '?'时才需要附加在网址中...

我可以在制定正确的正则表达式方面获得一些帮助吗?

另一个问题:如果我使用这个,为什么我的 url 中的问号不显示:
$uri?$args

或者 $uri$is_args$args 翻译未编码的 url,问号显示为 %3f。

想法?

编辑:与proxy_pass 结合使用时,似乎存在此行为。在简单的重写中,它工作得非常好。

nginx regex

13
推荐指数
2
解决办法
4万
查看次数

如何在 HAproxy 的 ACL 列表中匹配通配符主机?

我的 haproxy.conf 中有以下几行:

acl valid_domains hdr(Host) -i mysite.com images.mysite.com docs.mysite.com admin.mysite.com
redirect location http://mysite.com/invalid_domain if !valid_domains
Run Code Online (Sandbox Code Playgroud)

我如何匹配任何子域?

我试过:

acl valid_domains hdr(Host) -i *.mysite.com

和:

acl valid_domains hdr(Host) -i [a-z]+.mysite.com

......但都没有奏效。

谢谢

regex access-control-list haproxy

13
推荐指数
3
解决办法
5万
查看次数

如何让 sec 正确忽略时间戳

我有一个这样设置的规则;

在 /etc/sec/rules.d 我有;

type=SingleWithSuppress
ptype=regexp
pattern=(\S+) sshd\[\d+\]: PAM \d+ more authentication failures\; logname=.* uid=.* euid=.* tty=ssh ruser=.* rhost=(.*) user=(.*)
desc=Login Failure: $0
action=pipe '%s ' /bin/mail -s "login failure $2 to $3@$1" team@team.com
window=300
Run Code Online (Sandbox Code Playgroud)

因此,如果这是通过系统日志实现的;

Nov 21 11:24:10 servername.server.com sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user=kloggins
Run Code Online (Sandbox Code Playgroud)

它应该根据模式匹配这个(它根据我的正则表达式编辑器匹配);

servername.server.com sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user=kloggins
Run Code Online (Sandbox Code Playgroud)

我们遇到了垃圾邮件问题,因为时间戳正在发生变化。所以我重写了模式以匹配主机名之后的所有内容。

但是,这似乎不起作用,每次用户“身份验证失败”时,我仍然会收到一封电子邮件。

我一直在使用以下内容进行测试;

logger -p syslog.err 'sshd[26846]: PAM 2 more authentication failures; …
Run Code Online (Sandbox Code Playgroud)

linux logging regex syslog

13
推荐指数
1
解决办法
313
查看次数

NGINX Proxy_Pass 删除 url 子字符串

我有一个 NGINX 作为反向代理。我需要从 URL 中删除子字符串 string_1,URL 的其余部分是可变的。

例子:

Origin: http://host:port/string_1/string_X/command?xxxxx

Destination: http://internal_host:port/string_X/command?xxxxx
Run Code Online (Sandbox Code Playgroud)

nginx.conf:

location /string_1/   { 

    proxy_pass  http://internal_host:port/$request_uri$query_string;
Run Code Online (Sandbox Code Playgroud)

谢谢,

@pcamacho

nginx reverse-proxy regex

13
推荐指数
2
解决办法
3万
查看次数

搜索 CIDR 范围

有时我想从我的 Apache 日志文件中 grep CIDR 范围。这对于落在自然边界(/8、/16 和 /24)上的范围很容易,但对于其他范围(例如 /17 和 /25)就不是那么容易了。

例子:

# 192.168.0.0/16: (easy)
grep " 192\.168\." access_log

# 192.168.128.0/17: (more thought required)
grep -E " 192\.168\.(12[89]|1[3-9][0-9]|2[0-5][0-9])\." access_log

# 192.168.0.0/17: (more thought required)
grep -E " 192\.168\.([0-9]|[0-9][0-9]|1[01][0-9]|12[0-7])\." access_log

# 192.168.128.0/18: (straining my brain)
grep -E " 192\.168\.(1[2-8][0-9]|19[01])\." access_log
Run Code Online (Sandbox Code Playgroud)

这些正则表达式会忽略包含前导零的 IP 地址,例如192.168.001.001,这在 Apache 日志文件中不是问题,但可能在其他日志文件中。打印机似乎特别喜欢前导零。将可选的零添加到正则表达式很容易,但它只会使整个事情变得更加困难。必须有更简单的方法。

有没有一种简单的方法可以从匹配任何 CIDR 范围的文件中选择行?

花式正则表达式扩展将被视为不同的工具(例如awkperl在必要时,但我希望它是单行的),如果它们使工作更容易。理想情况下,我想要的是

grep "[:CIDR 192.168.128.0/18:]" access_log
Run Code Online (Sandbox Code Playgroud)

将 CIDR 范围转换为适当的正则表达式的工具也可以。

$ cidr2regex 192.168.0.0/18
192\.168\.(1[2-8][0-9]|19[01])\.[0-9]{1,3}
Run Code Online (Sandbox Code Playgroud)

或者

$ grep -E "$(cidr2regex …
Run Code Online (Sandbox Code Playgroud)

ip grep regex cidr

12
推荐指数
2
解决办法
1万
查看次数

从 bash 中的 GitHub url 中提取存储库名称

给定任何 GitHub 存储库 url 字符串,例如:

git://github.com/some-user/my-repo.git
Run Code Online (Sandbox Code Playgroud)

或者

git@github.com:some-user/my-repo.git
Run Code Online (Sandbox Code Playgroud)

或者

https://github.com/some-user/my-repo.git
Run Code Online (Sandbox Code Playgroud)

从以下任何字符串中bash提取存储库名称的最佳方法是什么my-repo?该解决方案必须适用于上面指定的所有类型的 url。

谢谢。

bash regex strings regular-expressions github

12
推荐指数
4
解决办法
2万
查看次数

为什么在 Nginx 正则表达式中不需要转义“/”?

所以我终于把学习正则表达式变成了一件事情。通常在使用正则表达式时,需要用“\”转义分隔符(如“/”)。但是当我在 Nginx 中使用正则表达式时,似乎“/”被视为字面意思而不是分隔符。

Nginx 使用 PCRE 引擎来评估正则表达式,所以对我来说,你可以只抛出一个未转义的分隔符而没有任何后果,这对我来说毫无意义。

例如,下面的正则表达式允许单个 IP 地址并拒绝所有其他地址:

location ~ /\.serverfault {
    allow 1.2.3.4;
    deny all;
}
Run Code Online (Sandbox Code Playgroud)

但我认为它需要像这样才能正常工作:

location ~ \/\.serverfault {
    allow 1.2.3.4;
    deny all;
}
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

nginx regex pcre

12
推荐指数
1
解决办法
5650
查看次数

使用正则表达式在 linux 中重命名文件

我有一组我想一直重命名的文件,这些文件被命名为

"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"
Run Code Online (Sandbox Code Playgroud)

我希望它们是小写的,yyyymmdd,.log 扩展名

"system.20090101.log"
"something.20090101.log"
Run Code Online (Sandbox Code Playgroud)

linux rename regex

11
推荐指数
4
解决办法
3万
查看次数

如何使用正则表达式从 TAR 存档中排除文件?

我有一个简单的问题,但我无法找到或解决答案。我想制作一个 tar 存档,但我想使用正则表达式从中排除一些文件。

要排除的文件示例如下: 68x640X480.jpg

我试过这个没有运气:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

linux archive regex tar

11
推荐指数
1
解决办法
2万
查看次数

什么是 PCRE 限制?

在 ModSecurity 中有PCRE limits exceeded错误。

我知道我可以通过设置规则来解决这个问题,例如:

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000
Run Code Online (Sandbox Code Playgroud)

但是,这些规则实际上在做什么?PCRE 限制递归设置为 150,000 是什么意思?通过将这些设置得如此高,我允许通过哪些安全漏洞?什么是recursionlimit是什么意思?

我知道有文档,但文档实际上并没有告诉我发生了什么,它只是告诉我如何使用指令。

regex mod-security pcre

11
推荐指数
1
解决办法
2万
查看次数