全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

nginx 基本入门教程

这篇教程简单介绍了 nginx 并且讲解了一些 nginx 可以解决的简单任务。这里,我们假设 nginx 已经安装在读者的机器上。如果没有,可以看一下如何安装 nginx。这篇教程主要讲解的是如何启用和停止nginx,和重新加载配置,描述配置文件的基本结构和怎样搭建一个 nginx 静态辅助器,怎样配置 nginx 作为一个代理服务器来。

nginx 有一个主进程和其他子进程。主进程的主要工作是加载和执行配置文件,并且驻留子进程。子进程用来作为实际的请求处理。nginx 采取基于事件的模型和 OS 依赖的机制,在多个子进程之间高效的分配请求。子进程的个数会直接写在配置文件中并且,对于给定的配置可以是固定的,或者根据可用的 CPU 核数自动的进行调整(参考 子进程)。

nginx 和它模块的工作方式是在配置文件中写好的。默认情况下,这个配置文件通常命名为 nginx.conf 并且会放置在 /usr/local/nginx/conf/etc/nginx,或者 /usr/local/etc/nginx

启用,停止和重载配置

运行可执行文件就可以开启 nginx,比如:

// -c 为 nginx 的配置文件
nginx -c /usr/local/nginx/conf/nginx.conf

如果,nginx 已经开启,那么它就可以通过使用 -s 参数的可执行命令控制。使用下列格式:

nginx -s signal

signal 可以为下列命令之一:

  1. stop — 直接关闭 nginx
  2. quit — 会在处理完当前正在的请求后退出,也叫优雅关闭
  3. reload — 重新加载配置文件,相当于重启
  4. reopen — 重新打开日志文件

比如,等待当前子进程处理完正在执行的请求后,结束 nginx 进程,可以使用下列命令:

nginx -s quit

执行该命令的用户需要和启动的 nginx 的用户一致。

如果重载配置文件的命令没有传递给 nginx 或者 nginx 没有重启,那么配置文件的改动是不会被使用的。重载配置文件的命令可以使用:

nginx -s reload

一旦主进程接收到重载配置文件的命令后,它会先检查配置文件语法的合法性,如果没有错误,则会重新加载配置文件。如果成功,则主进程会重新创建一个子进程并且发送关闭请求给以前的子进程。如果没有成功,主进程会回滚改动并且继续使用以前的配置。老的子进程在接受关闭的命令后,会停止接受新的请求并且继续处理当前的请求,直到处理完毕。之后,该子进程就直接退出了。

在 Unix 工具的帮助下,比如使用 kill 工具,该信号会被发送给 nginx 进程。在这种情况下,信号会被直接发送给带有进程 ID 的进程。nginx 的主进程的进程 ID 是写死在 nginx.pid 文件中的。该文件通常放在 /usr/local/nginx/logs 或者 /var/run 目录下。比如,如果主进程的 ID 是 1628,为了发送 QUIT 信号来使 nginx 优雅退出,可以执行:

kill -s QUIT 1628

为了得到所有正在运行的 nginx 进程,我们可能会使用到 ps 工具,比如,像下列的方式:

$ ps -ax | grep nginx
// 结果为:(下面是单核 CPU 的情况)
 516 pts/0  D+   0:00 grep --color=auto nginx
 1156 ?    S   1:22 nginx: worker process
27999 ?    Ss   0:00 nginx: master process ./nginx

更多关于发送信号给 nginx,可以参考nginx 控制。

配置文件结构

nginx 是由一些模块组成,我们一般在配置文件中使用一些具体的指令来控制它们。指令被分为简单指令和块级命令。一个简单的指令是由名字和参数组成,中间用空格分开,并以分号结尾。例如:

// 简单指令
root /data/www;

块级指令和简单指令一样有着类似的结构,但是末尾不是分号而是用 { 和 } 大括号包裹的额外指令集。如果一个块级指令的大括号里有其他指令,则它被叫做一个上下文(比如:events,http,server,和 location)。

