这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作。前提是nginx已经被安装到你的服务器上。如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装。这篇手册主要内容:1. 如何启动和停止nginx,如何加载nginx配置;

2.配置文件的结构;3.如何安装nginx来做静态内容的服务器;4,如何配置nginx作为代理服务器;5:如何连接FastCGI应用。

nginx有一个主进程和多个工作进程。主进程的作用是读和验证配置文件,启动工作进程。工作进程正在处理请求。nginx应用事件驱动模型和os依赖机制来在工作进程之间有效的分发请求(负载均衡)。工作进程的数目定义在配置文件中,在一个特定的配置中一般是固定的或者可以根据可用的cpu 内核来动态修改这个数量。工作进程参考:http://nginx.org/en/docs/ngx_core_module.html#worker_processes

nginx及其模块如何工作取决于配置文件的定义。默认情况下,配置文件为:nginx.confand 目录为/usr/local/nginx/conf/etc/nginx, 或者/usr/local/etc/nginx.

启动、停止、重新加载ngnix配置文件

启动nginx,直接执行可运行文件即可。一旦nginx启动完成,可以通过可运行参数s来控制nginx的运行。

语法如下:

nginx -s signal

signal可选项

  • stop — 快速停止
  • quit — 完整停止
  • reload —重新加载
  • reopen — 重新打开日志文件

例如,停止nginx但等待工作进程处理完成当前的请求,可以使用下面的命令:

nginx -s quit

注意:这个命令的执行者必须是和启动nginx的是同一个用户。

直接修改配置文件将不会立即生效,需要重启nginx或者向nginx发送reload配置文件命令:

nginx -s reload

当主进程收到重新加载配置的信号后,它先检测新配置的语法是否规范,然后开始尝试加载新的配置。如果上面的步骤成功,主进程开始启动新的工作进程并且发停止信号给旧的工作进程;否则,主进程回滚到改变前的配置,并继续使用旧的配置工作。旧的工作进程接受到停止工作信号,它停止接受新的连接请求,但继续处理当前的请求知道这些请求被处理完成。最后,旧的工作进程退出。

nginx进程也可以通过unix工具进行处理,例如kill命令。unix工具可以通过进程ID作为参数来进行处理。默认情况下,nginx主进程的id写入/usr/local/nginx/logs或者/var/run文件中。例如,如果主进程的id是1628,发送quit信号将会使nginx完整退出,命令如下;

kill -s Quit 1628

同样,也可以功过ps命令来获取nginx运行的所有进程列表,例如下面的方法:

ps -ax | grep nginx

想获取更多nginx信号的信息,请参考下一篇:nginx控制。

配置文件的结构

ngnix的配置包含了许多模块,每个模块使用指令来运行。指令包含简单指令和块指令。简单指令通过空格来分离名称和参数,使用分号(;)作为结尾;块指令和简单指令有相同的结构,但不是以分号结尾而是以大括号({})包含指令。如果一个块指令中大括号内含有其它指令,那么括号内的叫做上下文(例如:事件、http、服务器、位置)。

在配置文件中,不在任何上下文的指令被认为存在于主上下文。事件和http指令就存在于主上下文中,server在http上下文中,位置在server上下文中。

配置文件使用#号作为注释符号。

为静态文件提供服务

一个web服务器的重要工作就是为静态文件服务。例如,你想根据请求的不同,去不同目录去请求服务:/data/www存放html文件,/data/images存放图片信息。这就需要修改配置文件,建立一个服务器块,在这个http块中建立服务器块,服务器块内再建立两个不同的位置块。

首先,创建/data/www目录并把一个包含任意内容的index.html文件放入该目录;创建/data/images目录,放置一些图片。

然后,打开配置文件。默认配置文件中已经包含了一些server块的实例,大部分被注释掉了。现在注释掉所有的类似块,新写一个server块:

http {server {}
}

通常,配置文件可能会包含几个server块,server通常指定名称和监控端口。当nginx决定哪个server进程处理请求时,它测试uri请求报文头而不是定义在server块中的位置指令的参数。

增加下面的位置块到服务器块中:

location / {root /data/www;
}

位置包括中定义的“/”前缀和请求uri进行比较。如果和uri中请求匹配,uri将增加root指令的路径到uri中,亦即到本地文件系统的路径/data/www下去响应请求。如果有多个位置块匹配,nginx选择最长后缀的那个。以上的位置块提供了最短的前缀(长度为1),因此当只有所有别的位置块都不能提供匹配时,这个模块才能使用到。

接下来,增加第二个位置块:

location /images/ {root /data;
}

它将匹配以/images/开头的请求(位置“/”也匹配这些request,但它的前缀更短)。

上述完整的配置如下:

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

上述已经是一个可以运行的服务器的配置了,该服务器监听http标准端口80,可以通过htt://localhost/来访问本地机器。如果请求以/images/开头,那么该服务器将从目录/data/images/下获取文件来应答请求。例如:请求http://localhost/images/example.png发送后,nginx将发送/data/images/example.png文件应答请求。如果该文件不存在,nginx将发送404返回。不是以/images/开头的请求将会被映射到/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实例。

首先,定义被代理服务器,这可以通过在配置文件中增加一个或者多个服务器块,具体内容如下:

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

这个简单的服务器监听端口8080(上个例子中没有使用listen是因为使用http标准端口80),映射所有的请求到本地文件系统的/data/up1目录,创建此目录并放置index.html文件到该目录。注意root指令被放置到服务器上下文。当选择提供服务的位置块不包含自己的root指令时该root指令将被使用。

