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服务器?
请帮助我理解这一点。
谢谢,
没有什么可以阻止您直接处理来自Go的请求。
另一方面,nginx开箱即用地提供了一些有用的功能,例如:
处理许多虚拟服务器(例如,进行响应app.example.com并在上运行其他应用程序www.example.com)
http基本身份验证的某些路径,例如www.example.com/secure
访问日志
所有这些都可以随时进行,但需要编程,而在nginx中,只需编辑.conf文件并重新加载配置即可。Nginx甚至不需要重新启动即可进行此更改。
(从“流程”的角度来看,nginx可以由具有root权限的ops员工在众所周知的端口中运行,而开发人员则将其应用程序部署在更高的端口上。)