ngnix 一 入门指南
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. 启动,停止,重载配置文件
- 启动
要启动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 块。
- 创建 /data/www 目录,并将包含任意文本内容的index.html文件放入其中,并创建 /data/images目录并在其中放置一些图像。
- 打开配置文件。 默认配置文件已经包括 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实例上定义。
- 首先,通过向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 一 入门指南的更多相关文章
- Web API 入门指南 - 闲话安全
Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
- ASP.NET MVC 5 入门指南汇总
经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
- 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...
- 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模
我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...
- 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化
在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...
随机推荐
- public static <T> Map<String, T> json2map
/** * json string convert to map with javaBean */ public static <T> Map<String, T> json2 ...
- ADO.NET复习——自己编写SqlHelper类
今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...
- hibernate_validator_09
创建自己的约束规则 尽管Bean Validation API定义了一大堆标准的约束条件, 但是肯定还是有这些约束不能满足我们需求的时候, 在这种情况下, 你可以根据你的特定的校验需求来创建自己的约束 ...
- 使用Eclipse创建Hibernate工程
创建一个java project项目,加入hibernate的jar包和数据库驱动包,并引入到项目.
- 【USACO 1.4.3】等差数列
[题目描述] 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合 ...
- JavaScript-学习一加载不动
为先加载的js后加载的html 加载完js运行时因为未加载html的原因导致找不到js所控制的元素 所以解决的方法就是把js放到控制元素的下方 或者html的底部 做成函数的时候可以放在头部,也就是说 ...
- android中的margin和padding
Android的Margin和Padding跟Html的是一样的.如下图所示:黄色部分为Padding,灰色部分为Margin. 通俗的理解: Padding 为内边框,指该控件内部内容,如文本/图片 ...
- Egret 事件机制
主要流程: private createGameScene():void { var JimGreen = new Boy(); var HanMeimei = new Girl(); JimGree ...
- ImportError: No module named matlab
这个matlab已经改名为pylab了,你可以运行: from pylab import *
- android中几种常见的尺寸
获取屏幕宽高尺寸的三种代码形式 在Android上,目前我知道的获取屏幕尺寸的方法有三种不同的代码形式 方法1.在Activity中最常见的调用方式 WindowManager windowManag ...