通过 ssh 隧道和 nginx 代理访问服务器

通过 ssh 隧道和 nginx 代理访问服务器

我是 nginx 新手。我继承了一台功能齐全且配置齐全的 Ubuntu 服务器,其中安装了 nginx,并且想对其进行额外调整以支持下面描述的有点奇怪的配置。

基本信息。我的 Ubuntu 服务器(我们将其命名为 server.corp.com)在内部公司网络中运行。它托管 Gerrit 和 Jenkins,每个都有 www 接口,监听自己的端口(8081 和 8082),并且 nginx 代理对相应的 的请求locations。例如对http://server.corp.com/gerrit代理至http://server.corp.com:8081 不幸的是,我现在无法显示 nginx 配置,因为我正在家里写这个问题。我记得它包含带有proxy_pass子句的行。

现在,出现了一个奇怪的配置。

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

Other Linux并且 Windows PC 也属于公司网络(它很大)。Other Linux可以通过端口 80、22 和 29418 连接到我的服务器。其他端口被防火墙阻止,我无法影响。Windows PC 可以Other Linux使用 SSH 连接到,可能还有其他端口和协议可用。我既没有登录名,也没有超级用户权限Other Linux

我的同事(WindowsPC 用户)已成功使用 Putty 及其在端口 29418 上的 SSH 隧道连接到我们的 Gerrit(它也在端口 29418 上监听)。相应的隧道是localhost:29418 -> server.corp.com:29418

我的目标是让我的同事能够访问 Gerrit 和 Jenkins 的 www 接口server.corp.com

我可以指示他建立一个或多个到我的服务器的 SSH 隧道。但是,我猜这还需要对 nginx 进行一些调整,因为简单的 SSH 隧道localhost:80 -> server:80不起作用。Chrome 抱怨在尝试连接到 localhost:80 时 SSL 连接超时。

更新 2:我尝试在我的 PC(Windows 也一样)上模拟此设置并使用 Git 发行版中的 wget。我还创建了另一个用于实验的位置。

以下是 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;
    }
}

输出wget -d如下:

$ 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.

答案1

找到解决方案。需要添加到主机

127.0.0.1 server.corp.com 

相关内容