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,否则没有意义:)
Pet*_*ryl 13
我已经在 Django 端https://pypi.org/project/django-revproxy/上使用代理发现了它。所以 Flower 隐藏在 Django auth 后面,它比基本 auth 更灵活。而且你不需要在 NGINX 中重写规则。
URL前缀必须移动到代理路径:https : //github.com/mher/flower/pull/766
urlpatterns = [
FlowerProxyView.as_url(),
...
]
Run Code Online (Sandbox Code Playgroud)
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)
urlpatterns = [
re_path(r'^flower/?(?P<path>.*)$', FlowerProxyView.as_view()),
...
]
Run Code Online (Sandbox Code Playgroud)
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
| 归档时间: |
|
| 查看次数: |
11672 次 |
| 最近记录: |