Articles of 走

如何用nginx运行一个Go http服务器

我有一个简单的用Go编写的HTTP服务器。 在开发中它工作正常,但对于生产,这个服务器一次处理100个请求,我需要一个适当的Web服务器,如Nginx。 我怎么把它放在nginx的后面?

如何使用nginx和Go来创build子域?

我有一个简单的使用http.ListenAndServe服务内容的去程序。 我使用nginx来为一个服务器上的多个应用程序提供服务,我也想把它用于go程序。 我试过寻找信息,但是我发现所有使用FastCGI或node.js的人都可以使用它。 纯粹的Go和nginx可以做到吗? 我知道如何使用nginx与子域,但不是一个Go程序。

服务Go Webapps在生产中

在静态内容,灵活性和安全性方面,处理生产中的Go Web应用程序的最佳方式是什么? 我应该从一个完全缓冲的反向代理如nginx服务吗? 如果是这样,我应该让nginx处理静态内容? 我是否应该使用ServeMux和FileServer来提供Go应用程序中的静态内容,就像这里所build议的一样: 从根服务主页和静态内容 ? 我需要在生产中使用像NaCL或AppArmor一样的沙盒吗?

去(lang)app:nginx反向代理VS nginx主机

我已经阅读了关于go和nginx的一些问题 ,但我没有find任何答案。 我认为(我不是专家),使用nginx作为反向代理在net/http转发服务器是不同的直接托pipe你的应用与nginx。 吼我,如果我错了,好吗? 问题出现在我面前,因为我需要开发一个应用程序(可能只是为了学习新的东西),并且完全控制Web服务器,尤其是在用来回答请求的工作人员数量方面。 所以,这里来的问题: 是否有可能在nginx上直接托pipe一个去应用程序,或者它只是提供静态文件的nginx(如果答案是“否”,那么第二个问题没有多大意义)? 上述两种方法之间的主要区别是什么,不同的方法是否会影响configuration? 我很害怕告诉nginx:“好的,请使用8名工作人员”,并且不告诉我们的内部networking服务器…会发生什么? 非常感谢你提前

Golang JSON编码器和nginx代理缓冲

我正在使用具有JSON API的golang的web应用程序后端,它位于nginx 1.8.0的后面。 Nginxconfiguration: server { listen 80; server_name someserver.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8080; # The go server handles the chunking, so with proxy_buffering on it messes up the response proxy_buffering off; } } 我处理路线如下: router.GET("/api/cases", checkAuth(api.GetAllCases)) 我的checkAuth中间件看起来像: func checkAuth(h httprouter.Handle) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, […]

无法让go.net/websocket在nginx后面工作

我无法让go.net/websocket在nginx后面工作。 它工作,如果应用程序直接访问,但与nginx,我收到一个EOF错误。 我究竟做错了什么? Nginx版本:1.5.10 这是我的nginxconfiguration。 location /wstest/ { proxy_pass http://localhost:7415/; proxy_http_version 1.1; proxy_set_header Upgrade "websocket"; proxy_set_header Connection "Upgrade"; proxy_buffering off; } 转到代码: func main() { http.HandleFunc("/", home) http.Handle("/sock", websocket.Handler(pingpong)) http.ListenAndServe(":7415", nil) } func home(w http.ResponseWriter, r *http.Request) { homeTmpl.Execute(w, nil) } func pingpong(conn *websocket.Conn) { var msg string if err := websocket.Message.Receive(conn, &msg); err != […]

去:os.Stat ModTime显示不正确的值

我试图在整个操作系统中一致地获取文件修改时间。 我正在创build一个文件,然后使用info := os.Stat(file) ,然后是info.ModTime() 。 在Windows上,这看起来如预期的那样 – 文件修改时间等于现在。 在Linux上,它看起来像是过去创build的文件(过去是12秒)。 我应该提到我的Linux是一个虚拟机,使用这个stream浪箱 。 完整的脚本及其结果如下。 package main import ( "fmt" "io/ioutil" "os" "time" ) func main() { fmt.Println("Started :", time.Now()) ioutil.WriteFile("somefile.txt", []byte("hello"), 0666) fi, _ := os.Stat("somefile.txt") fmt.Println("ModTime :", fi.ModTime()) fmt.Println("Now :", time.Now()) fmt.Println("Time Since:", time.Since(fi.ModTime()).Seconds()) } Windows结果(如预期) Started : 2014-10-16 16:15:54.3861206 +0300 IDT ModTime : 2014-10-16 […]

在Linux中find会话负责人或进程组的控制TTY的方法是什么?

这不是一个语言特定的问题,虽然我现在正在使用golang。 我正在编写一个命令行程序,我想find程序的真实UID(realUID,我的意思是,如果用户做了一个sudo,那么有效的uid会改变,但是真正的uid将和用户的。) 我读过,发现控制tty的所有者是find这个的一种方法,在linux上,我们可以使用“tty”命令,它将返回连接到STDINPUT的terminal的文件名。 检查它的所有权是一种方法。 另一种方法是find会议领导者进程,以及谁拥有它。 我尝试了第一种方式,使用 cmdOut []byte cmdOut, _ = exec.Command("tty").Output() 但是当我从我的shell运行程序时,它返回的输出not a tty 。 机会是,这可能会得到执行在一个单独的分支shell从tty分离(再次,只是一个疯狂的猜测)。 我尝试了使用os.Getppid()来获得父pid的第二种方式,但实际上,在运行sudo的时候,它又分叉了,它给出了sudo进程的父pid( 16031在下面的例子中,而我想抓住3393 )。 (从pstree输出粘贴进程层次结构) /usr/bin/termin(3383)-+-bash(3393)—sudo(16031)—Myprogram(16032) ,所以我无法获得会话领导过程,但只是父母的PID。 有人可以指导我如何使用这种方法来实现此function?

如何保持Go web服务运行

我在一台linux机器上写了一些web服务,所以Go可执行文件需要继续运行 这是最好的办法吗? 我应该在Linux机器上设置Go可执行文件作为服务吗? 非常感谢

生成核心转储

从时间到我的Go程序崩溃。 我尝试了几件事情来获得为这个程序生成的核心转储: 在系统上定义ulimit,为了以防万一,我尝试了ulimit -c unlimited和ulimit -c 10000 。 启动我的恐慌计划后,我没有核心转储。 我还在我的程序中添加了recover()支持,并且在发生恐慌的情况下添加了用于login到syslog的代码,但是在syslog中什么都没有。 我现在已经没有想法了。 我一定忽略了一些东西,但是我没有find什么帮助,将不胜感激。 谢谢 ! 🙂