@i-zemlya
nginx golang mysql postgresql https://i-zemlya.ru

Nginx, и простое Golang приложение?

Пытаюсь написать простое приложение на GO
package main

import (
    "net"
    "net/http"
    "net/http/fcgi"
    "os"
)

func main() {
    s := "/tmp/go.sock"
    os.Remove(s)
    l, err := net.Listen("unix", s)
    if err != nil {
        os.Exit(2)
    }
    fs := new(FCgiServer)
    fcgi.Serve(l, fs)
}

type (
    FCgiServer struct {}
)

func (this *FCgiServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    defer r.Body.Close()
    defer func() {
        if err := recover(); err != nil {
            w.WriteHeader(500)
            w.Write([]byte(`500 Server error`))
        }
    }()
    w.Write([]byte(`OK Server<br>text`))
}

конфиг для nginx:
server {
    listen 80;
    root /home/username/go/src/github.com/i-zemlya/cli/public;
    location ~ {
        try_files $uri = 404;
        fastcgi_pass unix:/tmp/go.sock;
        include fastcgi_params;
    }
}

в логах nginx`a получаю ошибки:
2019/04/04 12:00:00 [error] 444#444: *1 rewrite or internal redirection cycle while internally redirecting to "404", client: 127.0.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", host: "127.0.0.1:80"
2019/04/04 12:00:00 [error] 444#444: *2 rewrite or internal redirection cycle while internally redirecting to "404", client: 127.0.0.1, server: 127.0.0.1, request: "GET /favicon.ico HTTP/1.1", host: "127.0.0.1:80", referrer: "http://127.0.0.1:80/"
  • Вопрос задан
  • 3473 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Во-первых, почему такой странный location? Должен быть location /.
Во-вторых, try_files тут не нужен.

В итоге получается примерно так:
server {
    listen 80;
    root /home/username/go/src/github.com/i-zemlya/cli/public;
    location / {
        fastcgi_pass unix:/tmp/go.sock;
        include fastcgi_params;
    }
    location /static/ {
        # раздаём картинки из $root/static/
    }
}


Все картинки, скрипты, стили и прочую статику складываем в папку
/home/username/go/src/github.com/i-zemlya/cli/public/static/
и они будут доступны по адресу /static/.....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы