在同一主机上进行端口重定向的正确方法是什么?

在同一主机上进行端口重定向的正确方法是什么?

我已经在 amazon ec2、ubuntu 16.04 机器上安装了 jenkins。jenkins 在端口 9090 上启动。我想将端口 80(http) 重定向到端口 9090 并使用 访问 jenkins http://ci.mymachine.com/。我已关注使用 iptables 在端口 80 或 443 上运行 Jenkins并在 iptables 中设置规则,将端口重定向从 80 到 9090。以下是创建的规则。

sudo iptables -L -n --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9090
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8443

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1            state NEW tcp dpt:8080

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination  

重定向规则是

sudo iptables -t nat -L -n --line-numbers

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 9090
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 redir ports 8443

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination  

无论如何,当我使用 url 访问 jenkins 时http://ci.mymachine.com/,我收到 502 连接被拒绝页面。但我可以使用 访问 jenkins http://ci.mymachine.com:9090/。我这里遗漏了什么?

答案1

我建议你安装 nginx 以将 HTTP 请求从标准80端口转发到 Jenkins 页面。以下是设置 nginx.conf 文件的一个小示例(对我来说效果很好)。在我的 Ubuntu 机器上,我编辑了文件/etc/nginx/sites-available/default(插入你的 IP 地址而不是我的 IP 地址):

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    #try_files $uri $uri/ =404;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://192.168.56.103:8080;
    proxy_redirect http://192.168.56.103:8080/ $scheme://$host:8080/
}

另外,我必须评论一下这句话'#try_files $uri $uri/ =404;' '因为否则我会收到 404 错误。重新启动 nginx sudo /etc/init.d/nginx restart。现在,如果您将浏览器指向 ,http://ci.mymachine.com您应该会重定向到 Jenkins 页面。Ctrl+F5按 '硬' 刷新页面。希望有所帮助。这是关联参与讨论。

答案2

我能够使用 jenkins 文档中提到的 iptable 配置连接到端口 80,有问题(该配置对于 ubuntu 16.04 可以正常工作,即使该文档说他们没有针对 ubuntu 16.04 进行测试)。

问题是,正如问题中提到的,这台机器是亚马逊 ec2 实例。亚马逊控制台中没有为这台机器的 http 端口 (80) 创建入站规则。使用亚马逊控制台创建入站规则后,现在我可以http://ci.mymachine.com毫无问题地访问 URL。

相关内容