首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将nginx与Golang一起用作反向代理?

如何将nginx与Golang一起用作反向代理?
EN

Stack Overflow用户
提问于 2016-04-27 01:23:22
回答 2查看 1.7K关注 0票数 2

我想使用Golang作为我的服务器端语言,但是我所读到的所有东西都指向nginx作为web服务器,而不是依赖于net/http (并不是说它不好,但总体上似乎更好,而不是这篇文章的重点)。

我已经找到了几篇关于在Golang中使用fastcgi的文章,但是我在反向代理和HTTP等方面没有发现任何东西,只有这个基准 (遗憾地没有详细介绍)。

是否有任何关于如何操作的教程/指南?

例如,有一个用Node详细描述它的堆栈溢出上的大帖子,但是我找不到类似的。

EN

回答 2

Stack Overflow用户

发布于 2016-04-27 01:54:29

除非您使用nginx进行缓存,否则这一点根本不需要,Golang 1.6+非常适合直接服务器http和https。

然而,如果你坚持,我会偷偷地批评你,嘲笑你,这就是工作流程:

  1. go应用程序在本地端口上侦听,如"127.0.0.1:8080“
  2. nginx侦听0.0.0.0:80和0.0.0.0:443,代理所有请求到127.0.0.1:8080。
  3. 被审判。

Node.js + Nginx -现在是什么?中的nginx设置与Go所用的设置完全相同,或者任何其他独立服务器都不是cgi/ standalone。

票数 1
EN

Stack Overflow用户

发布于 2016-05-13 18:01:20

我在生产中非常有效地使用Nginx,对于FastCGI连接使用Unix而不是TCP。这个代码片段来自礼节,但是您可以很容易地将它改编成普通的Go api。

代码语言:javascript
复制
func isUnixNetwork(addr string) bool {
    return strings.HasPrefix(addr, "/") || strings.HasPrefix(addr, ".")
}

func listenToUnix(bind string) (listener net.Listener, err error) {
    _, err = os.Stat(bind)
    if err == nil {
        // socket exists and is "already in use";
        // presume this is from earlier run and therefore delete it
        err = os.Remove(bind)
        if err != nil {
            return
        }
    } else if !os.IsNotExist(err) {
        return
    }
    listener, err = net.Listen("unix", bind)
    return
}

func listen(bind string) (listener net.Listener, err error) {
    if isUnixNetwork(bind) {
        logger.Printf("Listening on unix socket %s\n", bind)
        return listenToUnix(bind)
    } else if strings.Contains(bind, ":") {
        logger.Printf("Listening on tcp socket %s\n", bind)
        return net.Listen("tcp", bind)
    } else {
        return nil, fmt.Errorf("error while parsing bind arg %v", bind)
    }
}

看看第252行,它是在TCP连接上的HTTP和Unix域套接字上的FastCGI之间进行切换的。

使用Unix套接字,您必须调整启动脚本,以确保以有序的方式创建具有正确所有权和权限的套接字。如果你做得对,剩下的就很容易了。

要回答关于为什么要使用Nginx的其他评论,这总是取决于您的用例。我有Nginx托管的静态/PHP网站;在这种情况下,将其用作同一服务器上的反向代理非常方便。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36878684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档