nginx的基础应用

nginx的基础应用

一、简介

今天我们将介绍一些nginx的简单应用,启动、停止nginx,重载nginx的配置,nginx配置文件的格式,如何配置nginx服务静态资源,如何配置nginx作为反向代理服务器。

nginx有一个主进程和几个工作进程。主进程主要是读取和解析配置文件,以及保持工作进程工作;工作进程处理实际的请求。nginx利用基于事件的模型和运行的操作系统在工作进程之间有效地分配请求。工作进程的个数在配置文件中定义,推荐设置为CPU的核数。

nginx配置文件中的配置决定了nginx如何工作,配置文件的名字一般叫做nginx.conf,它的目录是/usr/local/nginx/conf,/etc/nginx或者/usr/local/etc/nginx。

二、nginx的启动、停止、和重载配置

想要运行nginx,运行可执行文件即可。

/usr/sbin/nginx

nginx一旦运行起来,它就可以使用-s参数控制,语法格式如下:

nginx -s signal

signal的列表如下:

  • stop 快速关闭
  • quit   优雅的关闭
  • reload 重载配置文件
  • reopen 重新打开log文件

例如,等nginx进程处理完当前的所有请求后,停止nginx进程,命令如下:

nginx -s quit

如果修改了nginx配置文件,并且想要配置文件生效,应当执行如下命令:

nginx -s reload

当主进程接收到reload命令时,它会检查新配置文件的语法并尝试应用新的配置文件,如果成功了,主进程会启动新的工作进程并且发送消息停止旧的工作进程;如果配置文件有错误,主进程将回滚并继续使用旧的配置文件工作。旧的工作进程收到关闭命令后,停止接受新的请求,并且直到当前的所有请求被处理完后,旧的工作进程关闭。

-s参数也可以通过unix命令发送给nginx进程。这种情况下,-s参数通过给定的nginx进程id发送给nginx进程。nginx进程id一般写在nginx.pid文件中,目录通常在/usr/local/nginx/logs 或者 /var/run。例如:如果nginx的主进程id是1628,想要优雅的关闭nginx,可执行以下命令:`

kill -s QUIT 1628

获取当前正在运行的nginx进程,可执行如下命令:

ps -ax | grep nginx

三、配置文件的结构

nginx的配置文件由多个指令集组成,指令集分为简单指令和模块指令。简单的指令由名字和参数组成,由空格和分号(;)隔开。块指令和简单指令有着相同的结构,但是“;”被“{}”取代,如果块指令中还有其他的块指令,它被称作上下文(context)。例如:events,http,server,location。

#后面的文件是注释。

四、服务静态内容

nginx的一个重要的功能就是服务静态文件(例如:图片和静态html)。在这里,我们举一个例子,根据不同的请求,提供不同的文件服务,本地的目录为/data/www,该目录存放html文件,/data/image存放图片文件。我们需要修改配置文件,在http块中增加一个server块,在server块中增加连个location块。

首先,我们在/data/www目录下创建一个html文件,在文件中随意写一些内容,并且在/data/image目录下随机放一些图片。

接下来,我们打开配置文件,文件中默认写了一些server的例子,我们将其全部注释掉。从现在开始,我们新加一个server块,如下:

http {
    server {
    }
}

通常情况下,配置文件中,包含多个server块,它们通过监听不同的端口和服务名称区分。一旦nginx决定哪个server处理请求,它就会监测请求头中的URI,和server块中的location指令中的参数是否一致。

向server块中添加location块,如下:

location / {
    root /data/www;
}

location块中指定“/”为前缀和请求中的URI进行比较,匹配的请求,URI将会被加入到root指令集中指定的路径,“/data/www”,生成一个访问本地文件系统的文件请求路径。上面的location提供了一个最小的前缀,当其他的location块都不匹配时,这个location将被使用。

下面,我们加入第二个块,如下:

location /images/ {
    root /data;
}

它将匹配所有以“/images/”开头的请求,location / 也匹配这样的请求,但是只是最小的匹配。

配置的最终结果如下:

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

    location /images/ {
        root /data;
    }
}

这是一个可以工作的配置,它监听80端口,并且可以通过本机的http://localhost/ 访问。以/images/开头的请求,服务将从/data/images目录发送文件。例如:请求http://localhost/images/example.png, 将会以/data/images/example.png文件作为响应。如果这个文件不存在,将会返回404错误。请求的URI不是以/images/开头的,将会映射到/data/www目录中,例如:http://locahost/some/example.html将会映射到/data/www/some/example.html。

要使配置生效,直接启动nginx(没有启动)或重载配置文件

nginx -s reload

如果nginx没有向配置的那样工作,你可以在access.log和error.log中找到原因,日志的目录 /usr/local/nginx/logs 或者 /var/log/nginx。

五、设置一个简单的代理服务器

nginx作为代理服务器使用是比较频繁的,它接受请求,分发它们到被代理的服务器,取回响应,并把它们发送给客户端。

我们将配置一个基本的代理,它从本地目录服务图片请求,发送其他的请求到被代理的服务器,在本例中,两个server将在一个nginx实例中配置。

首先,通过新加一个server块定义被代理的服务,如下:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这是一个简单的服务,它监听8080端口(上一个server中,listen并没有指定,它监听默认的端口80),它映射所有的请求到本地文件系统/data/up1目录。创建这个目录并新建
index.html文件。值得注意的是,在server上下文中配置root,当请求选中的location块中,没有root指令时,将会使用server中配置的root。

接下来,我们修改先前的server块,使他成为一个代理服务器配置。在第一个location块中,我们添加proxy_pass指令,它的参数为http://localhost:8080,如下:

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

    location /images/ {
        root /data;
    }
}

我们将修改第二个location块,它现在映射以/images/开头的请求到/data/images目录。我们修改其为通过文件扩展名匹配的方式,匹配请求。如下:

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

这个参数是一个正则表达式,它匹配所有以.gif,jpg,png结尾的请求,在正则表达式之前必须出现“~”。匹配的请求将映射到/data/images目录。

当nginx为一个请求选择服务块时,它首先检查指定前缀的location,并记住最长的前缀,然后检查指定正则表达式的location,如果请求匹配了正则表达式,nginx将选择这个location服务请求,否则,将选择先前记住的最长的前缀location。

代理服务的server配置如下:

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

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

这个服务将过滤以.gif,.jpg,.png结尾的请求,并将它们映射到/data/images目录,其他的请求将被转发到前面配置的被代理的服务。
要是配置生效,reload配置即可。

至此,nginx的基本配置介绍完了,如有问题,欢迎大家提问~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容