在Web应用程序中将Web服务器与Nginx服务器一起使用

3 proxy reverse-proxy http nginx go

抱歉,我无法从Google搜索中找到此答案,而且似乎没有人可以清楚地解释纯Go Web服务器和nginx反向代理之间的区别。似乎每个人都在Web应用程序前面使用nginx。

我的问题是,尽管Go具有所有http服务功能,但与纯Go Web服务器相比,使用nginx有什么好处?

在大多数情况下,我们在此处为所有路由设置Go Web服务器,并在前面设置了nginx配置。

就像是:

limit_req_zone $binary_remote_addr zone=limit:10m rate=2r/s;

server {
    listen 80;

    log_format lf '[$time_local] $remote_addr ;

    access_log /var/log/nginx/access.log lf;
    error_log /var/log/nginx/error.log;

    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    server_name 1.2.3.4 mywebsite.com;
}
Run Code Online (Sandbox Code Playgroud)

当我们有这个Go:

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

Nginx和Go Web服务器的流量是否不同?如果没有,为什么我们有两层Web服务器?

请帮助我理解这一点。

谢谢,

Pab*_*dez 5

没有什么可以阻止您直接处理来自Go的请求。

另一方面,nginx开箱即用地提供了一些有用的功能,例如:

  • 处理许多虚拟服务器(例如,进行响应app.example.com并在上运行其他应用程序www.example.com

  • http基本身份验证的某些路径,例如www.example.com/secure

  • 访问日志

  • 等等

所有这些都可以随时进行,但需要编程,而在nginx中,只需编辑.conf文件并重新加载配置即可。Nginx甚至不需要重新启动即可进行此更改。

(从“流程”的角度来看,nginx可以由具有root权限的ops员工在众所周知的端口中运行,而开发人员则将其应用程序部署在更高的端口上。)

  • 好答案。Go也可以做很多事情,但是您(作为开发人员)或您的团队需要决定在哪里划清界限:“编写适合我们精确目的的东西”与“ nginx已经为我们做到这一点”。nginx / HAProxy / Varnish是经过严格测试的工具,可以省去您重新发明多个轮子的麻烦。 (2认同)