nginx入门教程

张开发
2026/6/2 5:48:51 15 分钟阅读
nginx入门教程
1 Nginx简介1.1 Nginx概述Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点俄文Рамблер开发的公开版本1.19.6发布于2020年12月15日。主要作用:http服务器反向代理负载均衡1.2 Nginx优点Nginx 是一个很强大的高性能Web和反向代理服务器它具有很多非常优越的特性在连接高并发的情况下Nginx是Apache服务器不错的替代品Nginx能够支持高达 50,000 个并发连接数的响应1.3 为什么使用Nginx互联网飞速发展的今天大用户量高并发已经成为互联网的主体。怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢这是一些中小网站急需解决的问题。用单机tomcat搭建的网站在比较理想状态下能够承受的并发访问量在150到200左右。按照并发访问量占总用户数量的5%到10%这样计算单点tomcat网站的用户人数在1500到4000左右。对于为全国范围提供服务的网站显然是不够用的为了解决这个问题引入了负载均衡方法。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决并发过来的请求被平均分配到多个后台web服务器来处理这样压力就被分解开来。负载均衡服务器分为两种一种是通过硬件实现的负载均衡服务器简称硬负载。另一种是通过软件来实现的负载均衡简称软负载例如apache和nginx。1.4 正向代理Nginx是一款轻量级的Web服务器、反向代理服务器由于它的内存占用少启动极快高并发能力强在互联网项目中广泛应用。正向代理如果把局域网外的Internet想象成一个巨大的资源库则局域网中的客户端要访问Internet则需要通过代理服务器来访问这种代理服务就称为正向代理。由于防火墙的原因我们并不能直接访问谷歌那么我们可以借助VPN来实现这就是一个简单的正向代理的例子。这里你能够发现正向代理“代理”的是客户端而且客户端是知道目标的而目标是不知道客户端是通过VPN访问的。一般情况下如果没有特别说明代理技术默认说的是正向代理技术。关于正向代理的概念如下 正 向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】为了从原始服务器取得内容用户A向代理服务器Z发送一个请求并指定目标(服务器B)然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。从上面的概念中我们看出文中所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】这就是正向代理的意义所在。而为什么要用代理服务器去代替访问方【用户A】去访问服务器B呢这就要从代理服务器使用的意义说起。使用正向代理服务器作用主要有以下几点① 访问本无法访问的服务器B如下图我们抛除复杂的网络路由情节来看图假设图中路由器从左到右命名为R1R2 假设最初用户A要访问服务器B需要经过R1和R2路由器这样一个路由节点如果路由器R1或者路由器R2发生故障那么就无法访问服务器B了。但是如果用户 A让代理服务器Z去代替自己访问服务器B由于代理服务器Z没有在路由器R1或R2节点中而是通过其它的路由节点访问服务器B那么用户A就可以得到服务器B的数据了。现实中的例子就是“翻墙”。② 隐藏访问者的行踪如下图 我们可以看出服务器B并不知道访问自己的实际是用户A因为代理服务器Z代替用户A去直接与服务器B进行交互。我们总结一下 正向代理是一个位于客户端和原始服务器(originserver)之间的服务器为了从原始服务器取得内容客户端向代理发送一个请求并指定目标(原始服务器)然后代理向原始服务器转交请求并将获得的内容返回给客户端。总之一句话正向代理隐藏的是客户端1.5 反向代理反向代理指的是代理服务器根据客户端的请求从其关系的一组或多组后端服务器如Web服务器上获取资源然后再将这些资源返回给客户端的过程客户端只会得知代理服务器的IP地址而不知道在代理服务器后面的服务器集群的存在。**反向代理**其实客户端对代理是无感知的因为客户端不需要任何配置就可以访问我们只需要将请求发送到反向代理服务器由反向代理服务器去选择目标服务器获取数据后在返回给客户端此时反向代理服务器和目标服务器对外就是一个服务器暴露的是代理服务器地址隐藏了真实服务器IP地址。反向代理正好与正向代理相反对于客户端而言代理服务器就像是原始服务器并且客户端不需要进行任何特别的设置。客户端向反向代理发送普通请求接着反向代理将判断向何处(原始服务器)转交请求并将获得的内容返回给客户端。使用反向代理服务器的作用如下① 保护和隐藏原始资源服务器如下图用户A始终认为它访问的是原始服务器B而不是代理服务器Z但实际上反向代理服务器接受用户A的应答从原始资源服务器B中取得用户A的需求资源然后发送给用户A。由于防火墙的作用只允许代理服务器Z访问原始资源服务器B。尽管在这个虚拟的环境下防火墙和反向代理的共同作用保护了原始资源服务器B但用户A并不知情。总之一句话反向代理隐藏的是服务器1.6 负载均衡客户端发送多个请求到服务器服务器处理请求有一些可能要与数据库进行交互服务器处理完毕后再将结果返回给客户端。这种架构模式对于早期的系统相对单一并发请求相对较少的情况下是比较适合的成本也低。但是随着信息数量的不断增长访问量和数据量的飞速增长以及系统业务的复杂度增加这种架构会造成服务器相应客户端的请求日益缓慢并发量特别大的时候还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题那么如何解决这种情况呢我们首先想到的可能是升级服务器的配置比如提高CPU执行频率加大内存等提高机器的物理性能来解决此问题硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子天猫双十一当天某个热销商品的瞬时访问量是极其庞大的那么类似上面的系统架构将机器都增加到现有的顶级物理配置都是不能够满足需求的。那么怎么办呢上面的分析我们去掉了增加服务器物理配置来解决问题的办法也就是说纵向解决问题的办法行不通了那么横向增加服务器的数量呢这时候集群的概念产生了单个服务器解决不了我们增加服务器的数量然后将请求分发到各个服务器上将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上将负载分发到不同的服务器也就是我们所说的负载均衡。1.7 动静分离为了加快网站的解析速度可以把动态页面和静态页面由不同的服务器来解析加快解析速度。降低原来单个服务器的压力。2 Nginx安装2.1 Nginx下载官方网站http://nginx.org/2.2 Nginx在windows下安装双击 nginx.exe 一闪而过在浏览器中访问localhost:802.3 Nginx在linux下安装Nginx官网有详细的安装步骤具体内容可参考官网 https://nginx.org/配置Nginx yum存储库创建/etc/yum.repos.d/nginx.repo文件sudovim/etc/yum.repos.d/nginx.repo增加如下内容[nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue [nginx-mainline] namenginx mainline repo baseurlhttp://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck1 enabled0 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue在线安装Nginx执行以下命令安装Nginxsudoyuminstallnginx启动Nginx执行以下命令启动Nginxsudosystemctl start nginx执行以下命令查看Nginx运行状态sudosystemctl status nginx执行以下命令设置开机自启sudosystemctlenablenginx访问Nginx服务默认首页访问http://192.168.10.102能访问到如下页面则证明Nginx运行正常。2.4 Docker容器Nginx第一步拉取镜像dockerpull nginx第二步启动docker run -d --namenginx -p 80:80 -v nginx_conf:/etc/nginx -v nginx_html:/usr/share/nginx/html -v nginx_logs:/var/log/nginx nginx3 Nginx配置与应用3.1 重要的目录、文件Nginx中有很多十分重要的目录或者文件下面对核心内容进行介绍配置文件相关/etc/nginx/主要的Nginx配置文件目录。/etc/nginx/nginx.confNginx的主配置文件包含全局配置信息。/etc/nginx/conf.d/这个目录通常包含一些附加的配置文件默认情况下主配置文件/etc/nginx/nginx.conf会引入该目录的所有文件。日志相关/var/log/nginx/Nginx的日志文件目录包括访问日志和错误日志。/var/log/nginx/access.log访问日志记录所有进入服务器的请求。/var/log/nginx/error.log错误日志记录服务器处理过程中的错误信息。3.2 配置文件概述配置文件结构Nginx的配置文件结构层次分明整个文件分为多个区块block每个区块下可配置各种参数也可包含其子级区块。重要配置说明下面分块介绍重要的配置参数main blockmain block位于配置文件的最外层其包含了影响Nginx服务器整体行为的全局参数例如user定义Nginx工作进程的用户和用户组。worker_processes指定Nginx使用的工作进程数。error_log配置全局错误日志文件路径。events blockevents block用于配置Nginx服务器的事件处理机制主要配置Nginx如何处理客户端连接。http blockhttp block是Nginx配置的主要部分用于配置HTTP服务器和相关功能。server blockserver block用于虚拟主机的具体配置。一个http block可以包含多个server block。虚拟主机Nginx支持在一台物理服务上托管多个web应用每个web应用对应着一个虚拟主机例如我们需要在server02中部署移动端和后台管理系统的两个前端项目就需要配置两个server block。listen指定虚拟主机监听的端口号。server_name指定虚拟主机的域名或者IP。知识点由于一台物理服务器可以多个IP地址例如双网卡并且一个IP地址还可以绑定多个域名。所以在匹配虚拟主机时客户端请求的域名或IP地址也会作为一个判断根据。所以不同的虚拟主机可能拥有不同的server_name。location block用于配置请求内容的位置一个server block可以包含多个location block。root指定用于查找静态文件的根目录。proxy_pass配置反向代理到后端服务器的地址。3.3 nginx配置文件详解配置文件中有很多# 开头的表示注释内容我们去掉所有以 # 开头的段落精简之后的内容如下#配置工作进程数目根据硬件调整通常等于CPU数量或者2倍于CPU数量 worker_processes 1; #配置工作模式和连接数 events { worker_connections 1024; } #配置http服务器,利用它的反向代理功能提供负载均衡支持 http { #配置nginx支持哪些多媒体类型可以在conf/mime.types查看支持哪些多媒体类型 include mime.types; #默认文件类型 流类型可以理解为支持任意类型 default_type application/octet-stream; #开启高效文件传输模式 sendfile on; #长连接超时时间单位是秒 keepalive_timeout 65; #配置虚拟主机 server { #配置监听端口 listen 80; #配置服务名 server_name localhost; #默认的匹配斜杠/的请求当访问路径中有斜杠/会被该location匹配到并进行处理 location / { #root是配置服务器的默认网站根目录位置默认为nginx安装主目录下的html目录 root html; #配置首页文件的名称 index index.html index.htm; } #配置50x错误页面 error_page 500 502 503 504 /50x.html; location /50x.html { root html; } }根据上述文件我们可以很明显的将nginx.conf 配置文件分为三部分第一部分全局块从配置文件开始到 events 块之间的内容主要会设置一些影响nginx 服务器整体运行的配置指令主要包括配置运行 Nginx 服务器的用户组、允许生成的 worker process 数进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。比如上面第一行配置的worker_processes 1;这是 Nginx 服务器并发处理服务的关键配置worker_processes值越大可以支持的并发处理量也越多但是会受到硬件、软件等设备的制约第二部分events块events { worker_connections 1024; }events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接常用的设置包括是否开启对多 work process 下的网络连接进行序列化是否允许同时接收多个网络连接选取哪种事件驱动模型来处理连接请求每个 work process 可以同时支持的最大连接数等。上述例子就表示每个 work process 支持的最大连接数为 1024.第三部分http块http{include mime.types;default_type application/octet-stream;sendfile on;upstream serverlist{server localhost:8080;server localhost:8090;}keepalive_timeout65;server{listen80;server_name localhost;location/{#root html;#index index.html index.htm;proxy_pass http://serverlist;}error_page500502503504/50x.html;location/50x.html{root html;}}}这算是 Nginx 服务器配置中最频繁部分代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。http{include mime.types;default_type application/octet-stream;sendfile on;upstream serverlist{server localhost:8080;server localhost:8090;}keepalive_timeout65;server{listen80;server_name localhost;location /{#root html;#index index.html index.htm;proxy_pass http://serverlist;}error_page500502503504/50x.html;location/50x.html{root html;}}}这算是 Nginx 服务器配置中最频繁部分代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

更多文章