这个问题仅关于缓存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) 我想将某些用于 TLS 验证的 CA 证书添加到我的 iOS 6 应用程序的钥匙串中。这些证书包含在应用程序包中。我不想添加几个示例中描述的任何身份(私钥/证书组合)。
该SecPKCS12Import调用不会返回任何错误,但不幸的是它也不会返回任何证书。
为了让您重现我的步骤,我以 Google 中级证书(“Google Internet Authority”)为例,并对下载的 PEM 证书运行以下命令:
。
#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) 考虑以下 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 窗口已正确创建,焦点仍保留在该窗口上。
考虑一些给定的接口和一个使用它的虚构库的功能
// 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) 考虑一个Prometheus度量标准foo_total,该度量标准统计事件的发生总数foo,即,只要不重新启动提供服务,该度量标准就只会增加。
自该指标的最后一次增加以来,是否有任何方法可以获取时间跨度(例如秒数)?我知道由于刮板的时间,该值肯定不是那么准确,但是对我来说,几分钟的准确度就足够了。
背景:我想在Grafana中使用这种查询来概述是否定期使用某些服务以及是否在定义的宽限期内完成了某些工作。我对指标本身没有任何影响。
默认情况下,Ansible 2.7 列出收集到的事实中的所有网络接口。这个列表可能很长,尤其是在使用 Docker 和 Kubernetes(具有适当的 CNI,如 Weave Net)的情况下。
对于某些防火墙规则,我只对实际的物理NIC感兴趣。虽然例如ansible_default_ipv4.interface列出了其中之一,但在某些服务器(例如 DMZ / LAN)中可能会有更多。
如何在 Ansible 2.7 playbook 中获取物理网络适配器列表?这种机制应该适用于基于 Debian 的 Linux 发行版以及 RHEL。
考虑一个 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 解决方案。
我有以下代码示例,它以两种不同的方式获取指向结构的指针.当第一个("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) 我想迭代一个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.
我目前正在开发基于 node.js 的socket.io服务,该服务利用node.js 集群模块在同一台机器上生成多个 node.js 进程。
socket.io 文档说,如果使用多个进程,则需要使用适配器,以便例如广播不仅针对连接到当前进程的客户端,而且针对每个进程的所有连接的客户端。
我可以在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的语句有什么不同?