【问题标题】:Django: How can I access celery flower page in production mode?Django:如何在生产模式下访问芹菜花页面?
【发布时间】:2016-12-20 11:15:08
【问题描述】:

在开发模式下(本地),访问花页真的很容易(http://localhost:5555

但在生产模式下,很难访问花页。

我想通过以下网址访问花卉仪表板页面:
https://spacegraphy.choislaw.xyz/flower/(域名:choislaw.xyz)

我推荐了http://flower.readthedocs.io/en/latest/reverse-proxy.html#reverse-proxy,这就是我所做的:

nginx.conf

  http {
      include       mime.types;
      default_type  application/octet-stream;
      sendfile        on;

      server {
          listen       80;
          server_name  spacegraphy.choislaw.xyz;

          client_max_body_size 4G;
          keepalive_timeout 5;

          return 301 https://$server_name$request_uri;
      }


      # HTTPS server
      server {
          listen       443 default_server ssl;
          server_name  spacegraphy.choislaw.xyz;

          client_max_body_size 4G;
          keepalive_timeout 5;

          ssl_certificate      /etc/letsencrypt/live/spacegraphy.choislaw.xyz/fullchain.pem;
          ssl_certificate_key  /etc/letsencrypt/live/spacegraphy.choislaw.xyz/privkey.pem;

          location / {
              proxy_pass_header X-CSRFToken;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto https;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header HOST $http_host;
              proxy_set_header X-NginX-Proxy true;

              proxy_pass http://127.0.0.1:4349;
              proxy_redirect off;
          }

          # Flower
          location /flower/ {
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto https;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header HOST $http_host;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_http_version 1.1;

             proxy_pass http://localhost:5555/;
             proxy_redirect off;
         }
     }
 }

我执行花服务器:

$ celery --workdir=spacegraphy/  --app=spacegraphy.celery:app flower

我访问https://spacegraphy.choislaw.xyz/flower/,显示如下:

如果我点击任何链接,

我错过了什么吗?花服务器和应用服务器分开吗?

顺便说一句,通常在生产服务器上运行花服务器吗?

【问题讨论】:

  • 没有设置静态文件和位置/tasks/
  • 我该如何处理?
  • 通常在生产服务器上运行花服务器吗?对我来说,仅出于维护目的启用它。
  • @Jinje 如何为花的静态文件设置设置文件?
  • 可以参考这里的例子:link

标签: django nginx celery flower


【解决方案1】:

你需要将flower nginx conf 更改为:

location ~ ^/flower/? {
    rewrite ^/flower/?(.*)$ /$1 break;

    sub_filter '="/' '="/flower/';
    sub_filter_last_modified on;
    sub_filter_once off;

    # proxy_pass http://unix:/tmp/flower.sock:/;
    proxy_pass http://localhost:5555;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
}

【讨论】:

    【解决方案2】:

    实际上你会同时需要之前的两种解决方案:

    1. @osmay88 提到的 --url-prefix=flower 运行花
    2. 下一种方式配置Nginx location部分:

      location ~ ^/flower/? {
          proxy_pass http://<IP>:<PORT>;
          rewrite ^/flower/?(.*)$ /$1 break;
      }
      

    当使用时没有 url-prefix 但有 sub_filter 那么这将导致 "Monitor" 页面为空。

    【讨论】:

    • @Vladimir Sh.我也在尝试在生产中使用花,但是我的花没有实时响应。你知道如何配置 nginx 进行实时监控吗?
    【解决方案3】:

    from doc

    $ flower --url_prefix=flower
    

    nginx.conf

    location /flower/ {
        rewrite ^/flower/(.*)$ /$1 break;
        proxy_pass http://example.com:5555;
        proxy_set_header Host $host;
    }
    

    【讨论】:

      【解决方案4】:

      你可以用 --url-prefix=flower 运行花

      【讨论】:

      猜你喜欢
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 2018-06-11
      • 2021-06-01
      • 2013-08-14
      相关资源
      最近更新 更多