Nginx入门指导

新人指导

这是一个关于Nginx的基本介绍以及你能用它做一些简单的工作的描述。现在假定你已经把Nginx安装到你的机器上了。如果你还没有安装的话,请参考下面这篇文章(CentOs环境下安装Nginx)或者Nginx的官方安装指导。通过这个指导,你可以了解到如何启动、暂停、以及重新启动Nginx,这个指定也会讲解配置文件的结构、如何设置Nginx来为外部静态资源提供服务、如何设置Nginx来作为一个代理服务器,以及怎么通过一个FastCGI来连接Nginx。
Nginx有一个主进程(master process)和几个工作进程(worker process)。主进程的主要目的是用来读取加载配置文件维护工作进程。工作进程用来处理真正的请求。Nginx利用事件驱动模型和基于操作系统的机制在工作进程之间高效的分配请求。工作进程的数量是在配置文件中定义的(conf/nginx.conf)。它可能是不变也可以调整到空闲的CPU的核心数(最大不超过CPU的)核心数。
Nginx的工作方式和运行模块是在配置文件中定义的。通常默认的配置文件名为nginx.conf。这个文件可能在/user/local/nginx/conf、/etc/nginx、或者/user/local/etc/nginx目录下(默认情况下是在/usr/local/nginx/conf这个目录下)启动、暂停、或者重新加载配置文件你需要运行可执行文件来启动Nginx(即:命令)。一旦Nginx被启动了,你就可以通过带
-s 参数的命令来控制Nginx。语法如下:
./nginx -s signal(信号) 或者 nginx -s signal(信号)
信号(命令)可以是如下几种:
stop      快速关闭
quit      优雅的关闭
reload    重新启动
reopen    重新打开日志文件
例如:如果你需要等工作进程处理完当前请求之后再关闭Nginx,你可以使用下面这个命令:
./nginx -s quit 或者 nginx -s quit
注意:这个命令需要在启动nginx的用户下面执行。
如果你更改了配置文件的话,你可以通过执行下面这个命令来重启Nginx来使更改生效。
./nginx -s reload 
一旦主进程接收到重新加载配置文件的信号(命令)之后,它会检查配置文件的正确性,如果无误的话,主进程就会尝试运行新的配置。如果运行成功的话,主进程会启动新的工作进程并向旧的工作进程发送信息,旧的进程会在处理完请求之后关闭。否则,主进程会回滚配置文件的改变,继续在旧的配置文件上工作。旧的工作进程将会收到一个关闭的信号(命令),它将不在接收新的连接并在处理完所有的请求之后退出。
你也可以用Unix的方式来给Nginx进程来发送信息(命令),例如:杀死程序。在下面的这个例子中,将会直接向给定的进程号发送信号
(命令)。通常主进程的进程号被写在/usr/local/nginx/logs 或者 /var/runn目录下的nginx.pid这个文件中。例如:如果主进程的进程号
为1628,优雅退出的命令如下:
kill -s QUIT 1628
你可以用ps指令来得到所有的正在运行的Nginx进程。例如:
ps -ax | grep nginx
更多的信号(命令信息)请参考Controlling nginx(http://nginx.org/en/docs/control.html)。

配置文件的结构

配置文件中的指令指定了nginx包含的模块。这些指令被分为简单指令和块指令。一个简单指令包含名字和参数,它们之间用空格分隔,并已分号(;)结尾。块指令拥有和简单指令相同的结构。不同的是,块指令需要用{}括起来。如果一个块指令中还有其他的带{}的指令,这个块指令被称为一个上下文。例如events、http、server、location。
任何指令都需要经过慎重考虑之后才能放到main上下文中。events和http指令在main上下文中,server在http的上下文中,location在server的上下文中。#号之后的是重要的一些注释。

服务静态资源

Web服务器的一个重要任务是为外部文件(例如:图片、静态页面)提供服务。下面你将会看到这样一个例子:在一个请求中,一些文件将会从不同的本地目录(/data/www用来提供静态html页面 /data/images包含图片)中被提供。要想实现这样的功能,你需要设置配置文件。在一个http块中包含一个server块,server块中包含两location块。
首先创建/data/www这样的一个目录,在这个目录中放一个index.html文件,在这个文件中随便写一些内容即可。然后创建一个/data/images目录,在这里面随便放入一些图片。
接下来打开配置文件,你会发现在配置文件中有一些默认的server块的例子。这些大部分都被注释掉了。现在把所有的这样的块都给注释掉,然后自己新建一个server块:

	http{
		server{

		}
	}

通常,配置文件中包含几个server块,他们用来监听的不同的端口和不同的服务名。nginx中server处理一个请求的时候,它将会测试请求的URI是否和server中location的参数是否匹配。下面我们来在server块中加入一个location块。

	location / {
		root /data/www;
	}

在这个location块中,指定带"/"的前缀来和请求中URI来匹配。为了匹配请求文件,URI将会被添加到根指令上。也就是,会添加到/data/www上。在本地文件系统中找到请求的文件。如果这里存在几个匹配上的location块的话,nginx会选择最精确的那一个。上面的例子中提供的是最短的前缀,它只有一个字符,只有当所有的其他的location都匹配失败的时候,才会使用这个location。
接下来我们来写第二个location块。

	location /images/ {
		root /data;
	}

它将会匹配以/images/开头的请求。现在的server块应该是下面这样的:

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

现在配置文件中有一个已经正在运行的server,它在监听80端口,你可以通过http://localhost/来访问它。现在我们用nginx -s reload来重新加载Nginx。如果一个以"/images/"开头的请求,服务器将会从/data/images目录中发送文件到响应头。例如:如果有这样一个请求ttp://localhost/images/example.png,nginx将会把/data/images/example.png这个文件发送到响应头。如果这个文件不存在的话,将会报404.如果请求中的URI不是以"/images"开头的话,将会在/data/www目录下寻找对应的文件。例如:有这样一个请求:http://localhost/some/example.html,ngnix将会发送/data/www/some/example.html中的文件到相应头。如果Nginx没有按照你预想的那样工作的话,你可以到/usr/local/ngxin/logs或者/var/log/nginx这两个目录下的access.log和error.log文件中来查找原因。

设置代理服务器

Nginx最常用的一个用途是作为代理服务器。我们将会配置一个很基础的代理服务器,这个服务器是用来代理一个从本地目录请求图片的服务。在这个例子中,你将会看到两种代理方式的运用。

首先,在nginx的配置文件中新增几个server块,内容如下:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这个简单的服务器监听8080端口,并且映射所有的请求到/data/up1这个本地目录下。如果这个目录不存在的话,请先创建这个目录,并在这个目录中放入index.html文件。请注意:根指令要放到服务器的上下文中。如果被选中的location中没有根指令的话,将会使用这个根指令。

接下来,在上面的server块中的第一个location块里添加proxy_pass指令,这个指令包含协议、host、端口。

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

我们可以修改第二个location块,它原来是映射"/images"开头的请求到/data/images目录下。但是这个和我们常规的需求可能不太一样,所以我们需要这样修改它:

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

这是一个正则表达式,用来匹配所有以.gif、.jps和.png结尾的请求。一个正则表达式应该以~开头。现在所有符合的请求将会映射到/data/images这个目录下面。
当Nginx选择一个location块来服务一个请求的时候,它会先检查location指令的前缀,然后记住最长的一个前缀,然后检查正则表达式。如果一个正则表达式匹配上的话,它会选择这个location,否则的话,它会选择之前记住的那个。

最后的代理服务器的配置是这样的:

server {

    listen 8080;
    root /data/up1;

    location / {
        proxy_pass http://localhost:8080/;
    }

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

这个server将会过滤所有的以.gif、.jpg、和.png结尾的请求,并映射到/data/images这个目录下。当然,别忘了在根指令下添加URI。其他的请求将通过代理服务器来处理。

时间: 2024-09-08 09:38:46

Nginx入门指导的相关文章

c++-学习网络编程入门 指导

问题描述 学习网络编程入门 指导 本人接触过c/c++,想学习网络编程,不知从何入门,请大家指导下,推荐些相关的书籍,谢谢! 解决方案 可以从tcp/ip协议以及socket学起,看<计算机网络>,谢希仁编写,和windows网络编程 解决方案二: windows网络编程 解决方案三: 以实践的方式驱动,比如说去做一个简单的httpserver 解决方案四: 看书之余,要多动手.从简单的阻塞式, 到select, 再到iocp或者epoll. 然后看下一些开源的网络库, libevent, n

HTML5菜鸟入门指导:简介、平台搭建、示例演示

HTML5菜鸟入门指导:简介.平台搭建.示例演示 一.HTML5简介 1.  了解HTML (1).什么是HTML? HTML是用来描述网页的一种语言: HTML指超文本标记语言(Hyper Text Markup Language) HTML不是变成语言,是一种标记语言 (2).版本 HTML出现于1991年 HTML+出现于1993年 HTML2.0出现于1995年 HTML3.2出现于1997年 HTML4.01出现于1999年 XHTML1.0出现于2000年 HTML5出现于2012年

Nginx入门笔记之————配置文件结构

在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http {

PHP入门指导:如何学习PHP?

每个人的学习方式不同,写这篇文章的目的是分享一下自己的学习过程,仅供参考,不要一味的用别人的学习方法,找对自己有用的学习方式 经常在某些论坛和QQ群里看到一些朋友会问"怎样才能学好PHP,怎样才能学好***语言 ",但别人回答最多的是:从最"简单"的开始. 这个简单也许真的不简单,呵呵.下面我想分享一下自己学习的一些过程.先说些费话,语言组织能力差,说了不少费话,愿意看的就看,不要骂我就行 其实学习一门新语言并不是太难,重要的是你有没有准备好去学好它,时间的长短和个

轻量级HTTP服务器Nginx入门

一.什么是Nginx 相信很多读者都对Apache非常熟悉,与Apache类似,Nginx是一款高性能的HTTP和反向代理服务器软件,也是一个 IMAP/POP3/SMTP 代理服务器.Nginx(发音是"engine x")由俄罗斯的程序设计师Igor Sysoev所开发(Igor将源代码以类BSD许可证的形式发布),可以运行在UNIX,GNU/Linux,BSD,Mac OS X, Solaris, 以及 Microsoft Windows等操作系统中.随着Nginx在很多大型网站

NVIDIA Jetson TK1学习与开发(二):入门指导

  对于第一次使用TK1的童鞋们,可以仔细阅读以下网址提供的资料:http://elinux.org/Jetson_TK1 TK1开发板的一些资料下载网址:https://developer.nvidia.com/jetson-tk1 入门视频教学:http://www.iqiyi.com/a_19rrhc0aql.html 需要注意的是: 1.由于Jetson TK1只提供一个USB接口,因此若想连接鼠标.键盘.优盘等外设,可以自己购买一个USB扩展接口来使用. 2.Jetson TK1提供的

如何学习Javascript入门指导_基础知识

谈不上经验,都是一些教训. 这个时候有人要说,"靠,你丫半桶水,凭啥教我们".您先别急着骂,先听我说. 你叫一个大学生去教小学数学,不见得比一个初中生教得好.因为大学生早已经过了那个阶段,都忘记自己怎么走过来的了.而对于初中生,刚好走过那个阶段,对自己怎么走过来的还记忆犹新,或者还有一些自己的总结.比如,很多高手觉得那本犀牛书入门很好,他们觉得太简单了,但以我的经验来看,它不是入门的最好选择. 先说说学js的条件 论条件,咱是文科生,大学专业工商管理,和计算机毛关系都没:有人说英语,读

仰望星空――天文望远镜入门指导

摘要: 左:1848年建成的辛辛那提天文台折射望远镜 右:牛顿第一架6英寸望远镜的复制品 望远镜的分类 简单地说,处射电望远镜之外的其他波段望远镜可以大致分为折射与反射式两种. 折射 左:1848年建成的辛辛那提天文台折射望远镜 右:牛顿第一架6英寸望远镜的复制品 望远镜的分类 简单地说,处射电望远镜之外的其他波段望远镜可以大致分为折射与反射式两种. 折射式望远镜使用凸透镜作为物镜与目镜汇聚光线,而反射式望远镜使用曲面合平面镜反射光线.从外观上来说,折射式望远镜通常更长,更符合一般人印象中望远镜

嵌入式行业入门指导---知乎转载【转】

此文是本人在知乎上看的,觉得很好就分享出来了,并不是本人原创 转自:https://www.zhihu.com/question/47881392 作者:shang链接:https://www.zhihu.com/question/47881392/answer/146734937来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 嵌入式Linux+Android学习路线图作者:韦东山 本文目录1. 程序员的三大方向 1.1 专业领域 1.1.1 学术研究 1.1.2