User Tools

Site Tools


network:nginx_usage_and_configuration

This is an old revision of the document!


nginx使用与配置

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)。

在配置文件中,如果一个指令不在任何上下文中,则被视为在主上下文中。eventshttp指令位于主上下文中,server指令位于http中,而location指令位于server中。

#号后的内容被视为注释。

基本应用

配置一个静态内容服务器

网络服务器的一项重要任务是分发文件(例如图像或静态HTML页面)。这里将实现一个示例,其中将根据请求从不同的本地目录提供文件:/data/www(包含HTML文件)和/data/images(包含图像)。这将需要设置http指令内的server块指令,并在其中包含两个location块。配置文件的server块如下:

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

    location /images/ {
        root /data;
    }
}

通常,配置文件可以包括多个server块,这些server块通过它们侦听的端口和服务器名称来区分。 一旦nginx决定了哪个服务器处理请求,它就会根据server块内定义的location指令的参数检查请求中指定的URI。

location块指定的前缀与请求中的URI进行匹配。对于匹配的请求,会将URI添加到root指令中指定的路径,以形成本地文件系统上所请求文件的路径。 如果有多个匹配的location块,nginx将选择前缀最长的location块。 上面的位置块提供了最短的前缀,长度为1,因此,只有在所有其他位置块均未提供匹配项时,才会使用该块。对于以 /images/ 开始的请求,location /也能匹配,但location /images/有更长的前缀,所以匹配后者。

配置一个简单的代理服务器

nginx的一经常的用途是作为代理服务器,这意味着服务器接收请求,将请求传递给被代理的服务器,然后从被代理服务器接收响应并将它们发送给客户端。

这里配置一个基本的代理服务器,该服务器对图像请求从本地目录中的文件提供服务,对所有其他请求发送到被代理的服务器。本示例中,两个服务器将定义在单个nginx实例上。

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

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这里, root指令位于server环境下,在匹配的block块中没有自己的root指令时使用这个路径。

接下来,配置代理服务器:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

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

第一个location块,使用 proxy_pass,并在参数中指定被代理服务器的协议、名称和端口。第二个location块,使用正则表达是匹配所有以.gif, .jpg, .png的URIs 并映射到 /data/images目录中。

nginx在选择 location块是,首先检查指定了前缀的location块,并记住前缀最长的location块;然后检查正则表达式,如果有匹配,则选取这个location块,否则,选取前面记忆的location块。

配置FastCGI代理

nginx可用于将请求路由到FastCGI服务器,该服务器运行各种框架和编程语言(例如PHP)构建的应用程序。

代理FastCGI服务器最基本的Nginx配置包括:使用fastcgi_pass指令而不是proxy_pass指令来代理CGI请求,以及使用fastcgi_param指令来设置传递给FastCGI服务器的参数。在PHP中,SCRIPT_FILENAME参数用于确定脚本名称,而QUERY_STRING参数用于传递请求参数。

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

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

这里,通过FastCGI协议,路由除静态图像外的所有请求到localhost:9000上的被代理服务器。

模块配置

network/nginx_usage_and_configuration.1573899400.txt.gz · Last modified: 2019/11/16 05:16 by zhwiki