This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
network:nginx_usage_and_configuration [2019/11/16 04:57] zhwiki [基本应用] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== nginx使用与配置 ====== | ||
- | |||
- | [[http://nginx.org/ | nginx]] [engine x] 是一个 HTTP ,反向代理,邮件代理,通用 TCP/UDP 代理服务器,最初由 **Igor Sysoev** 设计实现。 | ||
- | |||
- | ===== 入门指南 ===== | ||
- | |||
- | ==== 基本概念 ==== | ||
- | |||
- | nginx 有一个主进程和若干工作进程。主进程的主要作用是读取和评估配置信息,以及维护工作进程。工作进程对请求进行实际处理。nginx使用基于事件的模型和依赖于操作系统的机制来有效地在多个工作进程之间分配请求。工作进程的数量在配置文件中定义,可以固定为某个值,也可以根据可用CPU内核的数量进行自动调整。 | ||
- | |||
- | ==== 启动,停止和重新加载配置 ==== | ||
- | |||
- | 要启动nginx,运行可执行文件。启动后,就可以通过使用''-s''参数调用可执行文件来对其进行控制。使用以下语法: | ||
- | |||
- | nginx -s signal | ||
- | |||
- | 其中signal可能是以下之一: | ||
- | |||
- | * stop — 快速关机 | ||
- | * quit — 正常关机,即等待工作进程完成对当前请求的服务后停止nginx进程 | ||
- | * reload — 重新加载配置文件 | ||
- | * reopen — 重新打开日志文件 | ||
- | |||
- | 要获取所有正在运行的nginx进程的列表,可以使用ps实用程序,例如: | ||
- | |||
- | ps -ax | grep nginx | ||
- | |||
- | ==== 配置文件的结构 ==== | ||
- | |||
- | nginx及其模块的工作方式在配置文件中确定。默认情况下,配置文件名为nginx.conf,并放置在目录%%/usr/local/nginx/conf%%、%%/etc/nginx%%或%%/usr/local/etc/nginx%%中。 | ||
- | |||
- | nginx由模块组成,这些模块受配置文件中的指令控制。 指令分为简单指令和块指令。 一个简单的指令由指令名称和参数组成,用空格分隔,并以分号(;)结尾。块指令的结构与简单指令相同,但它不是以分号结尾,而是带有一组用花括号({})括起来的附加指令(instruction)。 如果一个块指令可以包含其他指令(directive),则将其称为上下文(如:events, http, server, location)。 | ||
- | |||
- | 在配置文件中,如果一个指令不在任何上下文中,则被视为在主上下文中。''events''和''http''指令位于主上下文中,''server''指令位于''http''中,而''location''指令位于''server''中。 | ||
- | |||
- | %%#%%号后的内容被视为注释。 | ||
- | |||
- | |||
- | ==== 基本应用 ==== | ||
- | |||
- | === 配置一个静态内容服务器 === | ||
- | |||
- | 网络服务器的一项重要任务是分发文件(例如图像或静态HTML页面)。这里将实现一个示例,其中将根据请求从不同的本地目录提供文件:%%/data/www%%(包含HTML文件)和%%/data/images%%(包含图像)。这将需要设置''http''指令内的''server''块指令,并在其中包含两个''location''块。配置文件的''server''块如下: | ||
- | |||
- | <code> | ||
- | server { | ||
- | location / { | ||
- | root /data/www; | ||
- | } | ||
- | |||
- | location /images/ { | ||
- | root /data; | ||
- | } | ||
- | } | ||
- | </code> | ||
- | |||
- | 通常,配置文件可以包括多个''server''块,这些''server''块通过它们侦听的端口和服务器名称来区分。 一旦nginx决定了哪个服务器处理请求,它就会根据''server''块内定义的''location''指令的参数检查请求中指定的URI。 | ||
- | |||
- | ''location''块指定的前缀与请求中的URI进行匹配。对于匹配的请求,会将URI添加到''root''指令中指定的路径,以形成本地文件系统上所请求文件的路径。 如果有多个匹配的''location''块,nginx将选择前缀最长的''location''块。 上面的位置块提供了最短的前缀,长度为1,因此,只有在所有其他位置块均未提供匹配项时,才会使用该块。对于以 %%/images/%% 开始的请求,%%location /%%也能匹配,但%%location /images/%%有更长的前缀,所以匹配后者。 | ||
- | |||
- | === 配置一个简单的代理服务器 === | ||
- | |||
- | nginx的一经常的用途是作为代理服务器,这意味着服务器接收请求,将请求传递给被代理的服务器,然后从被代理服务器接收响应并将它们发送给客户端。 | ||
- | |||
- | 这里配置一个基本的代理服务器,该服务器对图像请求从本地目录中的文件提供服务,对所有其他请求发送到被代理的服务器。本示例中,两个服务器将定义在单个nginx实例上。 | ||
- | |||
- | 首先,在nginx配置文件中添加一个包含以下内容的''server''块来定义被代理服务器: | ||
- | |||
- | <code> | ||
- | server { | ||
- | listen 8080; | ||
- | root /data/up1; | ||
- | |||
- | location / { | ||
- | } | ||
- | } | ||
- | </code> | ||
- | |||
- | 这里, ''root''指令位于''server''环境下,在匹配的''block''块中没有自己的''root''指令时使用这个路径。 | ||
- | |||
- | 接下来,配置代理服务器: | ||
- | |||
- | <code> | ||
- | server { | ||
- | location / { | ||
- | proxy_pass http://localhost:8080/; | ||
- | } | ||
- | |||
- | location ~ \.(gif|jpg|png)$ { | ||
- | root /data/images; | ||
- | } | ||
- | } | ||
- | </code> | ||
- | |||
- | 第一个''location''块,使用 ''proxy_pass'',并在参数中指定被代理服务器的协议、名称和端口。第二个''location''块,使用正则表达是匹配所有以%%.gif, .jpg, .png%%的URIs 并映射到 %%/data/images%%目录中。 | ||
- | |||
- | nginx在选择 ''location''块是,首先检查指定了前缀的''location''块,并记住前缀最长的''location''块;然后检查正则表达式,如果有匹配,则选取这个''location''块,否则,选取前面记忆的''location''块。 | ||
- | |||
- | === 配置FastCGI代理 === | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== 模块配置 ===== | ||
- | |||
- | |||