Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/nginx/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx 在生产中提供Go Web应用程序_Nginx_Go - Fatal编程技术网

Nginx 在生产中提供Go Web应用程序

Nginx 在生产中提供Go Web应用程序,nginx,go,Nginx,Go,就静态内容、灵活性和安全性而言,在生产中为Go web应用程序提供服务的最佳方式是什么 我应该从一个完全缓冲的反向代理(如nginx)后面提供服务吗?如果是这样,我应该让nginx处理静态内容吗 我应该像这里建议的那样使用ServeMux和FileServer从Go应用程序提供静态内容吗 我的应用程序在生产中是否需要使用NaCL或AppArmor之类的沙盒?您的问题很好地概括了您的权衡。不过,我不能肯定地告诉您应该选择哪一个,因为这将根据您的应用程序而有很大的不同,但这里有一些要点 安全 您提出

就静态内容、灵活性和安全性而言,在生产中为Go web应用程序提供服务的最佳方式是什么

我应该从一个完全缓冲的反向代理(如nginx)后面提供服务吗?如果是这样,我应该让nginx处理静态内容吗

我应该像这里建议的那样使用
ServeMux
FileServer
从Go应用程序提供静态内容吗


我的应用程序在生产中是否需要使用NaCL或AppArmor之类的沙盒?

您的问题很好地概括了您的权衡。不过,我不能肯定地告诉您应该选择哪一个,因为这将根据您的应用程序而有很大的不同,但这里有一些要点

安全 您提出了关于安全性的两点:

  • nginx后面的反向代理
  • 沙箱
  • 如果您正在运行一个敏感的应用程序(金融数据等),终止与nginx(或apache)的SSL连接对您来说将是一件大事,因为它们将使用OpenSSL,这已经过许多安全专家的审查和审查。Go crypto库非常好,由在该领域备受尊敬的人编写,但它尚未受到同样的审查

    我无法告诉您什么最适合您的应用程序,但我还没有看到很多关于在生产中使用国产Go应用程序时对其进行沙箱处理的讨论。与此相关的一个令人兴奋的新项目是,它可以为您提供多个级别的沙箱,甚至在您的Go应用程序之外。在我看来,只要您跟踪Go的最新版本并避免做不安全的事情(如导入“不安全”和使用cgo),使用NaCl或AppArmor可能会带来更多的麻烦。也就是说,如果您正在执行类似的操作,几乎肯定需要对不受信任的Go程序进行沙箱处理

    静态内容 你真的可以随心所欲。我会选择对你来说最容易的。Go应用程序可以很容易地为自己的静态内容和动态内容提供服务,因此我想说,在基准测试和监控告诉您它无法处理负载之前,将其分离出来通常是一种过早的优化

    灵活性 我认为将所有内容保存在一个二进制文件中的灵活性是很难争辩的。这使得部署变得非常容易,减少了您需要进行的配置和监视的数量,等等。现在是静态文件的内容以后可以是动态的;如果您需要内存缓存或共享内存缓存,您可以将其添加到那里。通常很难确切地知道将来需要什么,因此在原型设计和部署的初始阶段尽可能保持灵活性是一个巨大的好处


    这里的另一个好处是,还可以回到前面的两个问题,如果您的应用程序/网站非常成功,那么您可能最终会在一个CDN(比如,它恰好使用Go来处理其基础结构的一些关键部分)后面服务,该CDN将处理静态内容的缓存和SSL连接的终止。这可能是一个保持简单和最小化前期工程成本的理由,因为如果需要,您可以在以后使用现有解决方案。

    非常好的答案!我还要补充一点,对于Linux上的沙盒,Docker可以非常好地工作()。它也是用围棋写的!