nginx proxy pass para supervisord

1

Estou tentando disponibilizar a interface da Web do supervisor no link

Depois de tentar por muitas horas, consegui que funcionasse corretamente com uma barra ( link ). Eu consegui que ele aparecesse sem barra, mas nenhuma das imagens / css etc. funciona.

Sou novo no nginx, então estou supondo que algo está errado com minhas regras de reescrita. A primeira reescrita é algo que eu tentei adicionar uma barra final.

supervisord.conf

[unix_http_server]
  file = /tmp/supervisor.sock  ; (the path to the socket file)
  chmod=0700                   ; socket file mode (default 0700)

nginx.conf

location ~* ^/supervisor/? {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host $http_x_host;
     proxy_set_header X-NginX-Proxy true;

     rewrite ^(.*[^/])$ $1/;
     rewrite /supervisor/(.*) /$1 break;
     proxy_pass http://unix:/tmp/supervisor.sock:;
     proxy_redirect off;
     proxy_buffering off;
}

Eu tenho lutado com isso há muito tempo e não tenho certeza para onde ir. Alguém poderia me apontar na direção certa?

Obrigado.

Editar: Obrigado Richard, isso me ajudou a ir um pouco mais longe. Eu tive que mudar o redirecionamento para return 301 $scheme://$host$request_uri/; para fazê-lo funcionar aqui, mas agora ele redireciona para supervisor /

Parece ok agora, mas pressionar refresh, reiniciar etc. funciona para o comando, mas não retorna para / supervisor /. Eu mudei supervisord para inet_server para testar e quando vou para example.com:9001 tudo funciona bem. Eu tentei proxy para servidor inet, mas ainda não funciona. Por exemplo. o botão de atualização envia: /supervisor/index.html?action=refresh e retorna com /?message=Page%20refreshed%20at%20Sat%20Jul%20%201%2014%3A10%3A27%202017 Parece que ele não retorna para / supervisor /, mas para a raiz do servidor (example.com/?message = ...)? Alguma idéia de como eu posso consertar isso?

Edit2: Ok depois de googling por horas eu fiz essa solução que funciona para mim. Leia que eu deveria ficar longe de se em nginx, então provavelmente não é uma ótima solução. Pelo menos funciona aqui agora. Eu adicionei isso ao meu conf:

if ($http_referer ~* example.com/supervisor ) {
    set $test supervisor;
}

if ($request_uri ~* message ) {
    set $test  "${test}+message";
}

if ($request_uri !~ supervisor ) {
    set $test  "${test}+addsup";
}

if ($test = "supervisor+message+addsup") {
  return $scheme://$host/supervisor$request_uri;
  break;
}
    
por Herjar 01.07.2017 / 14:38

1 resposta

0

Se os arquivos de recursos forem especificados usando URIs relativos ao caminho, o navegador talvez precise ver a barra à direita. Nesse caso, você poderia redirecionar /supervisor para /supervisor/ , o que também simplificaria seu bloco location existente. Por exemplo:

location = /supervisor {
    return 301 /supervisor/;
}
location ^~ /supervisor/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_x_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://unix:/tmp/supervisor.sock/;
    proxy_redirect off;
    proxy_buffering off;
}

Observe que o segundo bloco agora é um local de prefixo e a instrução rewrite anterior está agora implementada por proxy_pass (usando% / ). Consulte este documento para saber mais.

    
por 01.07.2017 / 15:11