小编muf*_*fel的帖子

让nginx缓存文件仅取决于文件名(而不是完整路径)

这个问题仅关于缓存nginx,而不是关于缓存头和浏览器缓存.

我正在运行一个应用程序,显示表单URL的项目详细信息

http://my-server/details/<id>/
Run Code Online (Sandbox Code Playgroud)

其中id是项目的唯一标识符.虽然生成的HTML页面是自动生成的并且对项目是唯一的,但页面相对包含其他JavaScript和CSS文件.这些文件是静态的,依赖于项目ID.应用程序非常慢,我希望nginx可以缓存任何可能的内容.

nginx充当反向代理.是否可以将所有.js和.css子请求的proxy_cache_key属性设置为仅文件名(省略url中的id)?

示例:首先访问http://my-server.tld/details/abc/style.css,然后http://my-server.tld/details/def/style.css应该导致缓存命中.但是不应该访问http://my-server.tld/details/abc/http:// my-server/details/def /(生成的HTML取决于id).

这就是我所想的基本配置

server {
  listen 80;
  server_name my-server.tld;

  location / {
    # root, doesn't matter
  }

  location /details {
    # request to non-asset, cache as usual
  }

  location ~ ^/details/[a-z0-9]+/[a-z0-9]+\.(js|css)$ {
    # request to static asset, use filename only as cache key
  }
}
Run Code Online (Sandbox Code Playgroud)

caching nginx

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

SecPKCS12Import 不返回任何项目

我想将某些用于 TLS 验证的 CA 证书添加到我的 iOS 6 应用程序的钥匙串中。这些证书包含在应用程序包中。我不想添加几个示例中描述的任何身份(私钥/证书组合)。

SecPKCS12Import调用不会返回任何错误,但不幸的是它也不会返回任何证书。

为了让您重现我的步骤,我以 Google 中级证书(“Google Internet Authority”)为例,并对下载的 PEM 证书运行以下命令:

COT

#convert PEM certificate to PKCS12
openssl pkcs12 -export -in google.pem -nokeys -out google.p12 -passout "pass:google"
#verification
openssl pkcs12 -in google.p12 -passin "pass:google"
MAC verified OK
Bag Attributes: <No Attributes>
subject=/C=US/O=Google Inc/CN=Google Internet Authority
issuer=/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIDFXfhMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
[...]
ARlIjNvrPq86fpVg0NOTawALkSqOUMl3MynBQO+spR7EHcRbADQ/JemfTEh2Ycfl
vZqhEFBfurZkX0eTANq98ZvVfpg=
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

之后,我将该文件捆绑到我的应用程序中,其中执行了以下代码:

