文档章节

Nginx官方推出的web应用服务器-nginx unit

qlee
 qlee
发布于 2018/04/17 21:18
字数 751
阅读 1341
收藏 10

近日Nginx官方发布了nginx unit的1.0版本,作为靠Nginx混饭吃的一员,免不了先体验一把。

unit是一个动态的web应用服务器,采用了类似php-fpm的机制,不过支持Python/Go/Perl/Ruby/PHP等多种语言,后面也会增加对Java/Javascript的支持。

配置源码

clone源码仓库

$ git clone https://github.com/nginx/nginx.git

进入目录执行configure

$ ./configure

配置go模块

这里配置对go的支持,其他的语言配置类似,可参考官方文档

首先要安装golang环境,可以在这里下载相应的二进制包安装。安装过的可以跳过。

$ wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
$ tar -xf go1.10.1.linux-amd64.tar.gz -C /usr/local/
$ export PATH=$PATH:/usr/local/go/bin

在用户的目录下新建文件夹go作为go的工作目录,并设置环境变量GOPATH

$ mkdir $HOME/go
$ export GOPATH=$HOME/go

配置unit对golang的支持,主要工作是为go引入了 "nginx/unit"包,用于在go中调用

$ ./configure go
$ make go-install

创建go程序

$ cd $GOPATH
$ mkdir src/unit-demo
$ vim ./src/unit-demo/main.go

main.go中的代码如下

package main

import (
    "fmt"
    "net/http"
    "nginx/unit"
)

func handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Add("Content-Type", "text/plain");

    fmt.Fprintf(w, "Method : %s\n", r.Method)
    fmt.Fprintf(w, "URL    : %s\n", r.URL.Path)
    fmt.Fprintf(w, "Host   : %s\n", r.Host)
}

func main() {
    http.HandleFunc("/", handler)
    unit.ListenAndServe("8000", nil)
}

这里和普通的go实现的http服务器最大的区别是调用unit.ListenAndServe而不是http.ListenAndServe。编译后的程序在作为单独的程序使用时,unit.ListenAndServe和http.ListenAndServe完全相同。通过unit启动时,uint.ListenAndServe的参数被忽略,真正的监听端口通过环境变量从unit的主程序中获取,而不是使用参数里的8000端口。这里也可以不用"8000"而用其他的端口。

编译安装go程序

$ go install unit-demo

编译执行unit

$ cd /path/to/unit
$ make
$ ./build/unitd

配置unit

unit貌似配置项很少,而且只能通过unix socket配置 这里为了简单用curl来配置

新建一个unit.config的文本文件,输入下面的配置

{
    "applications": {
		"example_go": {
			"type": "go",
			"executable": "/home/kenan/go/bin/unit-demo"
		}
	},
	"listeners": {
		"*:8500": {
			"application": "example_go"
		}
	}
}

配置里listeners表示监听地址及对应的处理程序,applications对应所有的处理程序的信息,type为go表示是golang程序,executable为可执行文件路径。对于8500端口的HTTP请求,将有前面生成的unit-demo程序处理

通过curl将unit.config文件内容传递给unitd程序,返回Reconfiguration done表示配置成功。

$ curl -X PUT -d @unit.config --unix-socket control.unit.sock http://localhost/
{
	"success": "Reconfiguration done."
}

用curl访问,可以看到返回的结果。

$ curl http://localhost:8500/t
Method : GET
URL    : /t
Host   : localhost:8500

总结

比起Nginx,unit更像是一个进程管理器。以往对于多个后端的应用程序需要分别管理,如今unit一个程序就可以实现。如果一个项目使用了PHP/Python/Go/Ruby等多种语言,用unit来管理一切貌似也是不错的选择。

参考链接

Nginx Unit

© 著作权归作者所有

qlee

qlee

粉丝 10
博文 31
码字总数 40447
作品 0
闵行
程序员
私信 提问
加载中

评论(1)

沉默的幻想师
沉默的幻想师
看了你的描述 懂一点了。
Nginx获C轮融资4300万美元

开源 Web 服务器 Nginx公司宣布获得由高盛领投的 4300 万美元的 C 轮融资, 融资后估值总额将达到 1.03 亿美元。 Nginx采用开源方式,参与Linux生态系统,提供用于开发和交付最新应用程序的技...

marsdream
2018/06/21
0
0
NGINX Unit,多语言/动态配置的Web应用服务器

NGINX Unit是一种动态的Web应用服务器,它被设计成可运行多种语言的应用程序。 Unit是轻量级,支持多语言的,并可通过API动态配置的。 服务器的设计允许根据工程或操作的需要来重新配置特定的...

无名码农
2017/09/07
0
0
Nginx Unit 与 LEMUR 新架构

从 LAMP、LEMP 到 LEMUR 从 20 世纪 90 年×××始,LAMP 架构成为了部署 Web 应用程序最有名和最值得信赖的方法。LAMP 是 Linux,Apache,MySQL和 PHP 的首字母缩写。直至今日,Apache 经过...

xjtuhit
2018/04/17
0
0
devops| nginx unit 入门小试

date: 2018-5-14 11:20:01 title: devops| nginx unit 入门小试 description: nginx unit 入门小试以及 PHPer 的一点浅见 上周几乎被 nginx unit 的消息给霸屏了, 大致看了看这个产品的 野心...

daydaygo
2018/05/14
0
0
动态 Web 应用服务器 Nginx Unit 1.0 正式发布

Nginx Unit 1.0 正式发布了。NGINX Unit 是一个动态的网络应用服务器,它的设计初衷就是可运行多种编程语言的。通过 API 可以轻巧,多面化的动态配置 Unit。当工程师或运维人员有需要时,可以...

达尔文
2018/04/13
5.3K
13

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件34-磁盘容量统计

一、前言 磁盘容量统计控件,说白了,就是用来统计本地盘符占用的容量,包括但不限于已用空间、剩余空间、总大小、已用百分比等,其中对应的百分比采用进度条显示,该进度条的前景色和背景色...

飞扬青云
29分钟前
2
0
tensorflow 安装

https://github.com/tensorflow/tensorflow/releases/tag/v1.14.0 https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=......

mbzhong
31分钟前
1
0
Cross-Site Scripting (XSS)

Cross-Site Scripting (XSS) What Is XSS? Cross-site scripting (XSS) is a type of web application vulnerability that enables the attackers to inject client-side script into web pa......

两广总督bogang
33分钟前
1
0
Java - IO框架

1个字节(byte)由8bit组成 GB2312或GBK编码:1个英文字母1字节,1个汉字2字节 UTF-8编码:1个英文字母1字节,1个汉字3-4字节 UTF-16编码:1个英文字母2字节,1个汉字3-4字节(Unicode扩展区的一...

丰田破产标志
42分钟前
1
0
龙芯电脑安装debian 10

下载安装器 由于debian的内核不能直接使用,因此我们只需要下载initrd.gz和boot.cfg即可。 https://mirrors.tuna.tsinghua.edu.cn/debian/dists/buster/main/installer-mips64el/current/ima...

gugudu
44分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部