小编esh*_*lox的帖子

Nginx - 多个/嵌套的IF语句

我想做的事:

  • 检查请求是否来自Facebook
  • 检查网址是否与domain.com/2相同
  • 如果上述条件为真 - 显示来自/ api/content/item/$ 1的内容?social = 1
  • 如果上述条件为假 - 显示"正常页面"

这是一个单页面的应用程序.在我的更改配置看起来像这样(并且它工作):

location / {
    root /home/eshlox/projects/XXX/project/project/assets/dist;
    try_files $uri $uri/ /index.html =404;
}
Run Code Online (Sandbox Code Playgroud)

我试过使用if语句:

location / {
    set $social 1;
    if ($http_user_agent ~* "facebookexternalhit") {
        set $social UA; 
    }       
    if ($uri ~* "^/(\d+)$") {
        set $social "${social}URL";
    }       
    if ($social = UAURL) {
        rewrite ^/(\d+)$ /api/content/item/$1?social=1;
    }

    root /home/eshlox/projects/XXX/project/project/assets/dist;
    try_files $uri $uri/ /index.html =404;
}
Run Code Online (Sandbox Code Playgroud)

使用此配置,只有在条件为真或假的情况下,一切都按预期工作.如果其中一个条件为真且第二个条件为假(反之亦然),则nginx始终返回状态404.

我在nginx网站上找到了"IfIsEvil",我试图使用映射(在这种情况下我可以使用映射吗?)但我仍然无法解决这个问题.

有任何想法吗?

最好的祝福.

nginx

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

调整GIF动画大小,pil/imagemagick,python

我想使用python和PIL或PythonMagick更改GIF动画图像的大小.我找不到解决方案.PIL和缩略图方法适用于jpg和png但不适用于gif.ImageMagick有命令mogrify/convert -resize'1280x1024>'但我找不到文档,我不知道如何用pythonmagick做到这一点.

谁知道解决方案?

在最坏的情况下,我使用os/subprocess并转换; -S

谢谢.

python imagemagick gif python-imaging-library pythonmagick

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

通过Cloudfront将文件上传到S3

我正在尝试通过Cloudfront将文件上传到S3.我创建了一个名为my-files的存储桶.Bucket CORS设置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

我创建了Cloudfront发行版.这是可能很重要的配置:

一般:

Delivery Method: Web
Alternate Domain Names (CNAMEs) files.example.com
Run Code Online (Sandbox Code Playgroud)

起源:

Origin Domain Name: my-files.s3.amazonaws.com
Restrict Bucket Access: Yes
Grant Read Permissions on Bucket: Yes, Update Bucket Policy
Run Code Online (Sandbox Code Playgroud)

行为:

Path Pattern: Default (*)
Origin: S3-my-files
Viewer Protocol Policy: HTTP and HTTPS
Allowed HTTP Methods: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
Whitelist Headers: Access-Control-Request-Headers, Access-Control-Request-Method, Origin
Object Caching: Use Origin Cache Headers …
Run Code Online (Sandbox Code Playgroud)

file-upload amazon-s3 amazon-cloudfront

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

Google Cloud Endpoints和JWT

我有一个基于Google Cloud Endpoints的API,我想使用JWT(Json Web Tokens)进行授权.我可以为每个包含令牌的请求设置Authorization标头,它可以正常工作.我知道Endpoints在Oauth2中使用了这个标题,这是我的问题.使用自定义令牌的授权标头是否正确?GAE日志:

D 12:38:44.375 Checking for id_token.
D 12:38:44.376 id_token verification failed: Unexpected encryption algorithm: u'HS256'
D 12:38:44.376 Checking for oauth token.
D 12:38:44.384 Oauth framework user didn't match oauth token user.
Run Code Online (Sandbox Code Playgroud)

看起来GAE试图将此令牌读作oauth令牌并且它不好,对吧?也许我应该在URL中发送我的令牌?像app-id.appspot.com/_ah/api/my_app/v1/users/get?jwt=TOKEN之类的东西.也许我不应该将JWT与Google Cloud Endpoints一起使用?

google-app-engine google-cloud-endpoints

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

python中嵌套的无限字典

我想在字典中设置键和值.这是我做的一个例子.

class NestedDict(dict):
    def __getitem__(self, key):
        if key in self: return self.get(key)
        return self.setdefault(key, NestedDict())

>>> c = NestedDict()
>>> c
{}
>>> c['a']['b'] = 'test'
>>> c['a']['c'] = 2
>>> c
{'a': {'c': 2, 'b': 'test'}}
>>> c['a']['c'] += 1
>>> c
{'a': {'c': 3, 'b': 'test'}}
>>> c['a']['d'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +=: 'NestedDict' and 'int'
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题?我希望能够使用+ =和 - =.当然,如果价值不存在,则+ = 1与= 1相同.也许有更好的解决方案?

谢谢.

python dictionary

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