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 

  获取当前正在运行的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 ;
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的基本配置介绍完了,如有问题,欢迎大家提问~~

nginx的基础应用的更多相关文章

  1. nginx 的基础配置[转]

    nginx 的基础配置 分类: 工具软件2013-11-13 23:26 11人阅读 评论(0) 收藏 举报   目录(?)[-] 管理配置文件 全局配置 虚拟机server配置 location配置 ...

  2. nginx的基础应用(续)

    nginx的基础应用(续) 一.简介 上一篇文章我们介绍了nginx的基础应用,其中讲到了nginx作为代理服务器的使用,但是漏了一个重要的,也是使用非常普遍的特性--负载均衡.今天,我们将这段内容补 ...

  3. Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性

    简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很 ...

  4. Nginx——1.基础知识

    Nginx——1.基础知识 作为高速.轻量.高性能等优点集于一身的服务器,Nginx在近些年迅速发展并不断扩大市场份额,甚至在最近其市场份额一举超过微软的IIS,跃身到第二位,仅次于Apache. 但 ...

  5. nginx实现基础web

    目录 nginx实现基础web 什么是lnmp lnmp架构如何工作 Nginx与Fast-CGO详细工作流程 LNMP环境准备 一,部署LNMP 1.使用nginx官方源 2.创建nginx用户 3 ...

  6. Nginx web基础入门

    目录 Nginx web基础入门 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 日志格式 game日志记录实战 日志切割 手写虚拟 ...

  7. Linux架构之Nginx Web基础1

    第41章 Nginx Web基础入门 41.1 Nginx部署 41.1.1 Nginx的安装方式   源码编译 官方仓库 epel仓库 优点 规范 安装简单 安装简单   便于管理 配置易读   缺 ...

  8. Nginx 常用基础模块

    目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...

  9. Nginx Web 基础入门

    目录 Nginx Web 基础入门 Nginx快速安装 两种方式部署Nginx 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 虚拟 ...

随机推荐

  1. MAVEN 打包JAR

    <build> <finalName>edu-service-user</finalName> <resources> <resource> ...

  2. [mysql使用(2)] mysql的一些语法与Oracle的差别

    一.表空间 mysql的表空间有共享表空间和独占表空间,独占表空间,其实就是一张表一个表空间,其实也就是一张表一个数据文件,共享表空间似乎有点类似oracle的表空间,不同的表可以保存在同一个数据文件 ...

  3. 白夜追凶 :手 Q 图片的显示和发送逻辑

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:陈舜尧 导语: "这张图片在快捷发图栏背景是黑色的,为啥发到AIO(会话窗口)里背景就变成白的了?" 通过一个bug ...

  4. 12.21-Android WebService(基于KSOAP2)

    KSOAP2_连接WebService *****我是小知识点******** Ksoap2提供了对soap序列化更好的支持.Ksoap2是一个轻量级的J2ME平台的实现框架,提供了soap协议消息的 ...

  5. MySql数据库的基本原理及指令

    1.什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加,修改,删除及查询操作. 2.简介 MySQL是一个开放源 ...

  6. ASP.NET Core中的OWASP Top 10 十大风险-SQL注入

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  7. hbase-1.2.5完全分布式部署

    详细配置参考http://abloz.com/hbase/book.html#distributed ,2.2.2.2小节 1.修改hbase-site.xml文件.添加如下配置 cluster为ha ...

  8. 0_Simple__matrixMulDrv

    使用CUDA的 Driver API 来计算矩阵乘法. ▶ 源代码: #include <stdio.h> #include <cuda.h> #include <bui ...

  9. C# linq左连接与分组

    1.左连接使用DefaultIfEmpty(): 2.分组时候判断newper.FirstOrDefault() == null ? null: newper.ToList()这个经常出错误,如果不判 ...

  10. javascript创建css、js,onload触发callback兼容主流浏览器的实现

    http://www.fantxi.com/blog/archives/load-css-js-callback/ 由于需要写个函数,既可以加载css,又可以加载js,所以对各主流浏览器对加载js.c ...