安装

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

  • 安装工具
sudo yum install yum-utils
  • 设置yum的仓库,增加文件ect/yum.repos.d/nginx.repo,内容如下
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

这样默认安装的是稳定版,如果想要直接安装最新主线版本,可以运行这个yum命令

sudo yum-config-manager --enable nginx-mainline
  • 执行如下命令安装nginx
sudo yum install nginx

安装完成。

新手入门

本篇将介绍如何启动、停止nginx,重新加载配置,解释配置文件的结构,并解释如何设置该配置文件以便nginx可以提供静态文件,如何把nginx配置为一个反向代理,以及如何连接一个FastCGI应用。

nginx 有一个master进程,以及多个worker进程,master进程的主要工作是读取并评估配置文件,维护多个worker进程。从进程用于处理实际的web请求。nginx依赖于事件模型以及其他一些独立于操作系统的机制来有效的在多个worker进程之间分发客户请求。
worker进程的数量在配置文件中定义,可以针对给定配置固定,也可以根据可用CPU内核的数量自动调整。
nginx及其模块的工作方式在配置文件中确定。默认情况下,配置文件名为nginx.conf,并放置在目录/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx中。

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

只要在bash环境下输入nginx即可启动nginx服务

nginx

启动之后,就可以通过信号量量控制该nginx服务,格式如下

nginx -s signal

其中signal可以是以下几个值

  • stop — fast shutdown
  • quit — graceful shutdown
  • reload — reloading the configuration file
  • reopen — reopening the log files

比如,执行如下的命令可以结束nginx进程,他会等待worker进程处理完当前正在执行的请求之后再结束。

nginx -s quit
这个命令必须使用启动该nginx进程的用户来执行。

配置文件改变之后,要生效的话,要执行reload命令。

nginx -s reload

master进程收到reload信号量之后,他会检查配置文件的语法是否正确,并且尝试加载该配置,如果加载成功,master进程会开启一个新的worker进程,并且发送信号给老的worker进程,要他结束运行。如果加载失败,则master会回滚配置,老的worker进程继续运行。
worker进程收到结束命令之后,将停止接受新的连接,但会继续处理完手上的连接,处理完之后就关闭。

也可使用linux的kill命令来给nginx进程发送消息,如下命令直接把 -s QUIT命令发送给1628进程。

kill -s QUIT 1628

可以通过如下命令来查找正在运行的nginx进程

ps -aux  | grep nginx


可以看到进程描述,是nginx master 还是nginx worker

配置文件结构

nginx由配置文件中指定的指令控制的模块组成。指令分为简单指令和块指令。简单指令由名称和参数组成,以空格分隔,以分号(;)结尾。块指令与简单指令具有相同的结构,但它不是分号,而是以一组附加指令结束,这些指令由大括号( { 和 })包围。如果块指令可以在大括号内包含其他指令,则称为上下文(例如:event、http、server和loction)。
那些不在任何大括号内的指令可以被认为是处于main上下文中。events和http指令放在main上下文内,server放在http内,location放在server内。
#开头的行是注释。

提供静态内容

web服务器的一项重要任务是提供文件(如图像或静态HTML页面)。您将实现一个示例,其中根据请求,将从不同的本地目录:/data/www(可能包含HTML文件)和/data/images(包含图像)提供文件。这将需要编辑配置文件,并在http块内设置一个server块,其中包含两个location块
首先,创建/data/www目录,并将包含任何文本内容的index.html文件放入其中,然后创建/data/images目录并在其中放置一些图像。
接下来,打开配置文件。默认配置文件已经包含了server块的几个示例,大部分都被注释掉了。现在,注释掉所有这些块并启动一个新的server块:

http {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/在本地计算机上访问 。响应以/images/开头的 URI 请求,服务器将从/data/images目录发送文件。例如,为了响应 http://localhost/images/example.png请求,nginx 将发送/data/images/example.png文件。如果这样的文件不存在,nginx 将发送一个响应,指示 404 错误。对于其他不以/images/开头的URI请求,都将被映射到/data/www目录。例如,为了响应 http://localhost/some/example.html请求,nginx 将发送/data/www/some/example.html文件。

要应用该新配置,如果nginx没有启动,则使用nginx命令启动他;如果已经启动,则使用reload命令重新加载.

nginx -s reload
如果万一配置不生效,我们想要分析原因,则可以通过user/local/nginx/logs 或者 /var/log/nginx来查看日志

配置一个简单的代理服务器

nginx 的常见用途之一是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从它们接收响应,并将它们发送到客户端。

我们将配置一个基本的代理服务器,对于所有图像的请求,他将使用来自本地目录的文件来响应,对于所有其他请求将发送到代理服务器。在此示例中,两个服务器都将在单个 nginx 实例上定义。

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

这将是一个简单的服务器,它侦听端口 8080(在上个例子中,由于使用了标准端口 80 ,因此未指定该listen指令)并将所有请求映射到/data/up1本地文件系统上的目录。创建此目录并将index.html文件放入其中。请注意,该root指令位于 server上下文中,对于该server内后续其他的location指令,如果内部没有指定root指令,则使用该根路径下的root指令作为默认。

接下来,复用上一节的server配置并修改,使其成为一个代理服务器配置。在第一个location中,添加一个proxy_pass指令,在内容中带上协议(http://)、名称、以及端口号,也就是本例子中的(http://localhost:8080)

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

接下来修改第二个location指令,让他只处理特定类型的图片资源,如下。

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

~ .(gif|jpg|png)$ 是一个正则表达式,他将所有以 .gif, .jpg, .png结尾的URI都萤石到 /data/images目录下。
当nginx收到一个请求之后,他按照如下规则来定位对应的location块:

  • 是否有对应的前缀的location块,长度越长的越优先;
  • 然后检查正常表达式,看是否有匹配的表达式。
  • 如果都没有,则使用之前记住的location块。

此时,这个server块是这样的

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

重新加载该配置之后,该配置将生效,对于.gif, .png, .jpg结尾的图片,nginx将使用 /data/images的本地文件响应,其他请求都将转到 http://localhost:8080代理服务器。
关于代理服务器的更多配置指令,可以参考这里

Nginx 新手入门相关推荐

  1. nginx 学习笔记(2) nginx新手入门

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

  2. Nginx 新手入门学习

    来自 手撸架构,Nginx 面试40问 什么是Nginx? Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP.HTTPS.SMTP.POP3 和 IMAP 协议.他实现非常高效的 ...

  3. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了"蔷薇Nina"的"Nginx 相关介绍(Nginx是什么?能干嘛?)"一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前 ...

  4. php网站入门鹿泉银山,01PHP编程新手入门第一步

    01PHP编程新手入门第一步 很多时候刚入手不知道从哪里下手.这个时候选择一些课程是最好的方法,自己摸索半天可能比不过别人5分钟讲解.就编程而言: 1:有个地方存储程序和数据库 可以选择云服务器,也可 ...

  5. Docker新手入门:基本用法

    Docker新手入门:基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker,今天终于算是正式开始学习了.在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少 ...

  6. 学微服务必经之路——Nacos新手入门(下)

    一位爱好技术的橘右京的哥哥橘左京 学微服务必经之路--Nacos新手入门(下) 1.服务发现 1.1 什么是服务发现 1.2 主流服务发现与配置中心对比 1.3 SpringCloud服务协作流程 1 ...

  7. 海洋cms新手入门安装配置教程

    在安装本系统前,请先确认您的服务器环境是否符合海洋cms环境要求: Windows 平台: IIS/Apache/Nginx + PHP(5.x) + MySQL(5.x) Linux/Unix 平台 ...

  8. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  9. LINUX新手入门-1.装系统

    LINUX新手入门-1.装系统 首先我们用虚拟机模拟 装linux系统,然后下一步下一步,然后完成后,编辑一些设置,把镜像放上面就可以了 选第一项,安装系统,查看镜像是否能运行,直接跳过,选择语言 和 ...

最新文章

  1. Maven 传递性依赖
  2. 基于Spark的移动用户主要活动地点的挖掘算法实现以及JavaEE技术整合
  3. 【代码规范】prettier
  4. webstorm安装_WebStorm2019安装教程
  5. geometry-api-java 学习笔记(二)点 Point
  6. Windows Tftpd32 DHCP服务器 使用
  7. es6 filter函数的用法_Python 函数式编程指北,不只是面向对象哦!超级详细!
  8. php aws ses,python-在AWS SES上接收和解析电子邮件
  9. C++Socket编程总结
  10. 微信小程序中的json格式文件
  11. Dstream的action算子与RDD的action算子
  12. 字节工程师薪资排世界第五,中位数 43 万美元,2021 全球程序员收入报告出炉!...
  13. [BZOJ4303]数列
  14. Android支持库AndroidX和support-v4、appcompat-v7的前世今生!
  15. 单网卡配置内外网同时上网
  16. Asis CTF 2016 b00ks(堆溢出NULL byte off-by-one)
  17. 基本粒子群算法matlab 程序
  18. java8之CompletableFuture
  19. BJFU_数据结构习题_256病毒感染监测
  20. 笨拙的手指(寒假每日一题 1)

热门文章

  1. 赛事比赛|FLAIR遥感语义分割和域适应、baseline
  2. python的for语句写新的字符串_05 Python之字符串以及for循环
  3. JVM学习之:虚拟机中的运行时栈帧总结(一)
  4. spring4.x注解
  5. DB2 Catalog浅析学习笔记
  6. WTM+LayUI实现组件一对多的联动
  7. charles之弱网测试
  8. svn解决冲突Postpone , Accept base, Accept incoming, Reject incoming, Accept incoming for conflictsu区别
  9. Android 进阶——Framework 核心之dumpsys命令浅析
  10. 基于QT实现的昆特牌棋牌类游戏