NSMutableDictionary * options = [[[NSMutableDictionary alloc] init] autorelease];
[options setObject:@"google" …
Run Code Online (Sandbox Code Playgroud)

ssl ios ios6

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

将焦点设置到 Python(和 OS X)中的 Tkinter 窗口

考虑以下 MWE:

from Tkinter import *
root = Tk()
Label(root,text="foo").pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我想设置一个新创建的Tkinter窗口,其中不包含任何“可聚焦”控件(例如前台按钮)。如果我(从 shell)运行上面的代码,窗口将处于非活动状态,因此无法对键绑定做出反应。

有什么办法可以将这样的窗口带到前台吗?

[编辑] 我正在使用 Python 2.7.5 和 OS X Mavericks。我从终端窗口运行代码,即使 Tkinter 窗口已正确创建,焦点仍保留在该窗口上。

python tk-toolkit tkinter

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

是否可以在Go中定义匿名接口实现?

考虑一些给定的接口和一个使用它的虚构库的功能

// Binary and Ternary operation on ints
type NumOp interface {
    Binary(int, int) int
    Ternary(int, int, int) int
}

func RandomNumOp(op NumOp) {
    var (
        a = rand.Intn(100) - 50
        b = rand.Intn(100) - 50
        c = rand.Intn(100) - 50
    )
    fmt.Printf("%d <op> %d = %d\n", a, b, op.Binary(a,b))
    fmt.Printf("%d <op> %d <op> %d = %d\n", a, b, c, op.Ternary(a,b,c))
}
Run Code Online (Sandbox Code Playgroud)

实现该接口的可能类型

// MyAdd defines additions on 2 or 3 int variables
type MyAdd struct {}
func (MyAdd) Binary(a, …
Run Code Online (Sandbox Code Playgroud)

interface go

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

获取自Prometheus计数器的上一次增加以来经过的时间

考虑一个Prometheus度量标准foo_total,该度量标准统计事件的发生总数foo,即,只要不重新启动提供服务,该度量标准就只会增加。

自该指标的最后一次增加以来,是否有任何方法可以获取时间跨度(例如秒数)?我知道由于刮板的时间,该值肯定不是那么准确,但是对我来说,几分钟的准确度就足够了。

背景:我想在Grafana中使用这种查询来概述是否定期使用某些服务以及是否在定义的宽限期内完成了某些工作。我对指标本身没有任何影响。

prometheus

2
推荐指数
2
解决办法
2440
查看次数

如何使用 Ansible 获取物理网络接口列表

默认情况下,Ansible 2.7 列出收集到的事实中的所有网络接口。这个列表可能很长,尤其是在使用 Docker 和 Kubernetes(具有适当的 CNI,如 Weave Net)的情况下。

对于某些防火墙规则,我只对实际的物理NIC感兴趣。虽然例如ansible_default_ipv4.interface列出了其中之一,但在某些服务器(例如 DMZ / LAN)中可能会有更多。

如何在 Ansible 2.7 playbook 中获取物理网络适配器列表?这种机制应该适用于基于 Debian 的 Linux 发行版以及 RHEL。

ansible

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

使用 jq 将 JSON 对象转换为 Prometheus 指标格式

考虑一个 JSON 对象,如

{
  "foo": 42,
  "baz": -12,
  "bar{label1=\"value1\"}": 12.34
}
Run Code Online (Sandbox Code Playgroud)

jq使用一些数据源构造。实际的键名及其数量可能会有所不同,但结果将始终是一个以数字(整数或浮点数)作为值的对象。键可以包含引号,但不能包含空格。

我可以使用 jq 将对象格式化为与Prometheus兼容的格式,以便我可以使用输出将数据推送到 Prometheus Pushgateway 吗?

所需的结果看起来像

foo 42
bar{label1="value1"} 12.34
baz -12
Run Code Online (Sandbox Code Playgroud)

即用换行符(无\r)和除标签值外没有引号的空格分隔。

我不能使用 bash 进行后处理,因此如果可能的话,我更喜欢纯 jq 解决方案。

json newline jq

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

C结构:初始化字符串变为无效

我有以下代码示例,它以两种不同的方式获取指向结构的指针.当第一个("Test1")成功时,第二个在尝试输出字符串(标题)时失败并出现Segmentation故障,而数字(类型)打印正确:

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    unsigned char type;
    char* title;
} MenuItem;

typedef struct{
    unsigned short itemCount;
    MenuItem *items;    
} Menu;

Menu* createMenu(unsigned short itemCount, MenuItem items[]){
    Menu *menu = malloc(sizeof(Menu));
    menu->itemCount = itemCount;
    menu->items = items;
    return menu;
}

Menu* getSampleMenu(void){
    return createMenu(2,(MenuItem[]){
        {3,"Foo2"},
        {4,"Bar2"}
    });
}

void showMenu(const Menu *menu){
    for(unsigned short i = 0; i < menu->itemCount; i++)
        printf("Item %d: %d/%s\n",i,menu->items[i].type,menu->items[i].title);
}

int main(void){
    //Test 1
    Menu *menu = createMenu(2,(MenuItem[]){
        {1,"Foo"}, …
Run Code Online (Sandbox Code Playgroud)

c struct

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

迭代std :: multimap并删除某些条目

我想迭代一个std::multimap(所有键的所有值)中的所有项,并删除满足某些条件的所有条目:

#include <map>

typedef int KEY_TYPE;
typedef int VAL_TYPE;

bool shouldRemove(const KEY_TYPE&, const VAL_TYPE&);

void removeFromMap(std::multimap<KEY_TYPE,VAL_TYPE>& map){
    for (auto it = map.begin(); it != map.end(); it++){
        if (shouldRemove(it->first,it->second))
            map.erase(it);
    }
}
Run Code Online (Sandbox Code Playgroud)

除非删除第一个项目,否则迭代会起作用,然后抛出以下错误:

map/set iterator不可递增

removeFromMap为了正常工作,如何重写函数?代码应该适用于地图的各种键和值类型.

我正在使用C++ 11和Visual Studio 2013.

c++ std c++11

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

关于 socket.io 适配器的问题

我目前正在开发基于 node.js 的socket.io服务,该服务利用node.js 集群模块在同一台机器上生成多个 node.js 进程。

socket.io 文档说,如果使用多个进程,则需要使用适配器,以便例如广播不仅针对连接到当前进程的客户端,而且针对每个进程的所有连接的客户端。

  1. 我是否正确理解,即使所有进程都是在本地生成的(即不是跨多个服务器),我也需要使用这样的适配器?
  2. 服务器进程需要不时地进行通信(只是单向的,即广播消息而不需要响应)。如果正在使用这样的适配器(例如socket.io-redis),我是否也可以使用它向所有服务器进程广播?或者适配器仅用于针对已连接的客户端?

node.js socket.io socket.io-redis

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

为什么JavaScript逗号运算符在与函数应用程序一起使用时需要括号?

我可以在JavaScript中使用逗号运算符来评估多个表达式并返回最后一个表达式.

x = "foo", "bar"; // "bar"
y = 0, 21, 42; // 42
Run Code Online (Sandbox Code Playgroud)

但是,如果涉及函数应用程序,为什么括号必不可少?

arr = [1,2,3];
z1 = (arr.push(4), arr); // [1,2,3,4]
z2 = arr.push(5), arr; // 5 ??
Run Code Online (Sandbox Code Playgroud)

为什么最后一个语句将z2设置为5而不是arr?这与前一个正确设置z1的语句有什么不同?

javascript

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