Nginx简介

Nginx是一个高性能的HTTP和反向代理服务器,邮件代理服务器和通用TCP/UDP代理服务器,最初由Igor Sysoev用C编写的,来自俄罗斯。Nginx经常作为负载均衡服务器使用,CPU、内存占用少,并发能力很强。Nginx有自己的函数库,除了gzip模块需要zlib库、rewrite模块需要 pcre库、ssl功能需要openssl库,其他标准模块的只需要C的库。7*24小时不间断运行,极少的bug让Nginx越来越受到欢迎。


Nginx

安装

我们还是以Ubuntu 14.04.5 LTS为例,很简单:

1
2
$ apt-get update
$ apt-get install nginx

运行

Nginx默认安装到/usr/local/nginx下,配置文件默认安装到/etc/nginx下。

nginx由模块组成,这些模块由配置文件中指定的指令来进行控制。 指令分为简单指令和块指令。 一个简单指令包含名称和参数,以空格分隔,以分号;结尾。块指令具有与简单指令相同的结构,用大括号{}内的一组指令来指定,如:events,http,server,location等,下面就是一个示例。

在Nginx.conf配置文件中的http -> server部分进行如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name localhost;

location / {
root html;
index index.html index.htm;
}

# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

要启动nginx,直接在命令行输入nginx就可以。 一旦nginx启动,它可以通过使用-s参数进行一些控制操作如:

  • nginx -s stop — 快速停止运行。
  • nginx -s quit — 正常停止运行。
  • nginx -s reload — 重新加载配置文件。
  • nginx -s reopen — 重新打开日志文件。

可以看看nginx是否已经运行了:

1
$ ps ax | grep nginx

如果一切正常,这时就可以通过通过访问 http://localhost:80/index.html 页面来查看Nginx的欢迎页面。


Nginx

当然如果你想彻底干掉nginx也可以用kill命令:

1
$ kill -s QUIT 1628  #假设nginx.pid是1628。

最简单的Web服务器配置

一个Web服务器的重要任务是提供各种文件,例如图像或静态的HTML页面。 我们来进行一个简单的示例配置。根据请求,文件将由两个不同的本地目录来提供:/data/www主要是各种文件包括HTML文件和/data/images主要是各种图像来。 这就需要我们对配置文件进行编辑,并在http块内设置server中的内容。

首先,创建/data/www目录,并将需要提供的任何文本内容包括index.html文件放在里面,再创建/data/images目录并在里面放一些图像。

然后我们打开配置文件。 默认配置文件已包括服务器块的几个示例,大多是注释掉的。 现在注释掉所有这些块并启动一个新的server块:

1
2
3
4
5
6
7
8
9
10
11
12
http {

server {
location / {
root /data/www;
}

location /images/ {
root /data;
}
}
}

这是一个最简单的服务器的工作配置,它监听标准端口80,并且可以在本地计算机上访问http://localhost/。如果有以/images/开头的URI的请求,服务器响应后从/data/images目录发送文件。 例如,响应 http://localhost/images/example.png 请求,nginx将发送/data/images/example.png文件。 如果这样的文件不存在,nginx将发送一个指示404错误的响应。 URI不以/images/开头的请求都将映射到/data/www目录里。 例如,响应 http://localhost/some/example.html 请求,nginx将发送/data/www/some/example.html文件。

要应用新配置,重新启动nginx的主进程:

1
$ nginx -s reload

nginx的另外一个常见用途是设置为代理服务器,这意味着接收请求的服务器,将它们传递到代理服务器,检索来自它们的响应,并将它们发送到客户端。

我们将配置一个最简单的代理服务器,该服务器向本地目录中的文件提供图像请求,并将所有其他请求发送到代理服务器。 在这个例子里,两个服务器都只使用一个nginx实例。

首先,通过添加一个server块到nginx的配置文件中定义代理服务器,配置文件包含以下内容:

1
2
3
4
5
6
7
server {
listen 8080;
root /data/up1;

location / {
}
}

这是一个服务器,它侦听端口8080,并将所有请求映射到本地文件系统上的/data/up1目录。 创建此目录并将index.html文件放入其中。 然后,使用上一节中的服务器配置,并将其修改为代理服务器配置。 在第一个location块中,将proxy_pass指令与参数中指定的代理服务器的协议,名称和端口(在我们的示例中为http:// localhost:8080)放在一起:

1
2
3
4
5
6
7
8
9
server {
location / {
proxy_pass http://localhost:8080;
}

location /images/ {
root /data;
}
}

我们在可以再修改一下第二个location块,它目前将带有/images/的请求映射到/data/images目录下的文件,我们可以使其与文件扩展名请求相匹配,用正则表达式修改一下即可。 修改后的location块如下所示:

1
2
3
4
5
6
7
8
9
server {
location / {
proxy_pass http://localhost:8080;
}

location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}

这样就配置好了,这个服务器将过滤以.gif,.jpg或.png结尾的请求,并将它们映射到/data/images目录,并将所有其他请求传递到上面配置的代理服务器。

更多的配置学习可以看我们的免费课程,nginx入门:

http://www.hubwiz.com/course/54f031e2f8638715e4cb8e0c/