接下来,使用上篇服务器的配置并修改,使之成为一个代理服务器的配置。在第一个位置块中,在第一行的参数中添加proxy_pass指令加代理服务器的协议、名称、端口。(在我们的例子中是http://localhost:8080):

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

我们将修改第二个位置块的配置,以前是映射/image/前缀的请求到/data/images/目录下的文件,为了和典型图片的文件扩展名相匹配,修改的位置块配置文件如下:

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

这个参数是一个正则表达式,它匹配以.gif,.jpg或者.png结尾的url。一个正则表达式应该以~开头。响应的请求将被映射到/data/images目录。

当nginx选择一个位置块为请求提供服务时,它首先检测指定带前缀的位置指令,别忘记优先选择最长前缀的,再检测正则表达式。如果和一个正则表达式匹配,nginx选择这个位置块,否则选择最初的那个。

完整的代理服务器配置如下:

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

这个服务器将过滤以以.gif,.jpg或者.png结尾的请求,然后映射到目录/data/images 下(通过增加url到root指令参数),转发其它请求到配置的被代理服务器中。

更多用来配置代理连接的指令可以参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

建立FashCGI代理

nginx可以用来追踪到FastCGI 服务器上的请求,FastCGI服务器可以运行不同框架不同编程语言(例如php)构建的应用程序。

适用FastCGI服务器运行的nginx最基本配置包括:使用fastcgi_pass指令而非proxy_pass;fastcgi_param指令设置发送参数到Fastcgi服务器。假定可以通过http://localhost:9000来访问FastCGI服务器。使用上章的代理服务器配置,替换proxy_pass指令为fastcgi_pass指令并改变参数到localhost:9000.对于PHP,SCRIPT_FILENAME参数用来决定脚本名称,QUERY_STRING参数用来传送请求参数,完整配置如下:

server {location / {fastcgi_pass  localhost:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param QUERY_STRING    $query_string;}location ~ \.(gif|jpg|png)$ {root /data/images;}
}

这将建立一个服务器,该服务器追踪到被代理的服务器的所有请求(静态图片除外),这个服务器使用FastCGI协议通过localhost:9000来操作。

转载于:https://www.cnblogs.com/davidwang456/p/3426362.html

nginx 学习笔记(2) nginx新手入门相关推荐

  1. nginx 学习笔记(1) nginx安装

    1.nginx安装 根据操作系统的不同,nginx的安装方式也不相同. 1.1 对linux系统来说,nginx.org提供了nginx安装包.http://nginx.org/en/linux_pa ...

  2. nginx学习笔记(7)Nginx如何处理一个请求---转载

    如何防止处理未定义主机名的请求 基于域名和IP混合的虚拟主机 一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在 ...

  3. nginx 学习笔记(5) nginx调试日志

    为启动一个调试日志,nginx需要在构建时配置城支持调试模式. ./configure --with-debug ... 而且调试级别应该使用err_log指令来设置: err_log /path/t ...

  4. nginx 学习笔记(3) nginx管理

    nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...

  5. C语言学习笔记知识点齐全——新手入门必看【建议收藏】

    终身受益的700个网站[史上最全]--建议收藏"卑微的小丑"总有一个可以帮助你!!! https://blog.csdn.net/liu17234050/article/detai ...

  6. nginx 学习笔记(6) nginx配置文件中的度量单位

    容量大小可以用比特(byte),千比特(kilobyte,后缀k或者K)或者兆(megabytes,后缀m或者M),例如:"1024","8k","1 ...

  7. Nginx学习笔记09——URLRewrite伪静态

    URLRewrite 伪静态配置 因为jsp获取url参数很方便,所以需要将tomcat服务器上的index.html转为jsp格式的,方式是在html文件开头加上<%@ page conten ...

  8. Nginx 学习笔记

    Nginx 学习笔记 文章目录 Nginx 学习笔记 1.Nginx 的简介 1.1正向代理 1.2反向代理 1.3负载均衡 1.4动静分离 1.5Nginx的安装 1.6Nginx的常用命令 1.7 ...

  9. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

最新文章

  1. PHP中spl_autoload_register函数的用法
  2. 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
  3. dubbox 编译 和 测试
  4. 看视频笔记1【wpf】
  5. 思科三层交换机不同vlan互通_利用单个三层交换机实现不同vlan和不同网段之间互通(华为和cisco)...
  6. LabelImg操作及快捷键
  7. Android音频底层调试-基于tinyalsa
  8. Java学习笔记之:Java引用数据类型之字符串
  9. java对日期Date类进行加减运算、年份加减,月份加减
  10. leetCode 题 - 100. 相同的树
  11. 2_1 输入10个id并查找是否存在
  12. (67)Vue-cli 项目搭建
  13. camera ---(6)双摄成像原理
  14. 毕设题目:Matlab风电功率预测
  15. 微信小程序 选择器 picker ;demo大全附效果图
  16. linux终端安装deb文件,如何通过命令行安装.deb文件?
  17. PAT 1010 月饼
  18. 使用windows日志监控AD安全性的五大挑战
  19. RGB, YUV及相关标准
  20. 计算机相关期刊阅读,计算机领域的所有SCI一区期刊,这是最顶级期刊了.doc

热门文章

  1. python画相关性可视化图上三角_完成这50个Matplotlib代码,你也能画出优秀的图表...
  2. java 分布式 redis缓存技术_JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载...
  3. ue4小白人骨骼定义_UE4角色骨架创建流程_资源库
  4. c语言课设学生管理程序,c语言程序课程设计学生成绩管理程序.doc
  5. java se 6u111_linux下查看已经安装的jdk 并卸载jdk
  6. 机器学习——线性回归数学推导
  7. 整数、浮点数在计算机中的存储,-128二进制怎么表示,
  8. AttributeError: module ‘grpc.experimental.aio‘ has no attribute ‘StreamUnaryCall‘
  9. python 提取字符串中的中文字符
  10. 空间金字塔池化SPP