如何使用Apache部署Golang应用

如何使用Apache部署Golang应用 我已经尝试了一整天,但始终找不到解决方法。我需要完成的任务是:

A) 如何配置我的Apache"页面"或根目录下的子目录
B) 服务器配置完成后,如何将Apache请求转发到我的Golang应用程序

但仅仅配置Apache服务器本身就是一个巨大的难题。

3 回复

是的,我之前都看过这两者,但我对Apache完全是个新手,我觉得缺乏经验成了我的障碍,所以想了解是否有人知道更具体或更详细的方法。无论如何,非常感谢。

更多关于如何使用Apache部署Golang应用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


快速搜索后,我找到了这些关于您问题的宝贵信息:Go 与 Apache,还是两者兼用?

关于 Apache 反向代理配置:https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html

以下是针对您问题的专业解决方案。Golang应用通常作为独立服务运行,而Apache作为反向代理将请求转发给该服务。以下是具体配置步骤和示例代码:

A) 配置Apache虚拟主机或子目录

  1. 启用必要的Apache模块
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl restart apache2
  1. 配置虚拟主机或目录代理(以Ubuntu为例,配置文件位于/etc/apache2/sites-available/000-default.conf):
<VirtualHost *:80>
    ServerName yourdomain.com

    # 如果部署在根目录
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    # 如果部署在子目录(例如 /app)
    # ProxyPass /app http://localhost:8080/
    # ProxyPassReverse /app http://localhost:8080/
</VirtualHost>

B) 设置Golang应用并配置Apache转发

  1. Golang应用示例代码(保存为main.go):
package main

import (
    "fmt"
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Golang应用通过Apache代理成功运行!")
}

func main() {
    http.HandleFunc("/", handler)
    log.Println("服务启动在 :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}
  1. 编译并运行Golang应用
go build main.go
./main
  1. 重启Apache服务
sudo systemctl restart apache2

完整配置示例

如果使用子目录/myapp,Apache配置调整为:

<VirtualHost *:80>
    DocumentRoot /var/www/html

    ProxyPreserveHost On
    ProxyPass /myapp http://localhost:8080/
    ProxyPassReverse /myapp http://localhost:8080/
</VirtualHost>

Golang代码中处理子目录路由:

http.HandleFunc("/myapp/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "通过子目录/myapp访问")
})

验证方法:访问http://yourdomain.com(根目录)或http://yourdomain.com/myapp(子目录),应显示Golang应用的响应。确保Golang应用在8080端口运行,且防火墙允许该端口通信。

回到顶部