golang - 如何将数据从默认端口路由到另一个[4000]端口

时间:2016-01-04 12:31:24

标签: go

目前我的go服务器正在端口4000上运行。要访问Web应用程序,我需要在浏览器中输入somedomainname:4000

我只想输入somedomainname,它应该在端口4000上建立与Web服务器的连接。

1 个答案:

答案 0 :(得分:4)

有几种解决方案:

  1. 让Go服务器直接在端口80上侦听。但是,请注意如何实现它。 不要以root身份运行您的服务,而是使用Linux功能(感谢@JimB在评论中提醒我这一点)。您可以使用setcap向进程授予绑定到特权端口的功能:

    > setcap 'cap_net_bind_service=+ep' /path/to/your/application
    
  2. 使用像Nginx这样的HTTP反向代理将来自端口80的所有HTTP请求转发到Go应用程序。这是Nginx的示例配置文件:

    upstream yourgoapplication {
      server localhost:4000;
    }
    
    server {
      listen 80;
    
      server_name somedomainname;
    
      location / {
        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_set_header X-Forwarded-Proto $scheme;
    
        proxy_pass http://yourgoapplication;
      }
    }
    

    执行此操作时,您可以将Go应用程序配置为在127.0.0.1:4000而不是0.0.0.0:4000上进行收听,以使您的应用程序仅通过端口80 进行访问。

  3. 如果您在Docker容器中部署应用程序,只需将容器端口4000映射到主机端口80. See the manual以获取更多信息。