Alcança o servidor via túnel ssh e proxy nginx

1

Sou novo no nginx. Eu herdei um servidor Ubuntu totalmente funcional e configurado com o nginx e gostaria de ajustá-lo adicionalmente para suportar uma configuração um pouco estranha, descrita abaixo.

Informação básica. Meu servidor Ubuntu (vamos chamá-lo server.corp.com) é executado em uma rede corporativa interna. Ele hospeda Gerrit e Jenkins, cada um dos quais tem interface www, ouvindo em sua própria porta (8081 e 8082) e solicitações de proxies nginx para o respectivo locations . Por exemplo, as solicitações para o link são enviadas para link Infelizmente, não posso mostrar a configuração do nginx agora, já que estou escrevendo essa pergunta em casa. Lembro-me de que contém linhas com cláusula proxy_pass .

Agora, vem a configuração estranha.

server.corp.com, ports 80, 22 and 29418  <--> other Linux <--> Windows

Other Linux e Windows PC também pertencem à rede corporativa (é grande). Other Linux pode se conectar ao meu servidor nas portas 80, 22 e 29418. Outras portas são bloqueadas por firewalls, o que não posso afetar. O Windows PC pode se conectar ao Other Linux com o SSH, e provavelmente outras portas e protocolos estão disponíveis. Eu não tenho nem login nem privilégios de superusuário em Other Linux .

Meu colega, usuário do WindowsPC, já usa com sucesso o Putty e seu túnel SSH na porta 29418 para se conectar ao nosso Gerrit (que também escuta na porta 29418). O respectivo túnel é localhost:29418 -> server.corp.com:29418 .

Meu objetivo é dar ao meu colega acesso a www-interfaces de Gerrit e Jenkins em server.corp.com .

Eu posso instruí-lo a estabelecer um ou mais túneis SSH no meu servidor. No entanto, eu acho, também requer algum ajuste de nginx, porque o simples túnel SSH localhost:80 -> server:80 não funciona. O Chrome reclamou do tempo limite de conexão SSL na tentativa de se conectar ao localhost: 80.

UPDATE2: Eu tentei modelar essa configuração no meu PC (Windows também) e usar o wget do Git distro. Eu também criei mais um local para experimentos.

Aqui está a parte relevante (espero) da configuração do nginx

# file nginx.conf

include /etc/nginx/conf.d/*.conf;
# ...

# file conf.d/tunnel.conf
# This server clause is contained in conf.d/tunnel.conf
server {
    listen 80;
    server_name "localhost:1234" xxx.xxx.xxx.xxx;
    server_name_in_redirect off;

    location /gerrit2 {
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  Host $http_host;
        proxy_pass   http://127.0.0.1:8081;
    }
}
# end of tunnel.conf

# again, file nginx.conf
server {
        listen 80 default;
        rewrite ^ http://server.corp.com$request_uri permanent;
}

server {
    listen 80;
    server_name server.corp.com;

    location ~ "^/$" {
        rewrite / /redmine;
    }

    location /gerrit/ {
        proxy_pass   http://localhost:8081;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  Host $http_host;
    }
}

A saída de wget -d foi a seguinte:

$ wget -d http://localhost:1234/gerrit2
DEBUG output created by Wget 1.11.4 on Windows-MSVC.

--2015-11-12 11:20:51--  http://localhost:1234/gerrit2
Resolving localhost... seconds 0.00, 127.0.0.1
Caching localhost => 127.0.0.1
Connecting to localhost|127.0.0.1|:1234... seconds 0.00, connected.
Created socket 900.
Releasing 0x029773e8 (new refcount 1).

---request begin---
GET /gerrit2 HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Host: localhost:1234
Connection: Keep-Alive

---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Thu, 12 Nov 2015 08:20:51 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://server.corp.com/gerrit2

---response end---
301 Moved Permanently
Registered socket 900 for persistent reuse.
Location: http://server.corp.com/gerrit2 [following]
Skipping 193 bytes of body: [<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.4.6 (Ubuntu)</center>
</body>
</html>
] done.
--2015-11-12 11:20:51--  http://server.corp.com/gerrit2
Resolving server.corp.com... seconds 0.00, xxx.xxx.xxx.xxx
Caching server.corp.com => xxx.xxx.xxx.xxx
Connecting to server.corp.com|xxx.xxx.xxx.xxx|:80... seconds 0.00, connected.
Created socket 896.
Releasing 0x02977428 (new refcount 1).

---request begin---
GET /gerrit2 HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Host: server.corp.com
Connection: Keep-Alive

---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 404 Not Found
Server: nginx/1.4.6 (Ubuntu)
Date: Thu, 12 Nov 2015 08:20:51 GMT
Content-Type: text/html
Content-Length: 177
Connection: keep-alive

---response end---
404 Not Found
Disabling further reuse of socket 900.
Closed fd 900
Registered socket 896 for persistent reuse.
Skipping 177 bytes of body: [<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.4.6 (Ubuntu)</center>
</body>
</html>
] done.
2015-11-12 11:20:51 ERROR 404: Not Found.
    
por wl2776 08.11.2015 / 18:56

1 resposta

0

Solução encontrada. É preciso adicionar aos hosts

127.0.0.1 server.corp.com 
    
por 19.11.2015 / 13:55