• 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 )操作的代理服务器。

  • 相关阅读:
    hdu 1853 Cyclic Tour 最小费用最大流
    hdu 2686 Matrix 最小费用最大流
    hdu 1533 Going Home 最小费用最大流
    hdu 2883 kebab 网络流
    hdu 4240 Route Redundancy 最大流
    hdu 4292 Food 最大流
    使用Windows Azure创建Windows系统虚拟机-下
    使用Windows Azure创建Windows系统虚拟机-上
    Windows Azure公有云服务相关方案
    使用Windows Azure创建Linux系统虚拟机-下
  • 原文地址:https://www.cnblogs.com/unnamedprogramer/p/6188636.html
Copyright © 2020-2023  润新知