标签: regex

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

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

server_name 指令如下所示:

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

nginx logging regex

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

sed 的正则表达式抓取多行或更好的方法?

我正在创建一个连接到服务器并将输出转储到临时文件的脚本。我想在脚本中使用 sed 从临时文件中获取特定信息。输出总是有 80 个字符的虚线,然后是我想要的信息,然后是 Disconnected 语句。

如果它只是一行,我已经得到了一个正则表达式,问题是我如何对换行符进行分组?

正则表达式

-\{80\}[\r\n]*\(.*\)[\r\n]\{4\}Disconnected
Run Code Online (Sandbox Code Playgroud)

文件

...
--------------------------------------------------------------------------------
The information that I want to get can be a single line or multiple lines.
Another line to grab.

And this should be caught as well.

Disconnected ...
Run Code Online (Sandbox Code Playgroud)

期望输出

The information that I want to get can be a single line or multiple lines.
Another line to grab.

And this should be caught as well.
Run Code Online (Sandbox Code Playgroud)

bash regex sed

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

postfix header_checks 使用正则表达式正确设置

我似乎无法弄清楚为什么 header_checks 没有被评估。我使用的是 Ubuntu 12.04、postfix 2.7、dovecote、spamassasin、clamav、amavis。

我将以下行添加到 /etc/postfix/main.cf :

header_checks = regexp:/etc/postfix/header_checks
Run Code Online (Sandbox Code Playgroud)

这是 header_checks :

/From: .*/ REPLACE From: noreply@valid.mydomain.com
Run Code Online (Sandbox Code Playgroud)

要测试正则表达式:

#postmap -q "From: <werwe>" regexp:/etc/postfix/header_checks
Run Code Online (Sandbox Code Playgroud)

它评估正确并给我返回输出:

REPLACE From: noreply@valid.mydomain.com
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从命令行或 php 网页发送电子邮件时,postfix 将不会替换 From 标头。我很困惑。

我想重写所有外发电子邮件:

From: Confirmation Email<webapp@invalid.mydomain.com>   
Run Code Online (Sandbox Code Playgroud)

- 变成 -

From: Confirmation Email<noreply@valid.mydomain.com>
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

postfix replace regex smtp-headers

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

使用 Nginx vhost 的 server_name 中的正则表达式

我想用 Nginx 做一些事情。假设我有几个用户和一个子域,每个用户在/home/dev/sites/USER_ID. 我想USER_ID.dev.example.com指向那个目录。

我试过制作一个 vhost 文件如下:

server {
    listen   80;
    server_name ~^(?<site_id>)$.dev.example.com;
    root   /home/dev/sites/$site_id;
    index  index.php;

    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,所有发生的事情是它显示了我的 PhpMyAdmin 安装(显然另一个虚拟主机指向它)。有人能告诉我我做错了什么吗?我有一种感觉,它只是糟糕的 Regex,但我不确定。

nginx regex subdomain virtualhost

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

Nginx 位置正则表达式不匹配

以下一直在为我缓存 css 和 js:

location ~ "^(.*)\.(min.)?(css|js)$" {
    expires max;
}
Run Code Online (Sandbox Code Playgroud)

结果:

$ curl -I http://mysite.com/test.css
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Jan 2014 18:55:28 GMT
Content-Type: text/css
Content-Length: 19578
Last-Modified: Mon, 13 Jan 2014 18:54:53 GMT
Connection: keep-alive
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
X-Backend: stage01
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 10 位 unix 时间戳为我的 js/css 设置版本控制,并且在使用以下有效正则表达式获取正则表达式匹配时遇到问题。

location ~ "^(.*)([\d]{10})\.(min\.)?(css|js)$" {
    expires max;
}
Run Code Online (Sandbox Code Playgroud)

结果:

$ curl -I http://mysite.com/test_1234567890.css
HTTP/1.1 200 OK
Server: nginx
Date: Thu, …
Run Code Online (Sandbox Code Playgroud)

nginx regex

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

fail2ban-regex 与字符串匹配,但与日志和conf文件不匹配,为什么?

如果我跑

fail2ban-regex '31.22.105.115 - - [11/Apr/2014:18:09:54 +0100] "GET /admin/config.php 
HTTP/1.0" 301 573 "-" "-"' '^<HOST> - - (?:\[[^]]*\] )+\"(GET|POST)/(?i)(PMA|phptest|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2|cgi-bin)'
Run Code Online (Sandbox Code Playgroud)

然后我明白了Success, the total number of match is 1。然而如果我有一个access.log包含

 .
 .
109.68.191.26 - - [11/Apr/2014:12:47:50 +0100] "GET / HTTP/1.0" 301 541 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
31.22.105.115 - - [11/Apr/2014:18:09:54 +0100] "GET /admin/config.php HTTP/1.0" 301 573 "-" "-"
Run Code Online (Sandbox Code Playgroud)

和一个filter.d.conf 文件包含

failregex  = '^<HOST> - - (?:\[[^]]*\] )+\"(GET|POST) /(?i)(PMA|phptest|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2|cgi-bin)'
Run Code Online (Sandbox Code Playgroud)

,我尝试跑步,fail2ban-regex path/to/access.log /etc/fail2ban/filter.d/apache-getphp.conf我明白了Sorry, no match,为什么?

regex fail2ban

5
推荐指数
1
解决办法
2094
查看次数

url重写,nginx抛出404错误,错误日志中没有任何内容

下面的重写工作正常:

rewrite ^/city/restaurants$ /city/listings/restaurants permanent;
Run Code Online (Sandbox Code Playgroud)

但这不起作用

rewrite ^/city/restaurants$ /city/listings/restaurants last;
rewrite ^/city/restaurants$ /city/listings/restaurants break;
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

位于整个 nginx 服务器块下方

  server {
          listen 80 default backlog=1024;
          server_name mydomain.com;


          client_max_body_size 20M;
          charset utf-8;
          keepalive_timeout 50;

          access_log /var/log/access_log main;
          error_log /var/log/error_log info;


          root /var/www/;
          index index.php index.phtml index.html;
  autoindex on;

   location ~ \..*/*\.php$ {
       return 403;
   }
   location ~^/sites/.*/private/{
       return 403;
   }
   location ~^/sites/.*/files/* {
       try_files $uri @rewrite;
   }
   location ~ (^|/)\. {
       return 403;
   }

   location / {

rewrite ^/city/restaurants$ /city/listings/restaurants last;

    location …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite rewrite nginx regex http-status-code-404

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

仅 Nginx proxy_pass 根和特定 url

在现有 Web 应用程序的新版本上工作,我需要 nginx 转发根 (/) 和多个要转发到 v2 基础架构(使用 proxy_pass)的特定 URI,而未指定的 URI 必须转发到 v1。

location = /specific_uri1
        proxy_pass http://v2.webapp.com;
        proxy_set_header Host       v2-test.webapp.com;
        add_header       X-version  v2;
        add_header       X-node     $hostname;
}

location = /specific_uri2
        proxy_pass http://v2.webapp.com;
        proxy_set_header Host          v2-test.webapp.com;
        add_header       X-version     v2;
        add_header       X-node        $hostname;
}

location / {
        proxy_pass http://v2.webapp.com;
        proxy_set_header Host          v2-test.webapp.com;
        add_header       X-version     v2;
        add_header       X-node        $hostname;
}

location /(.*)$ {
        proxy_pass http://v1.webapp.com;        
        proxy_set_header   Host         v1-test.webapp.com;
        add_header         X-version    v1;
        add_header         X-node       $hostname;
}
Run Code Online (Sandbox Code Playgroud)

最后一个 location 指令永远不会匹配,因此所有未声明的内容仍然属于 v2 Web 应用程序。我肯定对 …

nginx regex proxypass

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

Ansible 在反斜杠上分割字符串

我将目录/子目录列表传递到剧本中,如下所示:

dirs=['Web\this','Web\that','Web']
Run Code Online (Sandbox Code Playgroud)

当我实际在这些目录上执行任务时(win_shell,调用构建过程),这工作得很好,但后来我需要复制文件,并且“\”在用作文件名的一部分时不起作用。我有兴趣使用以下内容,因此我将获取大多数构建的模块名称以及根文件夹中的“Web”:

dirs[1].split('\\')[-1]
Run Code Online (Sandbox Code Playgroud)

我希望这会分别返回“this”、“that”和“Web”。

但我找不到任何斜杠或正则表达式魔法的组合来分割我的字符串。我在 StackExchange 中发现了大约 5 个接近的问题/答案,但似乎没有一个能做到这一点。

我也尝试过这个与变化

"{{ dirs[1] | regex_replace('\\','-') }}"
Run Code Online (Sandbox Code Playgroud)

python regex ansible ansible-playbook

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

NGINX:map 和 try_files 不起作用

我正在使用 nginx 来检测浏览器中的 webp 支持:

# Check if client is capable of handling webp
map $http_accept $webp_suffix {
       default "";
       "~*webp" ".webp";
}
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,并在客户端支持图像/webp 时将 .webp 分配给 $webp_suffix

然后几行之后我在以下配置中使用这个变量:

        location ~ ^/imgs/([0-9]*)/(.*?)(\..+)$ {
                add_header X-webp $webp_suffix;
                try_files /imgs/$1$webp_suffix /imgs/$1$3 =404;
        }
Run Code Online (Sandbox Code Playgroud)

即使两个文件都存在,它总是会导致 e404。标题 X-webp 设置为“.webp”,因此地图工作正常。

更奇怪的是 - 如果我交换 try_files 参数的顺序:

try_files /imgs/$1$webp_suffix /imgs/$1$3 =404;
Run Code Online (Sandbox Code Playgroud)

try_files /imgs/$1$3 /imgs/$1$webp_suffix =404;
Run Code Online (Sandbox Code Playgroud)

然后它开始工作并将文件 /imgs/$1$3 发送到浏览器。这怎么可能 ?我在这个逻辑中遗漏了什么吗?

EDIT1:完成 nginx.conf 以重现:

events {
    use           epoll;
    worker_connections  128;
}

http {

    # Check if client is …
Run Code Online (Sandbox Code Playgroud)

nginx regex

5
推荐指数
1
解决办法
521
查看次数