首页 > 编程知识 正文

nginx编程(nginx实例)

时间:2023-05-06 20:12:45 阅读:100663 作者:1543

本文是【初学者指南】的翻译。原来的地址是http://nginx.org/en/docs/beginners_guide.html.

00-1010本教程介绍了nginx以及使用nginx可以完成的简单任务。本教程基于读者已经安装了nginx的事实,如果没有,请移至http://nginx.org/en/docs/install.html.本教程将包括以下内容:

nginx的打开和关闭nginx重启配置文件结构描述配置nginx提供静态服务配置nginx作为代理服务器连接nginx与FastCGI应用nginx有一个主进程和几个工作进程,主进程的主要任务是管理配置信息和调度工作进程。这个过程进行真正的请求处理。Nginx的基于事件的模型和操作系统平台支持的机制有效地在工作流程之间分配请求。进程数由配置文件定义,配置文件可以固定进程数,也可以根据cpu内核数自适应(详见http://ninx.org/en/docs/NGX _内核_ module.html # worker _ processes)。nginx的工作模式和模块情况取决于其配置文件nginx.conf,其配置文件一般在

/usr/local/nginx/conf或/etc/nginx或/usr/local/etc/nginx

Guide

运行可执行文件启动nginx,启动后可通过-s参数控制。

nginx -s信号信号可以是以下值

停止——快速停止退出——正常停止重新加载——刷新配置文件重新打开——重新打开日志文件。例如,如果您想在工作进程完成当前正在处理的请求后停止nginx进程,您可以使用它。

Nginx -s quit注意到执行此命令的用户应该与启动Nginx的用户相同。

如果修改配置文件,需要执行reload命令或重新启动nginx才能生效。

收到reload命令后,nginx -s reload的主进程将检查配置文件的语法,并尝试应用配置的内容。如果成功,主进程将启动一个新的工作进程发送信息命令其他工作进程关闭;否则,主进程将回滚并应用最后的配置信息,工作进程将继续工作。收到关闭命令后,该进程将不再接受新的客户端请求,并将在继续完成手头的请求后关闭。

在类似Unix的平台上,消息也可以通过kill之类的命令发送到nginx,通常直接发送到由进程ID标识的nginx进程。默认情况下,NGX的主进程标识写入/usr/local/nginx/logs或/var/run目录。比如当前nginx主进程的进程ID是1628,可以是这样的。

#优雅地关闭nginx

* kill -s退出1628

nginx工艺编号可通过ps获取。

* ps -ax | grep nginx有关更多信息,请参见http://nginx.org/en/docs/control.html.

启动,关闭,刷新配置

nginx由配置文件中指定的指令控制的模块组成。指令分为简单指令和指令块。

简单指令-由分号和空格组成的键值对[键值;]指令块-它的结构与简单指令相同,但使用一对大括号({})来包装一组指令。包含其他指令的指令块称为上下文(如事件、http、服务器和位置)。在配置文件中,块级指令之外的区域称为主(根)上下文。例如,事件和http指令在主上下文中,服务器指令在http上下文中,位置指令在服务器上下文中。

#主(根)上下文

http{

服务器{

位置{

}

}

}所有注释都跟在同一行的#字符后面。

配置文件

Web服务器的一个重要功能就是可以充当静态服务器(比如图片、静态HTML文本)。例如,您必须意识到这种情况:

根据不同的请求,nginx可以返回指定的文件资源。

/data/images目录中的图像和/data/www/目录中的html文件。您只需要配置nginx文件,并在http配置块的服务器下写入两个位置块。首先,创建一个/data/www目录,并在这个目录中创建一个index.html文件。在里面写点东西,创建一个/data/images目录,放一些图片进去。然后打开配置文件(默认情况下文件中配置了几个服务器块,但大多数都被注释掉了),注释掉那些服务器,并在http块下重新配置一个服务器块。

http{

s

erver{ } }

一般来说,配置文件应该根据监听端口号或者主机名分为几个 server 块,而 nginx 到底把 http 请求交给哪个 server 处理,则是根据请求的 URI 和 server 里 location 指令的值的 匹配情况 来处理的。下面我们添加一个 location 到 server 中

location / { root /data/www; }

上述 location 的 "/" 前缀,是用来匹配 http 请求 URI 的。而它会添加到 root 指定的路径下,也就是 /data/www,以此来形成 请求资源(文件)和本地文件系统的对应。如果有多个 location 和 URI 匹配的话,那就 优先选择最长匹配的 location。第一个 location / 只提供了最短的前缀,长度为1。所以,只有其他 location 匹配失败的情况下才能使用第一个。

现在,我们再添加一个location

location /images/ { root /data; } }

上述的 location 将会匹配一个以 /images/ 开始的 http 请求(location / 也会被匹配但是它更短)。配置好后,应该是类似下面的内容

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

这样就配置了监听标准 80 端口的 server,可以通过 http://localhost 验证。当请求 URI 以 /image/ 开头,服务器将响应 /data/images/ 目录下的文件

例如:访问 http://localhost/images/example.png,Web服务器会响应 /data/images/example.png如果该文件不存在,则返回 404 error。如果 URI 不是以 /images/ 开头,那就映射到(更短的 location /) /data/www 目录,例如:访问 http://localhost/some/example.html,Web服务器将会把 /data/www/some/example.html 响应给客户端。修改 nginx 配置文件之后,记得让主进程重新读取配置文件才能生效nginx -s reload

如果出错的话,记得查看 access.log 和 error.log 日志文件的内容。

日志目录一般在 /usr/local/nginx/log/ 或者 /var/log/nginx/ 里。

配置简单代理服务器

nginx 的一个常见用途是作为 代理服务器

代理服务器是接受请求,转发请求的到被代理的服务器,再从被代理的服务器获取响应回传给客户端。

在下面这个例子中,我们会配置一个简单的代理服务器,直接返回静态文件,其他的则转发给被代理的服务器。首先,编写个server块

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

这样就能提供一个简单 监听 8080 端口 的 server (这里需要写 listen 是因为之前默认的 80 端口已经被占用了),这个 server 映射所有请求到本地 /data/up1 目录。创建一个 index.html 文件到这个目录下。注意,当 location 下未指定 root 目录时将会使用 server 的 root 目录(类似 默认值 )然后,修改配置文件 在先前 server 的第一个 location 处放入 proxy_pass,指定 **协议,域名,端口**,如:

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

修改第二个 localtion(映射 /images/ 开头到本地目录)成根据文件类型拓展名匹配

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

该参数是一个正则表达式,匹配以 .gif,.jpg 或 .png 结尾的所有 URI。正则表达式应该以〜开头。相应的请求将映射到 /data/images 目录。

nginx 在分发请求给 location 时,会 先选出最长的匹配前缀 的 location,然后去 检查正则表达式,如果正则表达式匹配就选择正则表达式所在的 location,否则就使用之前选出最长匹配 location

最终的代理服务器配置文件应该这样:

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

这个 server 将会映射以 .gif,.jpg 或 .png 结尾的 URI 到 /data/images/ (root 对应的路径)目录下,其他的请求将会 转发给 proxy_pass 的代理服务器

更多代理配置的指令请移步 http://nginx.org/en/docs/http/ngx_http_proxy_module.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。