nginx学习笔记
博主原创文章,转载请说明出处,但是不说我也管不了你🏳️
前言
本文首先会介绍nginx的基本特点,随后会介绍在Linux系统中如何配置nginx,来实现基本的web静态内容管理以及实现反向代理。更多内容可直接查询nginx官网,比较全。
正文
一、什么是nginx
1.1 nginx的出生
nginx(engine x)的最初概念于2002年诞生,在当时互联网正处于爆发期,nginx的最初作者Igor Sysoev与其余工程师都面临着一个共同问题:C10K问题(英:C10K problem,concurrentlyhandling ten thousand connections problem),该问题旨在解决如何处理超过 10,000 个并发连接。
起初Igor Sysoev尝试通过在Apache服务器上的改进来提升并发性能,只不过显然这样提升十分有限,于是Igor Sysoev决定开发一个全新的软件——即nginx雏形。
2004年10月4日,nginx第一个公开发行版公布。
1.2 nginx支持的服务
nginx最典型的使用方式就是将其部署于其他(例如Apache)服务器之前,而nginx可提供静态文件,并代理和缓冲应用服务器的动态内容。如果你加钱,nginx的商业版本还提供了流量管理和监控功能。一般来说,nginx可以提供以下功能:
- 作为一个基本的HTTP web服务器
- 为服务器提供反向代理
- 为服务器实现响应内容缓存
- 为服务器集群实现负载均衡
- 作为一个基本的TCP/UDP代理服务器
- 作为一个邮件代理服务器
关于nginx具体能提供的服务,请参考nginx官网首页的简述。
1.3 nginx的特点
nginx因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。作为一款轻量级的Web和反向代理服务器,nginx占用内存少、能支持高并发且并发能力很强。最后,nginx其实还有个特点,就是“配置可编程”,即用编程的方式去管理nginx的配置,编程语言用的是NGINX JavaScript (njs)。
二、nginx安装与启动
本文将在Ubuntu 18.04.6 LTS版本下演示nginx的安装与启动,其余系统大同小异,具体可参见官网文档。
2.1 检查nginx安装情况
查看是否已经安装nginx,如图查询结果为空说明未安装:
1 | |
【注:为啥会有这一步?因为我用的腾讯云现成的轻量级宝宝式一站全套一条龙服务器,可能啥都给我装好了,这一步是看看到底装没有】
2.2 选择合适的nginx版本
1 | |
可以看到除了第一个“纯洁”的nginx,后面几个nginx都有后缀。不带后缀的实际只是nginx的安装依赖包,有后缀的才是要装的nginx,不同后缀代表不同的版本,各版本的差异可以在debian的nginx仓库里面看到,这里只说三种重要的:
- core: 标准的 nginx 部署版本
- full: 在 core 版本的基础上,包含了常用的三方模块
- light: 简化版
这里就装原生态的core版本:
1 | |
输入确认“Y”,等两秒安装完成。
2.3 查看nginx版本,确认安装完成
1 | |
如图可以看到安装已完成。【注:如果显示command not found,则有可能是安装错误或者是环境变量未配置,请读者自行百度解决办法。nginx一般的安装路径在/usr/local/nginx/或者/etc/nginx/或者/usr/local/etc/nginx/】
2.4 启动nginx并查看运行状态
1 | |
如图,启动nginx后可以看到有一个master进程和多个工作进程正在运行。
输入netstat命令查看本机端口号情况:
1 | |
可以看到nginx已经在使用80端口号,即可以响应HTTP请求了【前提是防火墙开了80端口】。此时可以使用ifconfig查看本机ip,并使用位于同一局域网的设备的浏览器访问本机ip地址,结果如图:
2.5 nginx的文件目录结构
【注:感觉这个版本nginx安装目录四处开花,故对整体目录结构说明省略,主要关注重要文件】
nginx配置文件:nginx有两个配置文件,一个是主配置文件
nginx.conf,另一个可以算成类似于“引入库”的配置文件,位于conf.d目录下。可以在nginx.conf文件中配置include参数引入位于conf.d目录下的配置文件,使其生效。例如:若conf.d在/etc/nginx/目录下,则可以通过配置include /etc/nginx/conf.d/*.conf;来引入位于conf.d目录下的所有.conf配置文件,使其生效。nginx二进制文件:用于启动执行nginx的各种命令,一般位于
xx/sbin/目录下,可能为/usr/local/nginx/sbin/或者/usr/sbin/或者其他目录下。nginx静态html文件:默认的index.html文件即“Welcom to nginx!”界面文件一般位于
xx/html目录下,可能为/usr/local/nginx/html/或者/usr/share/nginx/html/或者其他目录下。
三、nginx的配置
3.1 配置文件结构
nginx实际由多个模块组成,而这些模块实际由配置文件中指定的指令控制。nginx配置文件中的指令分为两种:简单指令和块指令。【注:这是官网的说法,把这些参数配置说成为指令(directive)】
- 简单指令:由一个指令名和若干参数组成,各指令、参数用空格分隔开来,并以
;结尾。例如:pid /var/run/nginx.pid,使用了pid指令,其参数为/var/run/nginx.pid,整条指令指示了nginx.pid的文件路径。 - 块指令:由一个名称和一组指令组成,指令用
{}括住,括号里面的指令和普通指令结构相同。例如:
1 | |
nginx.conf配置文件中默认有三大块:全局块、events块和http块。实际上可以认为nginx.conf文件内容就是一个大的块指令,例如有如下nginx配置:
1 | |
【注:配置文件中#后面的一行内容将被视为注释】
3.2 配置nginx的静态资源服务
打开nginx.conf配置文件,可以看到里面已经默认有了http块:
在http块下新建一个server块,如下结构:
1 | |
随后在server块中添加location块:
1 | |
保存文件后,如果nginx已启动,则可以使用:
1 | |
让nginx直接重新读取配置而不必重启。随后可以尝试访问本地8080端口看看效果:
1 | |
由此完成了nginx静态资源的简单配置。
3.3 配置nginx实现反向代理
保持上面内容不变,为了简便起见,就用nginx反向代理自己,原地开始套娃。在http块内新增一个server块如下:
1 | |
保存文件后nginx再reload一下,之后测试一下访问:
1 | |
代理成功,完结。
参考资料
- nginx,nginx官网[EB/OL],https://nginx.org/en ↩︎