ngnix 一 入门指南

翻译自:ngnix--Beginner Guide

ngnix入门指南


本指南给出了nginx的基本介绍,并介绍了可以使用它的完成一些简单任务。 它假定nginx已经安装在读者的机器上。 如果不是,请参阅安装nginx页面。 本指南介绍如何启动和停止nginx,重新加载其配置,解释配置文件的结构,并介绍如何设置nginx以提供对静态内容的访问支持,如何配置nginx作为代理服务器,以及如何将其与 FastCGI应用程序对接起来。
nginx有一个主进程和几个工作进程。 主进程的主要目的是读取和评估配置,并维护工作进程。 工作进程做请求的实际处理。 nginx采用基于事件的模型和OS依赖的机制,在工作进程之间有效地分配请求。 工作进程的数量在配置文件中定义,对于给定配置可以是固定的,也可以根据可用CPU核心的数量自动调整(请参阅 worker_processes)。
nginx及其模块的工作方式在配置文件中确定。 默认情况下,配置文件名为nginx.conf,并放在目录/ usr / local / nginx / conf,/ etc / nginx或/ usr / local / etc / nginx中。

1. 启动,停止,重载配置文件

  1. 启动

要启动nginx,请运行可执行文件。 一旦nginx启动,它可以通过使用-s参数调用可执行文件来控制。 使用以下语法:

nginx -s signal

其中signal可以是以下之一:

  • stop - 快速关机
  • quit - 正常关机
  • reload - 重新加载配置文件
  • reopen - 重新打开日志文件

例如,在停止nginx进程前,等待工作进程完成当前请求,可以执行以下命令:

nginx -s quit
这个命令应该在启动nginx的那个用户下执行。

如果想要配置文件中所做的更改立即生效,需要执行重新加载配置的命令或重新启动ngnix。要重新加载配置,请执行:

ngnix -s reload

一旦主进程接收到要重载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果上述步骤成功,主进程将启动新的工作进程,并向旧工作进程发送消息,请求它们关闭。 否则,主进程会回滚更改,并继续使用旧配置。 旧工作进程接收到关闭的命令,停止接受新连接并继续服务当前已接受的请求,直到所有这样的请求被服务。 之后,老工作进程退出。
也可以使用Unix工具(如kill实用程序)发送信号给nginx进程。 在这种情况下,信号被直接发送到具有给定进程ID的进程。 默认情况下,nginx主进程的进程ID被写入目录/ usr / local / nginx / logs或/ var / run中的nginx.pid。 例如,如果主进程ID为1628,要发送QUIT信号导致nginx的正常关闭,请执行:

kill -s QUIT 1628

为了获得所有正在运行的nginx进程的列表,可以使用ps实用程序,例如,以下列方式:

ps -ax | grep ngnix

更多关于发送信号给ngnix的信息,请参见Controlling ngnix

2. 配置文件的结构

例子,如下:

#user  nobody;
worker_processes  1;
#error_log  logs/error.log  info;
#pid logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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

解释:nginx由模块组成,这些模块由配置文件中指定的指令控制。 指令分为简单指令和块指令。一个简单的指令包含名称和参数,以空格分隔,以分号(;)结尾。块指令具有与简单指令相同的结构,但是以用大括号({})包围的一组附加指令结束。如果块指令的大括号内有其他指令,则它被称为上下文(例如:events, http, server, and location)。
在配置文件中,不包含在任何上下文中的指令被认为是在主上下文中的指令。 events 和 http 指令驻留在主上下文中,server 位于 http 中,而 location 在 sever 中的位置。
#符号开头的是注释。

3. 静态内容服务

一个Web服务器的重要任务是对外提供文件(例如图像或静态HTML页面)服务。我们将实现一个示例,根据请求,文件将从不同的本地目录:/data/ www(可能包含HTML文件)和 /data/ images(包含图像)提供。 这将需要编辑配置文件:在 http 块中有一个 server 块,这个 server 块又包含了两个 location 块。

  1. 创建 /data/www 目录,并将包含任意文本内容的index.html文件放入其中,并创建 /data/images目录并在其中放置一些图像。
  2. 打开配置文件。 默认配置文件已经包括 server 块的几个示例,大多是被注释掉的语句。现在注释掉所有这些块并开始编译一个新的 server 块:
