我遇到了很多用例,其中从(通常是换行符分隔的)流中获取输入并以类似 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) 好的,一个示例网址是
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) 我无法在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 中日志消息的不同变体吗?
我已经遵循了包括这个在内的方法,但无法让它们工作。
我有一个在 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 正则表达式引擎的任何信息,不支持负前瞻......
所以我今天在配置 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 配置工作,所以很可能我误解了一些东西......
我已经在 server_name 中使用正则表达式配置了我的 nginx 虚拟主机。nginx 在日志和传递给 php-fpm 的参数中显示原始正则表达式(我知道有$_SERVER['HTTP_HOST']一个真正的价值,这不是问题)。我的问题是如何让 nginx 将真实主机名而不是正则表达式写入日志。
server_name 指令如下所示:
server_name ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$;
我的 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) 我正在运行 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) 我在 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已关闭。
这是我的配置:
[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) 我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)