@linuxoid_inrus

Как реализовать свой API на домене?

Есть код на голанге, слушающий порт ****, но обращаться к нему можно только по айпи машины. Можно ли сделать, чтобы я мог обращаться на свой домен? Вместо ip:port/user/1 domain.com/user/1

package main

import (
	"fmt"
	"github.com/gorilla/mux"
	"io/ioutil"
	"math/rand"
	"net/http"
	"os"
	"strings"
	"time"
)

func main() {

	router := mux.NewRouter()

	router.HandleFunc("/save/{text}", AppendText)
	http.Handle("/", router)
	http.ListenAndServe(":1234", nil)


}

func AppendText(w http.ResponseWriter, r *http.Request){
	w.Header().Set("Access-Control-Allow-Origin", "*")
	vars := mux.Vars(r)

	f, err := os.OpenFile("file.txt", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
	if err != nil {
		panic(err)
	}

	defer f.Close()

	if _, err = f.WriteString(vars["text"] + "\n"); err != nil {
		panic(err)
	}

}
  • Вопрос задан
  • 371 просмотр
Пригласить эксперта
Ответы на вопрос 2
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Можно.

Регистрируете домен и прописываете в его настройках IP вашего сервера.

Далее у вас два варианта.

Если у вас всего один сервис на сервере - можете слушать сразу 80й порт, вместо 1234.
И это уже заработает.

Если доменов на сервере будет много -
- cтавите веб сервер, например nginx, который слушает 80й порт на вашем IP
- настраиваете в nginx виртуальный хост для нужного вам домена и там прописываете, чтобы запросы, перенаправлялись на ваш сервис IP:порт(1234)

Пример конфига nginx (виртуальный хост)

server {
    listen *:80;
    server_name тут_ваш_домен;

    location / {
        proxy_pass http://тут_ip_вашего_сервиса:1234;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Ответ написан
@Klars
встречный вопрос по коду
в коде вижу panic()

Почему в main не отлавливается через recovery()? Либо так и задумано?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы