См.также
В некоторых языках, например в Go, уже существует встроенный Веб-сервер, который можно использовать в вашем приложении.
См.также
В этом случае не нужно запускать отдельно fcgi сервер,
например spawn-fcgi
.
Примечание
Компиляция go build -o hello.go.fcgi hello.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package main
import (
"fmt"
"net"
"net/http"
"net/http/fcgi"
)
func handler(res http.ResponseWriter, req *http.Request) {
fmt.Fprint(res, "Hello World!")
}
func main() {
// For local machine
// l, _ := net.Listen("unix", "/var/run/go-fcgi.sock")
l, err := net.Listen("tcp", "0.0.0.0:5000") // TCP 5000 listen
if err != nil {
return
}
http.HandleFunc("/", handler)
fcgi.Serve(l, nil)
} |
Запуск go fcgi сервера на 5000 порту (Без компиляции).
go run hello.go
Или скомпилированный файл.
./hello.go.fcgi
Настройка Nginx
1 2 3 4 5 6 7 | # fcgi.nginx
location /fastcgi_hello {
# host and port to fastcgi server
include fastcgi.conf;
fastcgi_pass 172.17.0.89:5000;
} |
Client Request ----> Nginx (Reverse-Proxy) ----> App. FastCGI Server I. 127.0.0.1:5000
либо с балансировкой на несколько серверов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Nginx
upstream myapp1 {
server 127.0.0.1:5000;
server 127.0.0.1:5001;
server 127.0.0.1:5002;
}
server {
listen 80;
location /some/path {
fastcgi_pass http://myapp1;
}
} |
Client Request ----> Nginx (Reverse-Proxy)
|
/|\
| | `-> App. FastCGI Server I. 127.0.0.1:5000
| `--> App. FastCGI Server II. 127.0.0.1:5001
`----> App. FastCGI Server III. 127.0.0.1:5002
Запуск напрямую без CGI и FastCGI.
Примечание
Компиляция go build -o hello.go.http hello.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello World!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8000", nil)
} |
Запуск go http сервера на 8000 порту (Без компиляции).
go run hello.go
Или скомпилированный файл.
./hello.go.http
На такой сервер можно зайти напрямую по адресу http://localhost:8000/, либо настроить обратный прокси сервер:
1 2 3 4 5 | # Nginx
location /some/path/ {
proxy_pass http://127.0.0.1:8000;
} |
Client Request ----> Nginx (Reverse-Proxy) ----> App. HTTP Server I. 127.0.0.1:8000
либо с балансировкой на несколько серверов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Nginx
upstream myapp1 {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
location /some/path {
proxy_pass http://myapp1;
}
} |
Client Request ----> Nginx (Reverse-Proxy)
|
/|\
| | `-> App. HTTP Server I. 127.0.0.1:8000
| `--> App. HTTP Server II. 127.0.0.1:8001
`----> App. HTTP Server III. 127.0.0.1:8002