小编Nor*_*ros的帖子

在NGINX反向代理设置中有效地忽略cookie列表

我目前正在使用/测试NGINX反向代理设置中的微缓存功能,以获取动态内容。

发生的一个大问题是需要忽略的会话/ Cookie,否则人们将使用该站点上的随机帐户进行登录。

目前,我忽略了这样的流行CMS Cookie:

if ($http_cookie ~* "(joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|wordpress_logged_in_[a-zA-Z0-9]+|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+") 
    {

# set ignore variable to 1
# later used in:
# proxy_no_cache                 $IGNORE_VARIABLE;
# proxy_cache_bypass             $IGNORE_VARIABLE;
# makes sense ?

    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我想向忽略列表添加更多的cookie,这将成为一个问题。更不用说根据文档,不建议在NGINX中使用太多“ if”语句。

我的问题是,是否可以使用map方法完成此操作?我看到map中的正则表达式是不同的(或者我错了)。

还是有另一种方法可以有效地忽略/绕过cookie?

我在stackoverflow上进行了大量搜索,尽管有很多不同的示例。我找不到适合自己需要的东西。

谢谢

更新:

在互联网上进行了大量的阅读和“挖掘”(我们不妨只说Google),我发现了很多有趣的例子。

但是,对这些感到非常困惑,因为我不完全了解正则表达式的用法,而且我害怕在不了解正则表达式的情况下实现这种用法

范例1:

map $http_cookie $cache_uid {
  default nil;
  ~SESS[[:alnum:]]+=(?<session_id>[[:alnum:]]+) $session_id;
}
Run Code Online (Sandbox Code Playgroud)
  1. 在这个示例中,我注意到正则表达式与“ if”块中使用的正则表达式有很大不同。我不明白为什么模式开始时没有任何“”并且直接带有符号。

  2. 我不明白[[:alnum:]] +是什么意思?我搜索此文件,但是找不到文档。(或者我错过了)

  3. 我可以看到作者将默认设置为“ nil”,这不适用于我的情况。

范例2:

map $http_cookie $cache_uid {
  default  '';
  ~SESS[[:alnum:]]+=(?<session_id>[[:graph:]]+)  $session_id;
} …
Run Code Online (Sandbox Code Playgroud)

regex cookies nginx nginx-reverse-proxy nginx-config

8
推荐指数
1
解决办法
215
查看次数

使用 Foreach-ObjectFast 和Where-ObjectFast 的 Powershell

我从来没有真正使用过 Powershell,所以我对此很困惑。我的目标是将多个 CSV 合并为 1 个,更具体地说,目前为 3 个。

使用Import-CsvForeach-Object我设法实现了这一目标,但是速度超级慢。我发现了这篇文章,所以我尝试了一下。令人难以置信的快速迭代。

不幸的是,我对 Powershell 太笨了,无法理解为什么我不能正确使用Where-ObjectFast,它不会匹配任何东西。

我的代码示例:

Measure-Command {   $CSV1 = Import-CSV -Path .\CSV1.csv }

Measure-Command {   $CSV2 = Import-CSV -Path .\CSV2.csv }

Measure-Command {

Import-Csv -Path .\CSV3.csv | Foreach-ObjectFast {
            $row = $_;
            $match = $CSV1 | Where-ObjectFast -FilterScript {       $_.name -eq $row.'name'     }
            $dbg1 = 'Matched: {0}' -f $match;   Write-Host $dbg1 -foreground Cyan;

   # continued... } }
Run Code Online (Sandbox Code Playgroud)

我基本上需要做的是将 CVS3 中的“名称”与 CSV1 中的“名称”以及需要的其他字段进行匹配,然后对 CSV2 执行相同操作并输出到最终文件。 …

windows csv powershell

4
推荐指数
1
解决办法
381
查看次数

创建线程安全原子计数器

我在我的一个项目中有一个特定的要求,即保持某些操作的“计数”,并最终定期“读取”+“重置”这些计数器(例如24小时)。

操作将是:

  • 工作线程 -> 递增计数器(随机)
  • 计时器线程(例如 24 小时)-> 读取计数 -> 执行某些操作 -> 重置计数器

我感兴趣的平台是Windows,但是如果这个可以跨平台就更好了。我正在使用 Visual Studio,目标 Windows 架构仅是 x64

我不确定结果是否“ok”以及我的实施是否正确。坦率地说,我从未使用过太多 std 包装器,而且我的 C++ 知识非常有限。

结果是:

12272 Current: 2
12272 After: 0
12272 Current: 18
12272 After: 0
12272 Current: 20
12272 After: 0
12272 Current: 20
12272 After: 0
12272 Current: 20
12272 After: 0
Run Code Online (Sandbox Code Playgroud)

下面是一个完全复制/粘贴的可重现示例:

12272 Current: 2
12272 After: 0
12272 Current: 18
12272 After: 0
12272 Current: 20
12272 After: 0
12272 Current: 20
12272 …
Run Code Online (Sandbox Code Playgroud)

c++ windows

4
推荐指数
1
解决办法
2278
查看次数

三维数组中的 C/C++ DWORD 到 BYTE 以及 BYTE 到 DWORD 转换

我正在努力了解我是否以正确的方式执行此操作以及这是否是(唯一的)最佳解决方案。

我正在进行的项目是使用三维数组来保存和使用大量数据。“数据”的一部分是 DWORD 类型,我必须进行从/到 DWORD/BYTE 的安全转换。

BYTE(c 风格)数组如下所示:

BYTE array_data[150][5][255] = 
{
    {
        { // bytes },
        { 0x74,0x21,0x54,0x00 }, // This is converted from DWORD like: 0x00542174
        { // bytes },
        { // bytes },
        { // bytes },
    },
};
Run Code Online (Sandbox Code Playgroud)

我发现从 DWORD转换为 BYTE 的(唯一)方法:

DWORD dword_data;
char byte_array[4];

*(DWORD*)byte_array = dword_data; // byte_array becomes {0x74, 0x21, 0x54, 0x00}

wchar_t temp[256];

wsprintfW(temp, L"{0x%02x,0x%02x,0x%02x,0x%02x}, // This is converted from DWORD like: 0x%.8X\n", (BYTE)byte_array[0], (BYTE)byte_array[1], (BYTE)byte_array[2], (BYTE)byte_array[3], …
Run Code Online (Sandbox Code Playgroud)

c c++ arrays

3
推荐指数
1
解决办法
6547
查看次数

Visual Studio 2019 中自动递增文件版本(版本号)

经过大量搜索后,我找到了一个用于跟踪和增加项目构建编号的工具。对于 C/C++ 项目。所有其他的要么已经过时,要么适用于 C#。

我正在使用此博客中的 IncrementBuild-*.exe:http://alax.info/blog/1713

它按预期工作,但我相信我做错了什么,因为在运行此工具后构建后,它出于某种原因添加了另一个 VERSIONINFO 资源。该项目最终有 2 种资源,原始资源和修补后的资源。

没有源代码或 .pdb 来修改/重制/分析它。

有没有人有比这更好的解决方案?

请指教,不胜感激。

c++ windows visual-studio

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