标签: regex

有没有可以对输入流进行顶层化的工具?

我遇到了很多用例,其中从(通常是换行符分隔的)流中获取输入并以类似 top 的方式对其进行总结非常有用(参见 top、iotop 等)。一种即时数据透视表。

例如采用对数式输入:

I heard A from unit 1 and it said "Great!" 56
I heard A from unit 2 and it said "Oh no!" 42
I heard C from unit 1 and it said "Waiting for input." 33
I heard B from unit 3 and it said "Stopped." -1
...
Run Code Online (Sandbox Code Playgroud)

由此,我们可以运行一个带有正则表达式和组指标的工具:

topify [lineout] [regex] [name #1] [group #1] [name #2] [group #2] [All other columns name position]
     where:
         lineout is the number of lines before removing …
Run Code Online (Sandbox Code Playgroud)

logging regex top stream

7
推荐指数
1
解决办法
190
查看次数

nginx url 重写。我只是不明白

好的,一个示例网址是

http://www.mysite.com/?p=account&view=settings

所述pURI是一个常数。所有网址都有。

view是许多可选的URI之一。

我试图理解 url 重写和正则表达式,但我只是不明白。我需要回去写代码,但不幸的是,我只是不断回来nginx.conf接受更多的惩罚。

我的目标是重写网址:

http://www.mysite.com/account/view/settings

我会向你展示我尝试过的东西,但它只是复制和粘贴了很多以前的例子,证明我在掌握正则表达式和 url 重写的概念方面是多么可悲。

如果有人可以花几分钟解释正则表达式部分,或者将我链接到一个很好的理解它的教程,我将不胜感激。

不,我不希望你为我做这项工作,但我谦虚地请求一些帮助来掌握重写的概念和在 nginx conf 中使用的变量。我可以看到一个叫做$uri,但不知道它是什么意思。我还需要添加一个正则表达式来否认在PHP脚本的直接访问/socket/private,但允许通过AJAX访问。我确信我可以将学到的关于正则表达式的任何知识应用到该任务中。

我的 nginx conf 的位置块

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
location ~* .(png|gif|ico|css|js)$ {
    expires 365d;
}   
location ~ .(aspx|jsp|cgi)$ {
    return 410;
}
location /socket {
    return 405;
}
location /private {
    return 405;
}   
location / {
    # include …
Run Code Online (Sandbox Code Playgroud)

rewrite url nginx regex

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

nginx 错误日志 Grok 模式

我无法在grok 调试器中解析以下 nginx 错误日志消息。我有一种感觉,我应该使用一个愚蠢的技巧,但无法弄清楚它可能是什么。

2015/03/20 23:35:52 [错误] 8#0: *10241823 在记录请求时测试“/www”存在失败(2:没有这样的文件或目录),客户端:201.45.203.78,服务器:$domain,请求:“GET /ritikapuri_”

到目前为止,这是我的 Grok 模式:

(?<timestamp>%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage} client: %{IP:client}
Run Code Online (Sandbox Code Playgroud)

这种模式让我进入“服务器”部分,但我似乎无法解析其余部分,我不清楚为什么。

如果我使用另一个 %{GREEDYDATA} 模式来获取日志的末尾,它有时不会解析与上述不匹配的日志并给我一个 _grokparsefailure。

最好的方法是使用 if 语句来捕获 nginx 中日志消息的不同变体吗?

我已经遵循了包括这个在内的方法,但无法让它们工作。

nginx logging regex logstash grok

7
推荐指数
1
解决办法
8981
查看次数

正则表达式负前瞻不适用于不同 Apache 版本之间的 mod_rewrite

我有一个在 Apache 2.2 下工作的 mod_rewrite 行,但不在 Apache 1.3 下:

RewriteRule     ^(?!index.php)(?!skin/)(?!js/)(.+)      /index.php?file=$1              [NC,L]
Run Code Online (Sandbox Code Playgroud)

如果我丢失了括号之间的负前瞻组件,我将丢失 500 状态代码。GoDaddy 不会为这个客户端的包升级 httpd(叹气),所以有没有人有一个可以在 1.3 中工作的解决方案(而且不会乱:P)?或者甚至更好,谁能解释这里可能发生的事情?我保持好奇只是因为我找不到关于 1.3 中使用的 Perl 正则表达式引擎的任何信息,不支持负前瞻......

mod-rewrite regex apache-1.3

6
推荐指数
1
解决办法
7754
查看次数

需要引用的 nginx 正则表达式字符?

所以我今天在配置 nginx 时遇到了一个奇怪的问题。我试图匹配这样的位置:

location ~ ^/([0-9]+)/(.*) {
    # do proxy redirects
}
Run Code Online (Sandbox Code Playgroud)

...对于像“ http://my.domain.com/0001/index.html ”这样的 URL 。

这条规则从来没有匹配过,尽管事实上它应该是所有权利。根据这个文档,我花了一段时间才弄清楚,需要引用正则表达式中的某些字符。问题是,文档是用于重写的,它专门调用了大括号,而不是方括号。经过大量涉及大量咒骂的实验后,我发现我可以通过像这样引用正则表达式来解决问题:

location ~ "^/([0-9]+)/(.*)" {
    # do proxy redirects
}
Run Code Online (Sandbox Code Playgroud)

是否有 nginx 需要引用正则表达式的字符列表?或者这里是否还有其他我完全失踪的事情?这是我的第一个 nginx 配置工作,所以很可能我误解了一些东西......

nginx proxy regex

6
推荐指数
1
解决办法
4033
查看次数

在 nginx 日志和传递给 fastcgi 的参数中显示真实服务器名称?

我已经在 server_name 中使用正则表达式配置了我的 nginx 虚拟主机。nginx 在日志和传递给 php-fpm 的参数中显示原始正则表达式(我知道有$_SERVER['HTTP_HOST']一个真正的价值,这不是问题)。我的问题是如何让 nginx 将真实主机名而不是正则表达式写入日志。

server_name 指令如下所示:

server_name ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$;

nginx logging regex

6
推荐指数
1
解决办法
8762
查看次数

正则表达式位置块在 NGINX 中不起作用

我的 nginxconf 中有一个非常简单的位置块,如下所示:

location ~* ^\/[a-z0-9]{24}$ {
    // do some things
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试捕获以 Mongo ObjectId 结尾的 url。例如: https: //example.com/5550cdea6928495a25bb8df8

由于某种原因 nginx 告诉我有一个错误:

2016/01/07 22:36:32 [emerg] 26445#0: unknown directive "24}$" in /etc/nginx/sites-enabled/mysite.com:32
Run Code Online (Sandbox Code Playgroud)

nginx regex

6
推荐指数
1
解决办法
2939
查看次数

apt-get 安装匹配通配符的软件包

我正在运行 Debian 8 Jessie,尝试从 shell 脚本安装 PHP 命令行解释器。

这是我所做的:

sudo apt-get install php-cli
Run Code Online (Sandbox Code Playgroud)

它告诉我没有php-cli。我确实发现有php5-cli。但是,为了使我的脚本更加健壮,例如在最近的 ubuntu 服务器产品上运行时php7,我不想指定php5-cli.

我用谷歌搜索答案,但我得到的只是让我困惑:

xrfang@P-qapub:~$ sudo apt-get install --names-only "php*-cli"
E: Command line option --names-only is not understood
xrfang@P-qapub:~$ sudo apt-cache search --names-only php-cli
php-google-api-php-client - Google APIs client library for PHP
xrfang@P-qapub:~$ apt-cache search --names-only "php\d+-cli$"
xrfang@P-qapub:~$ apt-cache search --names-only "php\d-cli$"
xrfang@P-qapub:~$ apt-cache search --names-only "php\\d-cli$"
xrfang@P-qapub:~$ apt-cache search --names-only "php5-cli$"
php5-cli - command-line interpreter for …
Run Code Online (Sandbox Code Playgroud)

regex apt

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

fail2ban 查找匹配项,但不禁止

我在 CentOS 7 上使用 fail2ban 0.9.7 和 Apache 反向代理,试图禁止机器人尝试以开放代理的身份访问我的服务器,例如:

221.8.179.164 - - [10/Jun/2019:22:04:19 +0200] "CONNECT auth.riotgames.com:443 HTTP/1.1" 405 235 "-" "Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0"
Run Code Online (Sandbox Code Playgroud)

其中一些请求由于某种原因返回 200,尽管ProxyRequests已关闭。

这是我的配置:

apache-badhosts.conf

[Definition]
failregex = ^<HOST> - -.*"(GET|POST|HEAD|CONNECT).*(bad_host_1|bad_host_2|bad_host_3).*"$

ignoreregex =
Run Code Online (Sandbox Code Playgroud)

监狱配置文件

[apache-badhosts]
port     = http,https
# I made sure this is the proper path
logpath  = /var/log/httpd/access_log
bantime  = 172800
maxretry = 1
enabled  = true
Run Code Online (Sandbox Code Playgroud)

这是结果fail2ban-regex

user@host /e/fail2ban> sudo fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/apache-badhosts.conf

Running tests
=============

Use …
Run Code Online (Sandbox Code Playgroud)

centos regex fail2ban

6
推荐指数
1
解决办法
2394
查看次数

我似乎无法获得一个用于 Fail2Ban 的正则表达式来与 Opensmtpd 一起工作?我可以得到健全性检查吗?

openSMPTD运行了一个邮件服务器。看来我目前正在受到蛮力攻击,虽然我怀疑他们会进入。话虽如此,我想通过不断的登录尝试来减轻我的服务器的负担。我正在配置fail2ban以禁止违规者。但是,我无法获得正确的正则表达式,这让我很生气!我在 freeBSD 论坛上看到有关fail2ban正则表达式的链接以捕获它。然而,即使那个正则表达式似乎也没有捕捉到他们提供的示例文本。我编辑了他们的正则表达式无济于事。我希望有人能给我一些指示,因为我在正则表达式方面非常薄弱。

我的日志文件如下所示:

Dec 25 20:03:29 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp tls ciphers=TLSv1.2:ECDHE-RSA-AES128-SHA256:128
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp authentication user=info result=permfail
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp disconnected reason=quit
"

Run Code Online (Sandbox Code Playgroud)

所以让我们分解一下:显示它们是蛮力的那一行是:

f7fa148a43b34578 smtp failed-command command="AUTH LOGIN …
Run Code Online (Sandbox Code Playgroud)

regex fail2ban

6
推荐指数
1
解决办法
180
查看次数

标签 统计

regex ×10

nginx ×5

logging ×3

fail2ban ×2

apache-1.3 ×1

apt ×1

centos ×1

grok ×1

logstash ×1

mod-rewrite ×1

proxy ×1

rewrite ×1

stream ×1

top ×1

url ×1