原文:http://nginx.org/en/docs/beginners_guide.html
nginx安装请百度或查看官网:https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/
本文介绍如何启动停止nginx,加载它的配置,解释配置文件结构,并介绍如何去搭建一个提供静态内容的nginx服务器,以及怎样配置 nginx 作为一个代理服务器。
控制运行的NGINX进程
NGINX 启动后,有一个主进程(master process)和一个或多个工作进程(worker process),主进程的作用主要是读入和检查NGINX的配置信息,以及维护工作进程;工作进程才是真正处理客户端请求的进程。工作进程个数由nginx.conf
配置文件中的worker_processes
指令定义,可以设置为固定数字,也可以根据CPU核数自动调整。nginx.conf
配置文件一般在/etc/nginx
目录。
可以通过以下这些命令来控制 NGINX:
nginx -s [ stop | quit | reopen | reload ]
其中:
nginx -s stop
: 强制停止NGINX,不管工作进程当前是否正在处理用户请求,都会立即退出。nginx -s quit
:“优雅地”退出NGINX,工作进程会将当前正在处理的请求处理完毕后,再退出。nginx -s reload
:重载配置信息,而无需重新启动nginx。nginx -s reopen
:重新打开日志文件。
配置文件结构
nginx由许多模块(modules)组成,这些模块由配置文件中的指令(directives)控制,指令分为简单指令和块指令(block directives)。
简单指令举例:
user nobody;
error_log logs/error.log notice;
worker_processes 1;
块指令举例:
http {
# Configuration specific to HTTP and affecting all virtual servers
server {
# configuration of HTTP virtual server 1
location /one {
# configuration for processing URIs starting with '/one'
}
location /two {
# configuration for processing URIs starting with '/two'
}
}
}
server
块指令定义了一个虚拟服务器去处理请求,其中的location
指令定义了如何处理指定的URI。
如果块指令中包含其他指令,这个块指令称为上下文(context)。一般只在最外层的块指令称为顶级块指令,顶级块指令处于main
上下文中。顶级块指令包含4种:
- events – 处理一般连接
- http – 处理HTTP 流量
- mail – 处理邮件流量
- stream – 处理TCP 和 UDP 流量
提供静态内容
Web服务器的一个重要任务是提供文件(例如图像或静态HTML页面)。
接下来我们实现一个例子:从本地目录/data/www
提供HTML文件(例如目录中存放一个index.html,请求URI中不包含具体文件时默认提供index.html文件),并从本地目录/data/images
提供图像文件。
修改nginx配置文件,新增一个http块指令:
http {
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}
通常,http上下文中可以包括多个server块,监听不同的端口和服务器名。 一旦 nginx 决定哪个server处理请求,它会根据在 server 块级指令中定义好的 location 指令的参数,来匹配请求 URI。
上述配置已经是服务器的配置,它监听默认端口80,并可以在本地计算机访问http://localhost/
。
上述例子中的location块指定了请求URI地址的前缀(/
和/images/
),如果存在多个匹配的前缀,选择策略是最长匹配。对于请求URI匹配到了某前缀,就将这个请求URI拼接到root指令中指定的路径后,以形成本地文件系统上所请求文件的路径。例如对于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的一个常见用途是将其设置为代理服务器,代理服务器转发客户端请求给被代理的服务器。
我们将配置一个基本代理服务器,它使用来自本地目录的文件处理图像请求,并将所有其他请求发送到被代理的服务器。
首先配置一个被代理的服务器。
server {
listen 8080;
root /data/up1;
location / {
}
}
这将是一个监听端口8080的简单服务器(未指定listen指令默认监听80端口)并将所有请求映射到本地文件系统上的/data/up1
目录。 请注意,这时的root指令放在sever上下文中,当location块不包括自己的root指令时,使用该root指令。
接下来,配置一个代理服务器。
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
第一个location指令中的proxy_pass指令定义被代理的服务器。
第二个location指令的参数是一个正则表达式,以~
开头。匹配以.gif
、.jpg
或.png
结尾的所有URI。相应的请求将映射到/data/images
目录。
当nginx选择一个location块来处理请求时,它首先检查指定前缀的location指令,记住具有最长前缀的location,然后按顺序检查正则表达式,如果有正则表达式匹配,则nginx选择此location,否则选择之前记住的那个location。