web-applications - Go Webapp & Nginx : Confusion about listening, fastcgi & 反向代理

标签 web-applications nginx go

所以我正在尝试在 Go 上创建一个 webapp,它只接受来自一个域的所有请求,具有唯一的 IP,并让所有其他域和 IP 由 Nginx 处理(并使用 PHP 提供)。

我对这是如何完成的感到困惑,看起来很多人都在通过配置 Nginx 将请求从某个域传递到 FastCGI,然后从 Go webapp 监听。像这样:

Nginx.conf

server_name www.mydomain.com;
listen 123.123.123.123;
include         fastcgi.conf;
fastcgi_pass    127.0.0.1:9001;

开始

func main() {
 listener, _ := net.Listen("tcp", "127.0.0.1:9001")
 srv := new(MyServerObject)
 fcgi.Serve(listener, srv)
}

我不明白的是:这里我们让 Nginx 监听特定 IP 上的特定域,然后将其传递给 fastcgi,然后再传递给 Go。

为什么要这样做?我可以不让 Nginx 监听这个域,然后 Go 只监听这个域吗?那么在没有反向代理的情况下,同样的事情会更有效地实现。

既然我可以为 Go 正在监听的域使用专用 IP,那么(在我看来)就不会有冲突。 Nginx 根本不会监听 123.123.123.123:80 而 Go 会监听 123.123.123.123:80...因此不需要反向代理和 fastcgi。

我的想法是否正确,还是我遗漏了什么?

如果它是正确的,我需要做的就是从 Nginx 中删除此 IP/域的监听器,然后使用如下所示的 Go 代码吗?

func main() {
 http.HandleFunc("/", someFunction)
 http.ListenAndServe("123.123.123.123:80", nil)
}

最佳答案

是的,您可以让 Go 直接监听该 IP,它会正常工作,nginx 还有其他用途,例如缓存和提供静态文件。

您也可以去监听 http.ListenAndServe("127.0.0.1:9020", nil) 并从 nginx 代理到它:

server {
        listen 123.123.123.123:80;
        location  /  {
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://127.0.0.1:9020/;
        }
}

这需要几分钟的测试。

那么问问自己,你是否需要 nginx 来缓存一些文件或为你提供静态文件?如果是,在go前面使用,如果不是,直接使用go。

此外,如果您使用 nginx,代理方法可能比 fcgi 更快。

关于web-applications - Go Webapp & Nginx : Confusion about listening, fastcgi & 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24967163/

相关文章:

authentication - gRPC中如何使用Oauth2进行用户认证

Go:将 gob 与 zmq4 一起使用

javascript - Asp.net 开发和客户端操作集成

java - 我的 hibernate 实用程序返回空 session 工厂

jsp - 以 Nginx 作为反向代理的 tomcat Web 应用程序前端的上下文路径

node.js - 如何使用 Nginx 和 Express 应用程序解决 504 网关超时和 WebSockets 错误

magento - Nginx + PHP-FPM + Magento 的 FastCGI 缓存配置

java - 如何在 WAR 中打包文档工件

Java - HTTP 状态 404 - 未找到

mongodb - 如何在使用 go 从 mongodb 获取数据时对数据进行分组?