翻译自: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 )操作的代理服务器。

ngnix 一 入门指南的更多相关文章

  1. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  2. Vue.js 入门指南之“前传”(含sublime text 3 配置)

    题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...

  3. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  4. 【翻译】Fluent NHibernate介绍和入门指南

    英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...

  5. ASP.NET MVC 5 入门指南汇总

    经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...

  6. 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍

    我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...

  7. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  8. 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模

    我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...

  9. 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化

    在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...

随机推荐

  1. Datables wrning(table id='example'):Cannot reinitialise DataTable.

    出现的问题如下所示: Datables wrning(table id='example' Datables object for this table,please pass eithser no ...

  2. 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1

    安装PHP时,make步骤报错make: *** [ext/gd/gd.lo] Error 1 /usr/local/src/LAMP+memcahed+catci/php-5.4.0/ext/gd/ ...

  3. 从服务器将Oracle数据库导出到本地Oracle数据库的方法

     1.将服务器上的Oracle数据库导入到本地 在CMD模式下执行以下命令:   exp username1/password@服务器端数据库 file=本地硬盘:/文件名.dmp   例如: exp ...

  4. OC语法简写

    NSNumber [NSNumber numberWithInt:666] 等价于 @666 [NSNumber numberWithLongLong:666ll] 等价于 @666ll [NSNum ...

  5. spring 4 xxx 与jackson-dataformat.xxx类冲突

    这段时间,做一个新的工作流的开发,在开始之初,用的jbpm,后来发现jbpm现在开发有问题,不能引用官方的工作空间,所要工作流跑不起来,于是用了activiti工作流,在配置spring和activi ...

  6. How to check a not defined variable in javascript

    javascript里怎么检查一个未定义的变量? in JavaScript null is an object. There's another value for things that don' ...

  7. adb server is out of date. killing... 解决方案

    忘了原文从哪来的了,过后查到补上链接 今天调试android的时候发现一个诡异的问题 C:\Users\xxxx>adb start-server   adb server is out of ...

  8. C#语言的新特性及相关信息

     .ENT版本 NET 2.0 :CLR, WinForms ,Wed Services,ASP.NET NET 3.0 :WCF,WF,WPF,CardSpace NET 3.5 :LINQ ,AJ ...

  9. JQuery在光标位置插入内容

    (function($) { $.fn.extend({ insertAtCaret: function(myValue) { var $t = $(this)[0]; //IE if (docume ...

  10. js 点名

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...