中文参考:https://www.jianshu.com/p/93ac21161ac6

英文参考:http://nginx.org/en/docs/beginners_guide.html

Nginx 是什么?

在部署Django, Flask等Python的Web 应用时,总是看到nginx,而且还总堵在那里。就想nginx 到底是怎么用的,就查了很多资料。

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev 在建立的项目时,使用基于 BSD 许可。

英文主页:http://nginx.net 。

Nginx 以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配 Lighttpd 的性能,同时还没有 Lighttpd 的内存泄漏问题,而且 Lighttpd 的 mod_proxy 也有一些问题并且很久没有更新。

现在,Igor 将源代码以类 BSD 许可证的形式发布。Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是 Apache2.2+mod_proxy_balancer 的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到 Apache 的近 2/3。对 proxy 和 rewrite 模块的支持很彻底,还支持 mod_fcgi、ssl、vhosts ,适合用来做 mongrel clusters 的前端 HTTP 响应。

安装

在linux上安装是:

前提准备:

sudo apt install curl gnupg2 ca-certificates lsb-release

安装:

sudo apt update
sudo apt install nginx可以看一下官方的 如何安装 nginx。

这篇教程主要讲解的是如果启用和停止 ngixn,和重新加载配置,描述配置文件的基本结构和怎样搭建一个 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-ssignal

signal 可以为下列命令之一:

stop — 直接关闭 nginx

quit — 会在处理完当前正在的请求后退出,也叫优雅关闭

reload — 重新加载配置文件,相当于重启

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 的配置:sudo nginx -t

测试nginx 的配置并显示:sudo nginx -T

单一的启动nginx:sudo nginx

启动nginx服务:sudo systemctl start nginx

对于上面的nginx 启动测试,用的哪个配置文件呢?

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

缺省配置:/etc/nginx/sites-available/default

帮助文件说主配置文件:/etc/nginx/nginx.conf

配置文件结构

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

// 简单指令

root /data/www;

块级指令和简单指令一样有着类似的结构,但是末尾不是分号而是用 {和} 大括号包裹的额外指令集。如果一个块级指令的大括号里有其他指令,则它被叫做一个上下文(比如:events,Module ngx_http_core_module,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_passhttp://localhost:8080/;

}

location~\.(gif|jpg|png)${

root/data/images;

}

}

该服务器会选择以 .gif,.jpg,或者 .png 结束的请求并且映射到 /data/images 目录(通过添加 URI 给 root 指令的参数),接着将其他所有的请求映射到上述被代理的服务器。 为了使用新的配置,像前几个章节描述的一样,需要向 nginx 发送重载信号。 这还有很多其他的指令可以用于进一步配置代理连接。

nginx 基本入门相关推荐

  1. Nginx+uWSGI 入门

    2019独角兽企业重金招聘Python工程师标准>>> Nginx+uWSGI 入门 开始 确保一下软件包安装被安装上: <pre> ubuntu: #apt-get i ...

  2. Nginx从入门到应用-姜威-专题视频课程

    Nginx从入门到应用-2749人已学习 课程介绍         Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMT ...

  3. Nginx 的入门教程

    Nginx 的特点是: 内存占用少 并发能力强(可支持大约 50000 个并发连接) 配置超简洁 bug 非常少 安装超简单 服务特别稳(几个月也不需要重启) 基于这些特点,越来越多的网站开始使用 N ...

  4. Nginx从入门到入土

    Nginx从入门到入土 Rewrite 规则 Rewrite规则可以实现对url的重写,以及重定向 指令语法:rewrite regex replacement [flag]; regex : 是代表 ...

  5. Nginx快速入门笔记

    Nginx快速入门笔记 01.Nginx简介 架构:没有什么是加一层解决不了的 什么是Nginx? Nginx是一个高性能的HTTP和方向代理web服务器,同时也提供了IMAP/POP3/SMTP(邮 ...

  6. 千言万句,Nginx从入门到精通,看这一篇足矣

    本文是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx. Nginx 简介 什么是 Nginx? Nginx(engine x)是一款轻量级的 Web 服务器 .反向代理服务器及电子邮 ...

  7. 【Flask】Nginx / Gunicorn入门:部署你的Flask项目

    什么是Nginx? 参考:Nginx入门 什么是反向代理呢? 我们很多人应该都用过淘宝,要知道每天同时连接到淘宝网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个 ...

  8. Nginx 从入门到实践,万字详解!

    最近越来越频繁地遇到需要配置反向代理的场景,在自己搭建博客的时候,也不可避免要用到 Nginx,所以这段时间集中学习了一下 Nginx,同时做了一些笔记,希望也可以帮助到大家- ???? 这篇文章会在 ...

  9. Nginx 新手入门

    安装 在centOS上安装nginx,最新版本1.21的要求centOS 7.4.x以上的,我们用的是centOS 7.3,试了一下,也能装. centOS安装教程在这里,下面简单翻译下,大致这些步骤 ...

  10. NGINX由入门到精通:Nginx介绍

    原文:http://www.aosabook.org/en/nginx.html nginx(发音"engine x")是俄罗斯软件工程师Igor Sysoev开发的免费开源web ...

最新文章

  1. 无法停止‘通用卷’设备的解决方法
  2. 计算机用户win7修改不,Win7电脑时间改不了的解决方法
  3. 33.JAVA编程思想——JAVA IO File类
  4. 三星Galaxy S22 Ultra更多细节:采用Note系列外观因素
  5. c++ 01_02 study note
  6. Win10首次启动出现计算机意外地重启或遇到错误的解决方法
  7. vscode git删除仓库
  8. 算法-求二进制数中1的个数
  9. 解决android sdk manage打开闪退的解决方法
  10. linux 配置软件安装源
  11. 最新!2019 年中国程序员薪资生存调查报告出炉
  12. 国家开放大学《国际经济法》第二章 国际货物买卖法 边学边练
  13. 面试题 猜颜色球游戏
  14. 【音视频】国标双向对讲方案
  15. 音响设备常用连接头及音视频线材的制作方法
  16. 【开发日志-已归档】2021-07
  17. weekofyear跨年问题
  18. 蓝桥杯真题:天干地支
  19. C++:实现量化Integration积分测试实例
  20. 最新java开发工具_2019 最新 Java 开发工具教程,都在这了

热门文章

  1. 蓝桥杯单片机——PWM脉宽调制(10)
  2. 抖音热门技术998 修改视频md5
  3. 计算机调整分区出现无法读取文件提示,电脑出现文件或目录损坏无法读取怎么办?...
  4. 彻底清除mplay.com与mplay.exe病毒
  5. 华东师范大学计算机专硕学硕,学硕?专硕?该怎么选择
  6. 一些常用软件镜像地址
  7. mysql简历上怎么写_新手程序员简历应该怎么写?
  8. Lua脚本做游戏外挂
  9. 【转发分享】基于51单片机摩尔斯电码收发控制设计-基于51单片机智能恒温控制系统-基于51单片机霍尔测速直流电机设计-51单片机和MAX1898的智能手机充电器设计-基于51单片机的智能指纹考勤系统
  10. UltraCompare 激活