在配置文件中,没有放在任何上下文中的指令都是处在主上下文中。events http 的指令是放在主上下文中,server 放在 http 中, location 放在 server 中。

以 # 开头的行,会被当做注释。

# this is a comment
events {
 worker_connections 4096; ## Default: 1024
}

http {
  server { 
     listen    80;
     server_name domain1.com www.domain1.com;
     access_log  logs/domain1.access.log main;
     root     html;

     location ~ \.php$ {
      fastcgi_pass  127.0.0.1:1025;
     }
  }
}

静态服务器

一个重要的网络服务器的任务是处理文件(比如图片或者静态 HTML 文件)。这里,你会实践一个例子,文件会从不同的目录中映射(取决于请求): /data/www(放置 HTML 文件)和 /data/images(放置图片)。这需要配置一下文件,将带有两个 location 的指令的 server 的块级命令放在 server 指令中。

首先,创建一个 /data/www 目录,然后放置一个事先写好内容的 index.html 文件。接着,创建一个 /data/images 目录,然后放置一些图片。

下一步,打开配置文件。默认的配置文件已经包含了一些关于 server 指令的样式,大多数情况下直接把他们给注释掉。现在,注释掉其他的区块,然后写一个新的 server 区块:

http {
  server {
  }
}

通常,该配置文件可能会包含多个 server 指令。这些 server 指令监听不同的端口和服务器名。一旦 nginx 决定哪个服务进程处理请求,它会根据在 server 块级指令中定义好的 location 指令的参数,来匹配请求头中指定的 URI。

将下列 location 指令添加到 server 指令中:

location / {
  root /data/www;
}

location 指令相对于请求中的 URI 执行了 “/” 的前缀。为了匹配请求,URI 会被添加到 root 命令指定的路径后,即 /data/www,得到本地文件系统中请求文件的路径。如果,有几个 location 匹配到,那么 nginx 会选择最长的前缀。上面的 location 提供了长度为 1 的前缀,所以,仅当其他的 location 匹配失败后,该指令才会使用。

接着,添加第二个 location 区块:

location /images/ {
  root /data;
}

它会匹配到以 /images/ 开头的请求(location / 也会匹配到该请求,只是前缀更短)

server 块级命令的配置结果如下:

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

  location /images/ {
    root /data;
  }
}

这已经是一个可用的服务器配置,它监听标准的 80 端口并且可以在本地上通过 http://localhost/ 访问。对于 URI 以 /images/ 开头的请求,服务器会从 /data/images 目录中,返回对应的文件。例如,nginx 会返回 /data/images/example.png 文件,当接收到 http://localhost/images/example.png 的请求响应时。如果该文件不存在,nginx 会返回一个 404 错误的响应。没有以 /images/ 开头的 URI 的请求,将会直接映射到 /data/www 目录中。比如,响应 http://localhost/some/example.html 的请求,nginx 会发送 /data/www/some/example.html 文件。

为了使用新的配置文件,如果还没开启 nginx 需要先开启,然后将重载信号发送给 nginx 的主进程,通过执行:

nginx -s reload

如果你发现有些地方出了问题,你可以在 /usr/local/nginx/logs 或者 /var/log/nginx 目录下的 access.log error.log 文件中,找到原因。

搭建一个简易的代理服务

nginx 常常用来作为代理服务器,这代表着服务器接收请求,然后将它们传递给被代理服务器,得到请求的响应,再将它们发送给客户端。

我们将配置一个基本的代理服务器,它会处理本地图片文件的请求并返回其他的请求给被代理的服务器。在这个例子中,两个服务器都会定义在一个 nginx 实例中。

首先,通过在 nginx 配置文件中添加另一个 server 区块,来定义一个被代理的服务器,像下面的配置:

server {
  listen 8080;
  root /data/up1;

  location / {
  }
}

上面就是一个简单的服务器,它监听在 8080 端口(之前,listen 并没被定义,是因为默认监听的 80 端口)并且会映射所有的请求给 本地文件目录 /data/up1。创建该目录,然后添加 index.html 文件。注意,root 指令是放在 server 上下文中。当响应请求的 location 区块中,没有自己的 root 指令,上述的 root 指令才会被使用。

