zoukankan      html  css  js  c++  java
  • nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作。前提是nginx已经被安装到你的服务器上。如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装。这篇手册主要内容:1. 如何启动和停止nginx,如何加载nginx配置;

    2.配置文件的结构;3.如何安装nginx来做静态内容的服务器;4,如何配置nginx作为代理服务器;5:如何连接FastCGI应用。

    nginx有一个主进程和多个工作进程。主进程的作用是读和验证配置文件,启动工作进程。工作进程正在处理请求。nginx应用事件驱动模型和os依赖机制来在工作进程之间有效的分发请求(负载均衡)。工作进程的数目定义在配置文件中,在一个特定的配置中一般是固定的或者可以根据可用的cpu 内核来动态修改这个数量。工作进程参考:http://nginx.org/en/docs/ngx_core_module.html#worker_processes

    nginx及其模块如何工作取决于配置文件的定义。默认情况下,配置文件为:nginx.confand 目录为/usr/local/nginx/conf, /etc/nginx, 或者/usr/local/etc/nginx.

                                                               启动、停止、重新加载ngnix配置文件

    启动nginx,直接执行可运行文件即可。一旦nginx启动完成,可以通过可运行参数s来控制nginx的运行。

    语法如下:

    nginx -s signal

     signal可选项

    • stop — 快速停止
    • quit — 完整停止
    • reload —重新加载
    • reopen — 重新打开日志文件

    例如,停止nginx但等待工作进程处理完成当前的请求,可以使用下面的命令:

    nginx -s quit

    注意:这个命令的执行者必须是和启动nginx的是同一个用户。

    直接修改配置文件将不会立即生效,需要重启nginx或者向nginx发送reload配置文件命令:

    nginx -s reload

       当主进程收到重新加载配置的信号后,它先检测新配置的语法是否规范,然后开始尝试加载新的配置。如果上面的步骤成功,主进程开始启动新的工作进程并且发停止信号给旧的工作进程;否则,主进程回滚到改变前的配置,并继续使用旧的配置工作。旧的工作进程接受到停止工作信号,它停止接受新的连接请求,但继续处理当前的请求知道这些请求被处理完成。最后,旧的工作进程退出。

       nginx进程也可以通过unix工具进行处理,例如kill命令。unix工具可以通过进程ID作为参数来进行处理。默认情况下,nginx主进程的id写入/usr/local/nginx/logs或者/var/run文件中。例如,如果主进程的id是1628,发送quit信号将会使nginx完整退出,命令如下;

       kill -s Quit 1628

    同样,也可以功过ps命令来获取nginx运行的所有进程列表,例如下面的方法:

       ps -ax | grep nginx

    想获取更多nginx信号的信息,请参考下一篇:nginx控制。

                                                 配置文件的结构

    ngnix的配置包含了许多模块,每个模块使用指令来运行。指令包含简单指令和块指令。简单指令通过空格来分离名称和参数,使用分号(;)作为结尾;块指令和简单指令有相同的结构,但不是以分号结尾而是以大括号({})包含指令。如果一个块指令中大括号内含有其它指令,那么括号内的叫做上下文(例如:事件、http、服务器、位置)。

           在配置文件中,不在任何上下文的指令被认为存在于主上下文。事件和http指令就存在于主上下文中,server在http上下文中,位置在server上下文中。

          配置文件使用#号作为注释符号。

                                                  为静态文件提供服务

    一个web服务器的重要工作就是为静态文件服务。例如,你想根据请求的不同,去不同目录去请求服务:/data/www存放html文件,/data/images存放图片信息。这就需要修改配置文件,建立一个服务器块,在这个http块中建立服务器块,服务器块内再建立两个不同的位置块。

       首先,创建/data/www目录并把一个包含任意内容的index.html文件放入该目录;创建/data/images目录,放置一些图片。

       然后,打开配置文件。默认配置文件中已经包含了一些server块的实例,大部分被注释掉了。现在注释掉所有的类似块,新写一个server块:

    http {
        server {
        }
    }

    通常,配置文件可能会包含几个server块,server通常指定名称和监控端口。当nginx决定哪个server进程处理请求时,它测试uri请求报文头而不是定义在server块中的位置指令的参数。

       增加下面的位置块到服务器块中:

    location / {
        root /data/www;
    }

    位置包括中定义的“/”前缀和请求uri进行比较。如果和uri中请求匹配,uri将增加root指令的路径到uri中,亦即到本地文件系统的路径/data/www下去响应请求。如果有多个位置块匹配,nginx选择最长后缀的那个。以上的位置块提供了最短的前缀(长度为1),因此当只有所有别的位置块都不能提供匹配时,这个模块才能使用到。

    接下来,增加第二个位置块:

    location /images/ {
        root /data;
    }

    它将匹配以/images/开头的请求(位置“/”也匹配这些request,但它的前缀更短)。

    上述完整的配置如下:

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

    上述已经是一个可以运行的服务器的配置了,该服务器监听http标准端口80,可以通过htt://localhost/来访问本地机器。如果请求以/images/开头,那么该服务器将从目录/data/images/下获取文件来应答请求。例如:请求http://localhost/images/example.png发送后,nginx将发送/data/images/example.png文件应答请求。如果该文件不存在,nginx将发送404返回。不是以/images/开头的请求将会被映射到/data/www目录下。例如:对于请求http://localhost/some/example.html请求,nginx将会发送/data/www/some/example.html文件来应答。

    为使新的配置生效,如果nginx没有启动,则启动,如果启动则发送重新加载信号到nginx主进程,执行:

    nginx -s reload

    若配置没有生效或者没有达到期望效果,可以通过目录/usr/local/nginx/logs或者/var/log/nginx下的access.log和error.log来查找原因。

                                                建一个简单的代理服务器

    nginx另一个频繁使用的特性是作为一个简单的代理服务器,代理服务器意思就是接受请求,并发送这些请求到被代理的服务器,从代理的服务器得到响应信息,然后发送给客户端。

    下面介绍配置一个简单的代理服务器的例子,这个代理服务器提供从本地机器获取图片请求,然后发送到别的其它的被代理服务器。在这个例子中,所有的服务器都定义在一个单独nginx实例。

    首先,定义被代理服务器,这可以通过在配置文件中增加一个或者多个服务器块,具体内容如下:

    server {
        listen 8080;
        root /data/up1;
    
        location / {
        }
    }

    这个简单的服务器监听端口8080(上个例子中没有使用listen是因为使用http标准端口80),映射所有的请求到本地文件系统的/data/up1目录,创建此目录并放置index.html文件到该目录。注意root指令被放置到服务器上下文。当选择提供服务的位置块不包含自己的root指令时该root指令将被使用。

    接下来,使用上篇服务器的配置并修改,使之成为一个代理服务器的配置。在第一个位置块中,在第一行的参数中添加proxy_pass指令加代理服务器的协议、名称、端口。(在我们的例子中是http://localhost:8080):

    server {
        location / {
            proxy_pass http://localhost:8080;
        }
    
        location /images/ {
            root /data;
        }
    }

    我们将修改第二个位置块的配置,以前是映射/image/前缀的请求到/data/images/目录下的文件,为了和典型图片的文件扩展名相匹配,修改的位置块配置文件如下:

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

    这个参数是一个正则表达式,它匹配以.gif,.jpg或者.png结尾的url。一个正则表达式应该以~开头。响应的请求将被映射到/data/images目录。

    当nginx选择一个位置块为请求提供服务时,它首先检测指定带前缀的位置指令,别忘记优先选择最长前缀的,再检测正则表达式。如果和一个正则表达式匹配,nginx选择这个位置块,否则选择最初的那个。

    完整的代理服务器配置如下:

    server {
        location / {
            proxy_pass http://localhost:8080/;
        }
    
        location ~ .(gif|jpg|png)$ {
            root /data/images;
        }
    }

    这个服务器将过滤以以.gif,.jpg或者.png结尾的请求,然后映射到目录/data/images 下(通过增加url到root指令参数),转发其它请求到配置的被代理服务器中。

    更多用来配置代理连接的指令可以参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

                                                          建立FashCGI代理

    nginx可以用来追踪到FastCGI 服务器上的请求,FastCGI服务器可以运行不同框架不同编程语言(例如php)构建的应用程序。

    适用FastCGI服务器运行的nginx最基本配置包括:使用fastcgi_pass指令而非proxy_pass;fastcgi_param指令设置发送参数到Fastcgi服务器。假定可以通过http://localhost:9000来访问FastCGI服务器。使用上章的代理服务器配置,替换proxy_pass指令为fastcgi_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来操作。


     

  • 相关阅读:
    高精度运算专题1-加法运算(The addition operation)
    大数据除法(Large data division)
    大数据阶乘(The factorial of large data)
    大数据加减(Big data addition and subtraction)
    我凭什么能上北大——贺舒婷
    说说我自己(安徽一考生)-2
    说说我自己(安徽一考生)-1
    一个夏日的早晨(山东济南一考生)
    洛谷-回文质数-过程函数与递归
    洛谷-数字反转(升级版)-简单字符串
  • 原文地址:https://www.cnblogs.com/davidwang456/p/3426362.html
Copyright © 2011-2022 走看看