Django:如何在生产模式下访问芹菜花页面?

use*_*632 6 django nginx celery flower

在开发模式(本地)下,访问花卉页面(http:// localhost:5555)非常容易

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

我想使用以下URL访问花卉仪表板页面:
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;
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

然后执行花服务器:

$ celery --workdir=spacegraphy/  --app=spacegraphy.celery:app flower
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

如果我单击任何链接,

在此处输入图片说明

我错过了什么?是否将花服务器与应用程序服务器分开?

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

小智 6

您需要将花 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;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

实际上,您将同时需要两个以前的解决方案:

  1. 使用--url-prefix=flower如@osmay88 提到的那样运行花
  2. 以下一种方式配置 Nginx 位置部分:

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

当在没有url-prefix但有sub_filter 的情况下使用时,这将导致“监控”页面为空。


osm*_*y88 4

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

  • 快速澄清:(我相信 API 可能已更改)当前文档表明此选项应使用下划线(即 `flower --url_prefix=flower`)而不是连字符;来源:https://flower.readthedocs.io/en/latest/config.html#url-prefix (2认同)