接着,使用前面章节中的 server 配置,然后将它改为一个代理服务配置。在第一个 location 区块中,放置已经添加被代理服务器的协议,名字和端口等参数的 proxy_pass 指令(在这里,就是 http://localhost:8080):

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

  location /images/ {
    root /data;
  }
}

我们将修改第二个 location 区块,使他返回一些典型后缀的图片文件请求,现在它只会映射带有 /images/ 前缀的请求到 /data/images 目录下。修改后的 location 指令如下:

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

该参数是一个正则表达式,它会匹配所有以 .gif .jpg 或者 .png 结尾的 URIs。一个正则表达式需要以 ~ 开头。匹配到的请求会被映射到 /data/images 目录下。

当 nginx 在选择 location 去响应一个请求时,它会先检测带有前缀的 location 指令,记住先是检测带有最长前缀的 location,然后检测正则表达式。如果有一个正则的匹配的规则,nginx 会选择该 location,否则,会选择之前缓存的规则。

最终,一个代理服务器的配置结果如下:

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

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

该服务器会选择以 .gif.jpg,或者 .png 结束的请求并且映射到 /data/images 目录(通过添加 URI 给 root 指令的参数),接着将其他所有的请求映射到上述被代理的服务器。

为了使用新的配置,像前几个章节描述的一样,需要向 nginx 发送重载信号。

这还有很多其他的指令,可以用于进一步配置代理连接。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# nginx入门  # nginx  # 快速入门  # 入门教程  # Nginx配置入门教程  # windows下nginxHTTP服务器入门教程初级篇  # Nginx 负载均衡是什么以及该如何配置  # Nginx优化服务之网页压缩的实现方法  # nginx优化的六点方法  # Nginx解决前端访问资源跨域问题的方法详解  # 解决Nginx 配置 proxy_pass 后 返回404问题  # 基于Nginx实现限制某IP短时间访问次数  # Nginx配置并兼容HTTP实现代码解析  # Nginx服务快速入门教程  # 配置文件  # 放在  # 代理服务器  # 其他的  # 它会  # 如果没有  # 是一个  # 发送给  # 加载  # 出了  # 目录下  # 多个  # 是由  # 才会  # 第二个  # 可以使用  # 这篇  # 重启  # 该文件  # 创建一个 


相关文章: 建站主机解析:虚拟主机配置与服务器选择指南  建站之星客服服务时间及联系方式如何?  如何在香港免费服务器上快速搭建网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  javascript基本数据类型及类型检测常用方法小结  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何用PHP快速搭建高效网站?分步指南  建站主机选择指南:服务器配置与SEO优化实战技巧  制作证书网站有哪些,全国城建培训中心证书查询官网?  高防服务器租用指南:配置选择与快速部署攻略  如何通过wdcp面板快速创建网站?  ,在苏州找工作,上哪个网站比较好?  建站主机SSH密钥生成步骤及常见问题解答?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站VPS选购需注意哪些关键参数?  淘宝制作网站有哪些,淘宝网官网主页?  专业网站建设制作报价,网页设计制作要考什么证?  h5网站制作工具有哪些,h5页面制作工具有哪些?  清除minerd进程的简单方法  平台云上自助建站如何快速打造专业网站?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  高防服务器如何保障网站安全无虞?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何通过商城自助建站源码实现零基础高效建站?  建站DNS解析失败?如何正确配置域名服务器?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  IOS倒计时设置UIButton标题title的抖动问题  如何在Tomcat中配置并部署网站项目?  相册网站制作软件,图片上的网址怎么复制?  公众号网站制作网页,微信公众号怎么制作?  如何选择服务器才能高效搭建专属网站?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  动图在线制作网站有哪些,滑动动图图集怎么做?  如何零基础在云服务器搭建WordPress站点?  如何用VPS主机快速搭建个人网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  制作营销网站公司,淘特是干什么用的?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  简单实现Android验证码  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。