目前我的go服务器正在端口4000上运行。要访问Web应用程序,我需要在浏览器中输入somedomainname:4000
。
我只想输入somedomainname
,它应该在端口4000上建立与Web服务器的连接。
答案 0 :(得分:4)
有几种解决方案:
让Go服务器直接在端口80上侦听。但是,请注意如何实现它。 不要以root身份运行您的服务,而是使用Linux功能(感谢@JimB在评论中提醒我这一点)。您可以使用setcap
向进程授予绑定到特权端口的功能:
> setcap 'cap_net_bind_service=+ep' /path/to/your/application
使用像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 进行访问。
如果您在Docker容器中部署应用程序,只需将容器端口4000映射到主机端口80. See the manual以获取更多信息。