AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1165112
Accepted
notaverygoodprogrammer
notaverygoodprogrammer
Asked: 2024-09-12 00:38:31 +0800 CST2024-09-12 00:38:31 +0800 CST 2024-09-12 00:38:31 +0800 CST

Não é possível fazer o nginx fazer proxy do guacamole

  • 772

Tenho tentado fazer o nginx fazer o proxy reverso gacamole, mas não tive muito sucesso. Para isso, nos últimos dias, tenho seguido vários howto's descrevendo como instalar o nginx, o guacamole e configurar o nginx para fazer o proxy da porta Tomcat 8080. Tenho a sensação de que estou quase lá, mas simplesmente não consigo fazer o último passo...

Em uma máquina Ubuntu 22.04.05 LTS, instalei o nginx e o Tomcat9 prontos para uso. Em seguida, apaguei o arquivo /etc/nginx/sites-available/default, removi o symlink para esse arquivo em /etc/nginx/sites-enabled e reiniciei o nginx.

Então eu instalei o guacamole (1.55, guacd e o webapp no ​​tomcat). Depois de ter feito isso, eu posso chegar ao webapp de outra máquina usando http://nginx-handbook.test:8080/guacamole . Então, o guacamole funciona.

Agora, para a parte do proxy: criei um arquivo guacamole.conf em /etc/nginx/conf.d com o seguinte conteúdo:

server {

  listen 80;
  server_name nginx-handbook.test;

  access_log /var/log/nginx/guac_access.log;
  error_log /var/log/nginx/guac_error.log;

  location = / {
    proxy_pass http://127.0.0.1:8080/guacamole;
    proxy_buffering off;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    client_max_body_size 1g;
    access_log off;
  } 

}

Reiniciei o nginx e tentei acessar o guacamole de outro servidor usando http://nginx-handbook.test/ , mas estou recebendo um erro 404.

Eu sei que o proxy funciona (mais ou menos), porque minhas ações estão sendo registradas nos logs do proxy:

(guac_access.log)

192.168.56.1 - - [11/Sep/2024:16:07:38 +0000] "GET /guacamole/ HTTP/1.1" 404 197 "-" 
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/128.0.0.0 Safari/537.36"
192.168.56.1 - - [11/Sep/2024:16:07:40 +0000] "GET /guacamole/ HTTP/1.1" 404 197 "-" 
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/128.0.0.0 Safari/537.36"

(guac_error.log)

2024/09/11 16:07:38 [error] 29619#29619: *1 
"/usr/share/nginx/html/guacamole/index.html" is not found (2: No such file or 
directory), client: 192.168.56.1, server: nginx-handbook.test, request: "GET 
/guacamole/ HTTP/1.1", host: "nginx-handbook.test"
2024/09/11 16:07:40 [error] 29619#29619: *1 
"/usr/share/nginx/html/guacamole/index.html" is not found (2: No such file or 
directory), client: 192.168.56.1, server: nginx-handbook.test, request: "GET 
/guacamole/ HTTP/1.1", host: "nginx-handbook.test"

Embora o erro seja bem claro (nginx está procurando por guacamole em /usr/share/nginx/html), não entendi muito bem. Esperava redirecionar para a porta 8080 e deixar o Tomcat fazer o resto.

A raiz /usr/share/nginx/html não está definida em nenhum dos outros arquivos de configuração do nginx.

Devo definir a diretiva root para apontar para /var/lib/tomcat/webapps ? Isso não foi documentado em nenhum lugar nos howto's que vi.

Qualquer ajuda seria muito apreciada.

nginx
  • 1 1 respostas
  • 25 Views

1 respostas

  • Voted
  1. Best Answer
    larsks
    2024-09-12T07:12:20+08:002024-09-12T07:12:20+08:00

    Com sua configuração, quando você faz uma solicitação para http://nginx-handbook.test/, ela aparece no backend (tomcat) como:

    127.0.0.1 - - [11/Sep/2024:22:59:14 +0000] "GET /guacamole HTTP/1.1" 302 -  
    

    (Isso é de /var/log/tomcat9/localhost_access_log*txt.)

    Isso retorna a seguinte resposta ao navegador:

    HTTP/1.1 302 
    Server: nginx/1.18.0 (Ubuntu)
    Date: Wed, 11 Sep 2024 23:01:12 GMT
    Transfer-Encoding: chunked
    Connection: keep-alive
    Location: /guacamole/
    
    

    Então agora seu navegador busca http://nginx-handbook.test/guacamole/, o que resulta em:

    HTTP/1.1 404 Not Found
    Server: nginx/1.18.0 (Ubuntu)
    Date: Wed, 11 Sep 2024 23:02:25 GMT
    Content-Type: text/html
    Content-Length: 162
    Connection: keep-alive
    
    <html>
    <head><title>404 Not Found</title></head>
    <body>
    <center><h1>404 Not Found</h1></center>
    <hr><center>nginx/1.18.0 (Ubuntu)</center>
    </body>
    </html>
    

    E, notavelmente, essa solicitação não aparece no log de acesso do Tomcat. Isso porque você está usando =em sua locationdiretiva:

      location = / {
        ...
      }
    

    O =meio "somente corresponde a este bloco quando a solicitação for para /, e para nada mais ". Isso significa que uma solicitação para qualquer coisa diferente de http://nginx-handbook.text/não será enviada por proxy para o backend e resultará em mensagens como esta em /var/log/nginx/guac_error.log:

    2024/09/11 23:02:25 [error] 6472#6472: *12
    "/usr/share/nginx/html/guacamole/index.html" is not found (2: No such file or
    directory), client: 192.168.124.1, server: nginx-handbook.test, request: "GET
    /guacamole/ HTTP/1.1", host: "guac.virt"
    

    A solução é remover o =:

      location / {
        ...
      }
    

    Esse é um problema resolvido! Mas agora, uma solicitação para http://nginx-handbook.test/guacamole/resulta na seguinte solicitação no log de acesso do Tomcat:

    127.0.0.1 - - [11/Sep/2024:23:05:27 +0000] "GET /guacamoleguacamole/ HTTP/1.1" 404 783
    

    O que?

    Isso ocorre porque você precisa terminar o caminho de destino na sua proxy_passdiretiva com um /:

        proxy_pass http://127.0.0.1:8080/guacamole/;
    

    Agora, uma solicitação http://nginx-handbook.test/resulta na seguinte solicitação no log de acesso do Tomcat:

    127.0.0.1 - - [11/Sep/2024:23:09:16 +0000] "GET /guacamole/ HTTP/1.1" 200 2811
    

    Note que isso não resulta mais em um redirecionamento, porque estamos solicitando /guacamole/(que é onde o guacamole está hospedado), em vez de /quacamole. Isso permite que tudo funcione, e o navegador carrega com sucesso a página de login do guacamole.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve