Nginx supervisord配置

时间:2017-02-10 20:16:25

标签: nginx supervisord

我在supervisord上运行了localhost:9001服务器。 我正试图在localhost/supervisord提供服务。

nginx配置如下:

worker_processes 1;
error_log /var/log/nginx/error.log;
pid /tmp/nginx.pid;
#daemon off;

events {
  worker_connections 1024;
}

http {
    # MIME / Charset
    default_type application/octet-stream;
    charset utf-8;

    # Logging
    access_log /var/log/nginx/access.log;

    # Other params
    server_tokens off;
    tcp_nopush on;
    tcp_nodelay off;
    sendfile on;

    upstream supervisord {
        server localhost:9001;
    }

    server {
        listen 80;
          client_max_body_size 4G;
          keepalive_timeout 5;

        location ^~ /stylesheets {
          alias  /Users/ocervell/.virtualenvs/ndc-v3.3/lib/python2.7/site-packages/supervisor/ui/stylesheets;
          access_log off;
        }

        location ^~ /images {
          alias  /Users/ocervell/.virtualenvs/ndc-v3.3/lib/python2.7/site-packages/supervisor/ui/images;
          access_log off;
        }

        location /supervisord {
            # Set client IP / Proxy IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP  $remote_addr;

            # Set host header
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://supervisord/;
        }
    }
}

在添加^~ /images^~ /stylesheets位置之前,该网页返回了502 Bad Gateway

使用上面的配置,我可以访问localhost/supervisord,但页面上缺少CSS。

我看到css / images已在浏览器中正确加载:

Assets loaded

但是我在浏览器控制台中看到一条错误消息,它似乎是罪魁祸首:

Stylesheet not loaded

localhost/stylesheets/supervisor.css浏览器中的mimetype显示为octet-stream而不是text/css

localhost:9001/stylesheets/supervisor.css浏览器中的mimetype显示为正确的text/css

如何修复此错误?

我考虑过动态重写静态文件的mimetype,但我不是nginx的专家,也不知道如何从nginx config中执行此操作。

2 个答案:

答案 0 :(得分:3)

真正有趣的是,将Web界面置于透明反向代理之后这样一个显而易见的功能并不是那么简单。

无论如何,我这样做是为了让反向代理处理根本无法修改的应用程序,如主管:

           location /supervisor {
           proxy_pass http://127.0.0.1:9001/;
           }

           location / {

            if ($http_referer ~ "^.*/supervisor"){
              return 301 /supervisor/$request_uri;
            }
          }

应用程序端请求将达到主要终点,但随后NginX会将它们重定向到/ supervisor EP

这在大多数情况下有效,但并非总是如此。以下主管的网络功能将失败:

  1. 获取操作确认 - 您可以启动/停止服务,但结果页面将无法加载;只需前往/主管EP查看结果

  2. 活尾不起作用;但是有一个带有手动刷新的日志显示,它在与程序名称的链接下工作。

  3. 无论如何,这个部分支持对我来说很好,你可能会发现它也很有用。

答案 1 :(得分:0)

我能够简单地通过它来工作:

upstream supervisor {
  server 127.0.0.1:9001;
}

server {
  # ... 

  location /supervisor/ {
    proxy_pass  http://supervisor/;
  }
}

即使在浏览器中使用url也可以不使用反斜杠(即使http://example.com/supervisorhttp://example.com/supervisor/都可以)。 这对我来说是必须的!