http {
    server {
    }
}

通常,配置文件可以包括若干 server 块,这些块通过其监听的端口和 server names 来区分。 一旦nginx决定哪个服务器处理请求,它将根据在服务器块中定义的位置指令的参数测试请求头中指定的URI。
将以下 location 块添加到 server 块:

location / {
    root /data/www;
}

此 location 块指定与请求中的URI相匹配的“/”前缀。 对于匹配的请求,URI将被添加到根指令中指定的路径,即 /data/www,以形成本地文件系统上被请求的文件的路径。 如果有几个匹配的 location 块,nginx选择具有最长前缀的那个。上面的位置块提供最短的前缀,长度为1,因此只有当所有其他 location 块不能提供匹配时,才使用该块。
3. 添加第二个 location 块:

location /images/ {
    root /data;
}

它将匹配以 /images/(location/ 也能匹配这样的请求,但较/images/更短,这里是长匹配优先)开始的请求。
server 块的最终配置应如下所示:

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错误的响应。不是以 / images / 开头的 URI 请求将映射到 /data /www目录下。 例如,响应http://localhost/some/example.html请求,nginx将发送 /data/www/some/example.html 文件。
要应用新配置,请启动nginx(如果尚未启动)或通过执行以下命令向nginx的主进程发送重新加载信号:

ngnix -s reload
如果某些东西不能按预期工作,您可以尝试在/usr/local/nginx/logs或/var/log/nginx目录中的access.log和error.log文件中找出原因。

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

nginx的一个常见用途是将其设置为代理服务器(接收请求并将它们传递到被代理的服务器,检索来自被代理服务器的响应,并将响应发送到客户端)。
我们将配置一个基本代理服务器,该服务器读取本地目录中的文件来响应图片请求,并将处图片请求以外的其他请求(request)转发到代理服务器上。 在此示例中,这两个服务器都将在一个nginx实例上定义。

  1. 首先,通过向nginx的配置文件中添加一个 server 块来定义代理服务器,该配置文件包含以下内容:
server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这将是一个简单的服务器,侦听端口8080(以前,未指定listen指令,因为使用标准端口80),并将所有请求映射到本地文件系统上的/ data / up1目录上。 创建此目录并将 index.html 文件放入其中。 注意,root指令放在了 server 上下文中。 Such root directive is used when the location block selected for serving a request does not include own root directive.
2. 使用上一节中的服务器配置,并将其修改为代理服务器配置。 在第一个 location 块中,将 proxy_pass 指令与参数中指定的代理服务器的协议(http),名称和端口(在我们的示例中为http:// localhost:8080)放在一起:

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

    location /images/ {
        root /data;
    }
}

我们将修改第二个位置块,它目前是将带有 /images/ 前缀的请求映射到 /data/images 目录下的文件,以使其与常见文件扩展名的图像请求相匹配。 修改的位置块如下所示:

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

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

此服务器将过滤以.gif,.jpg或.png结尾的请求,并将它们映射到 /data/images 目录(通过向根指令的参数添加URI),并将所有其他请求传递到上面配置的代理服务器。

最终完整版的ngnix配置文件如下:

http {
	//静态服务器
	server {
		listen 8080;
		root /data/up1;

		location / {
		}
	}
	
	//代理服务器
	server {   
		location / {
			proxy_pass http://localhost:8080/;
		}

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

要应用新配置,请将重新加载信号发送到nginx,如上一节所述。
更多关于配置代理服务器的指令信息请参见更多

5. 设置FastCGI代理

nginx可用于将请求路由 到 运行着使用各种框架和编程语言(如PHP)构建的应用程序的FastCGI 服务器上。
使用FastCGI服务器的最基本的nginx配置包括使用 fastcgi_pass 指令代替 proxy_pass 指令,以及使用fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。 假设 FastCGI 服务器可在 localhost:9000 上访问。 以上一节中的代理配置为基础,使用fastcgi_pass指令替换proxy_pass指令,并将参数更改为localhost:9000。 在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 )操作的代理服务器。

原文地址:https://www.cnblogs.com/unnamedprogramer/p/6188636.html