Golang Nginx 配置 Root规则错误对于网站的影响 文章 2021-08-31 15:13:55 +0800 CST 阅读:2471 评论数:0 [TOCM] [TOC] ### 前言 用Go写好一个项目,那么久伴随着上线,直接使用IP:port方式访问体验非常差,因此web项目或者接口往往都会绑定一个域名。 ### 方法 **使用Nginx代理:proxy_pass(此模块允许将请求传递到另一个服务器)** 使用域名访问默认都是80端口,我们只需要将80端口转发到go程序的自定义端口上即可,只需要简单的设置即可实现。 ### Nginx配置 ``` server { listen 80; server_name go.phpbloger.com; charset utf-8; access_log /www/wwwlogs/www.go-day.cn.log; error_log /www/wwwlogs/www.go-day.cn.error.log; location / { try_files /_not_exists_ @web; } location @web { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8080; #就是这里 } } ``` 此时直接访问域名就可以了。 但是通过Nginx日志发现问题如下: ``` 139.226.186.116 - - [31/Aug/2021:14:57:51 +0800] "GET /detail/1.html HTTP/1.1" 200 6191 "http://go.phpbloger.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:51 +0800] "GET /captcha HTTP/1.1" 200 1183 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:51 +0800] "GET /sm/b7d7e18e65ee3e8841f92f8a728d5f23edbb06a87a648dcdc05375140959cb3e.map HTTP/1.1" 404 18 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /detail/1.html HTTP/1.1" 200 6191 "http://go.phpbloger.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/css/styles.css HTTP/1.1" 200 92 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/css/code.css HTTP/1.1" 200 955 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/css/pagination.css HTTP/1.1" 200 1868 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/css/style.css HTTP/1.1" 200 5446 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/css/button.css HTTP/1.1" 200 693 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/css/jquery.fancybox.min.css HTTP/1.1" 200 1473 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/js/jquery.min.js HTTP/1.1" 200 33599 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/js/main.js HTTP/1.1" 200 1110 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /sm/b7d7e18e65ee3e8841f92f8a728d5f23edbb06a87a648dcdc05375140959cb3e.map HTTP/1.1" 404 18 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /captcha HTTP/1.1" 200 1135 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/prettify.min.js HTTP/1.1" 200 8173 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/raphael.min.js HTTP/1.1" 200 35782 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/underscore.min.js HTTP/1.1" 200 6386 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/js/jquery.fancybox.pack.min.js HTTP/1.1" 200 9563 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/marked.min.js HTTP/1.1" 200 6210 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/sequence-diagram.min.js HTTP/1.1" 200 34889 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/jquery.flowchart.min.js HTTP/1.1" 200 810 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/editormd.js HTTP/1.1" 200 36118 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:55 +0800] "GET /static/editor.md/lib/flowchart.min.js HTTP/1.1" 200 7353 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 139.226.186.116 - - [31/Aug/2021:14:57:56 +0800] "GET /static/cactus/images/favicon.ico HTTP/1.1" 200 16958 "http://go.phpbloger.com/detail/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" ``` 会发现所有静态资源都会发起一次http请求,这无疑是不可容忍的,试想一下访问一个页面就要发起几十乃至上百个http请求,无疑非常的耗费资源。 ### 处理办法: 当Nginx收到请求时,如果We服务器匹配到资源就直接返回,不需要再由客户端发起请求,只需要简单的配置就可以实现;如下 ``` server { listen 80; server_name go.phpbloger.com; access_log /www/wwwlogs/www.go-day.cn.log; error_log /www/wwwlogs/www.go-day.cn.error.log; #在服务器/www/wwwroot/go-day目录下匹配js,css文件,如果没有找到则使用域名加资源来找 location ~ .*\.(js|css|ico)$ { access_log off; expires 10d; root /www/wwwroot/go-day; try_files $uri @web; } #匹配图片资源,路径根据自身的改 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; access_log off; root /www/wwwroot/admin.go-day.com/public; try_files $uri @web; } location / { try_files /_not_exists_ @web; } location @web { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8080; } } ``` 此时我们再来看下结果 ``` tail -f www.go-day.cn.log ``` 结果为: ``` 139.226.186.116 - - [31/Aug/2021:15:09:02 +0800] "GET /detail/1.html HTTP/1.1" 200 6191 "http://go.phpbloger.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" ``` 看到了吧,此时服务器匹配资源直接返回,一次http请求就结束了。 ### 总结一下: location语法请查看Nginx文档,如果路径配置错误,匹配规则配置错误,都不能获得正确的结果,如果加了root 静态资源路径,http发请求还是会响应N次,那么可以开启日志查看 ``` access_log off; #改为 access_log on; ``` 此时通过 ``` tail -f /www/wwwlogs/www.go-day.cn.error.log ``` 可以查看具体的文件路径是否匹配正确,相应的做出修改即可。