分享 如何以非 root 用户将应用绑定到 80 端口-ssh 篇

cao7113 · 2013年12月09日 · 最后由 RainFlying 回复于 2013年12月10日 · 6702 次阅读

有时想以普通用户身份让应用跑在 80 端口??

linux 下 1024 以下端口只有 root 用户才能 bind,那怎样才能以普通用户身份绑定到 80 端口呢?

参考: http://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-1024-on-l 发现个不错方法:建立 ssh 隧道进行端口转发,这样不需安装任何复杂的软件(如 nginx,iptables)就能进行端口映射,方便不少!

具体方法,如 rails 应用正常跑在 3000 端口,终端输入:

sudo ssh devuser@localhost -L 80:localhost:3000 -N

这样浏览器访问: http://localhost 就自动能请求 3000 端口的 rails 应用啦,是不是很方便啊,绿色无害,收藏吧,呵呵

应用场景:

  • 和外部有端口要求的应用联调,如 weiboapp,其它团队的子系统

注:此方法仅用在开发环境下,简单方便,不用特殊的配置,方便各个层次的开发人员

更多精彩: http://shareup.me/tools/ssh

我的确讨厌开发环境中加个 3000 之类的,为什么开发环境不能和生产环境少一些区别呢,低端口号在操作系统上有有限制,但通过端口转发的确可以搞定。

我是用 vagrant,再加 iptables 直接搞定端口号,然后用个 bash 自动切换域名解析,这样本地开发环境除了缓存之类的不一样外,和生产环境感觉上没有区别,特别是 url 不是 localhost,看起来好多了。

可以用 haproxy,配置下后台只需要起一个服务就行了。

都 sudo 建 ssh 隧道了 还不如直接 sudo rails s -p 80 呢

你们真能折腾 能用 nginx 再写个本地 host

#2 楼 @Peter 生产环境 Rails 也不是跑在 80 端口啊,你部署环境用户都是直接访问你的 unicorn 的么?

@ch3n 你试下就知道啦,sudo 的环境和你正常的开发用户的环境是不一样的,你肯定没试,呵呵

@jhjguxin 这个仅仅是为了简单调试,并非生产环境,便于操作

端口转发什么的还可以用 rinetd 实现,这个语法更简单一点。

0.0.0.0 443 api.twitter.com 443

就将本地的 443 端口的请求转发到 api.twitter.com 上 443 端口, api.twitter.com 有多条 A 记录的时候也无所谓。

9 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号