芹菜花安全生产

mh0*_*00h 32 django nginx celery flower

我希望使用Flower(https://github.com/mher/flower)来监控我的Celery任务,而不是django-admin在他们的文档中建议(http://docs.celeryproject.org/en/latest) /userguide/monitoring.html#flower-real-time-celery-web-monitor).但是,因为我是新手,所以我对Flower的页面仅基于HTTP而不是HTTPS的方式感到有些困惑.如何为我的Celery任务启用安全性,以便任何旧用户都无法访问无需登录的网站http://flowerserver.com:5555并进行更改?

我已经考虑了Celery 自己的文档,但遗憾的是,没有提到如何保护Flower的api或web ui.它说:[Need more text here]

谢谢!

更新:我的问题部分与此处重复:如何向Django Celery Flower Monitoring添加身份验证和端点?

但是,我在这里通过询问如何在同一个远程机器上使用包含nginx,gunicorn和celery的环境来运行它来澄清他的问题.我也想知道如何设置Flower的外部可访问网址,但是如果可能的话,也更喜欢https而不是http(或某种方式保护webui并远程访问它).我还需要知道,对于任何可能获得Flower内部API访问权限的人来说,离开Flower运行是否存在相当大的安全风险,以及确保实现这一目标的最佳方式是什么,或者它是否应该完全禁用并仅用于as-需要的基础.

leh*_*ins 40

您可以使用--auth标志运行flower,该标志将使用特定的Google电子邮件进行身份验证:

celery flower --auth=your.email@gmail.com
Run Code Online (Sandbox Code Playgroud)

编辑1:

新版本的Flower需要更多标记和已注册的OAuth2客户端与Google Developer Console:

celery flower --auth=your.email@gmail.com --oauth2_key="client_id" --oauth2_secret="client_secret" --oauth2_redirect_uri="http://example.com:5555/login"
Run Code Online (Sandbox Code Playgroud)

oauth2_redirect_uri 必须是实际的花卉登录网址,并且还必须添加到Google Development Console中的授权重定向网址.

遗憾的是,此功能在当前稳定版本中无法正常运行0.7.2,但现在已0.8.0-dev通过此提交在开发版本中修复.

编辑2:

您可以使用基本身份验证配置Flower :

celery flower --basic_auth=user1:password1,user2:password2
Run Code Online (Sandbox Code Playgroud)

然后阻止5555端口为除localhost之外的所有端口并为nginx或apache 配置反向代理:

ProxyRequests off
ProxyPreserveHost On
ProxyPass / http://localhost:5555
Run Code Online (Sandbox Code Playgroud)

然后确保代理模块已打开:

sudo a2enmod proxy
sudo a2enmod proxy_http
Run Code Online (Sandbox Code Playgroud)

如果您无法在单独的子域上进行设置,例如:(flower.example.com上面的配置),您可以将其设置为example.com/flower:

跑花url_prefix:

celery flower --url_prefix=flower --basic_auth=user1:password1,user2:password2
Run Code Online (Sandbox Code Playgroud)

在apache配置中:

ProxyPass /flower http://localhost:5555
Run Code Online (Sandbox Code Playgroud)

当然,确保配置SSL,否则没有意义:)

  • 这是一个写得非常好的答案,谢谢.现在花是否值得所有上述混乱 - 这是一个不同的问题. (2认同)
  • 只是想指出花似乎现在有一个localhost选项:`芹菜花-A proj --address = 127.0.0.1 --port = 5555` (2认同)

Pet*_*ryl 13

我已经在 Django 端https://pypi.org/project/django-revproxy/上使用代理发现了它。所以 Flower 隐藏在 Django auth 后面,它比基本 auth 更灵活。而且你不需要在 NGINX 中重写规则。

花 0.9.5 及更高

URL前缀必须移动到代理路径:https : //github.com/mher/flower/pull/766

网址.py

urlpatterns = [
    FlowerProxyView.as_url(),
    ...
]
Run Code Online (Sandbox Code Playgroud)

视图.py

class FlowerProxyView(UserPassesTestMixin, ProxyView):
    # `flower` is Docker container, you can use `localhost` instead
    upstream = 'http://{}:{}'.format('flower', 5555)
    url_prefix = 'flower'
    rewrite = (
        (r'^/{}$'.format(url_prefix), r'/{}/'.format(url_prefix)),
     )

    def test_func(self):
        return self.request.user.is_superuser

    @classmethod
    def as_url(cls):
        return re_path(r'^(?P<path>{}.*)$'.format(cls.url_prefix), cls.as_view())
Run Code Online (Sandbox Code Playgroud)

花 0.9.4 及以下

网址.py

urlpatterns = [
    re_path(r'^flower/?(?P<path>.*)$', FlowerProxyView.as_view()),
    ...
]
Run Code Online (Sandbox Code Playgroud)

视图.py

from django.contrib.auth.mixins import UserPassesTestMixin
from revproxy.views import ProxyView


class FlowerProxyView(UserPassesTestMixin, ProxyView):
    # `flower` is Docker container, you can use `localhost` instead
    upstream = 'http://flower:5555'

    def test_func(self):
        return self.request.user.is_superuser
Run Code Online (Sandbox Code Playgroud)


Sco*_*ord 12

我想在我的网络服务器的子目录上开花,所以我的nginx反向代理配置如下所示:

location /flower/ {
    proxy_pass http://localhost:5555/;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;

    auth_basic  "Restricted";
    auth_basic_user_file  /etc/nginx/.htpasswd;
}
Run Code Online (Sandbox Code Playgroud)

现在我可以通过www.example.com/flower获得开花(密码保护)

其中大部分源自关于配置nginx反向代理的Flower文档页面:

http://flower.readthedocs.org/en/latest/reverse-proxy.html