第七天(Nginx第一篇)
Nginx由浅到深
前言
在我们的开发过程中,Nginx是经常使用到的工具,我们常常用来做反向代理、负载均衡等,由于没有系统的学习,对nginx的使用和理解都停留在表面,因此,在这里将nginx进行一次系统的学习,并记录学习过程,本文没有进行实际操作,某些步骤可能存在差错
一、nginx的基本概念
nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。有报告表明能支持高达50000个并发连接数。 tomcat 最多只支持200个并发处理
1、反向代理
说到反向代理,不得不说说正向代理,什么是正向代理,如果把局域网外的internet想象成一个巨大的资源库,则局域网中的客户端要访问internet,则需要通过代理服务器来访问,这种代理服务器就称为正向代理。简单来说,就是访问一个网址,先给浏览器配置代理服务器(区别与反向代理),通过代理服务器再去帮我们访问网址。
反向代理: 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,目标服务器处理完后返回数据,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。如图
2、负载均衡
在我们传统单一的web项目中,完整的一个过程是:客户端发起请求 --> 服务器 --> 数据库,然后返回到客户端,在并发量少时,这样是没问题的,但随着使用人群的增多,并发量变大,项目就会出现性能瓶颈,经常出现宕机的情况。为了解决这个问题,我们有许多解决方案,最直接的就是提高硬件设施的性能,但这样做不但成本高,而且随着项目的复杂度、访问量等继续增大,带来的问题也越来越多。我们打个比喻,开始2个人同时吃饭(并发),我们拿个小锅就可以解决,然后到10个,我们可以换成大一点的,如果到100个人,我们就不太可能买一口能够做100份食物的锅了,这时,我们可以买10口做10个人的饭的锅,这样也能满足我们的需求。负载均衡也一样,我们通过多台服务器(集群)来解决大并发的问题,nginx自动帮我们将请求分配到各个服务器。
3、动静分离
用来加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析的速度,降低原来单个服务器的压力。如图:
二、nginx在linux下的安装
安装前请下载好nginx安装包
1、安装nginx相关依赖
依赖包括:pcre-8.37.tar.gz、openssl-1.0.1t.tar.gz、zlib-1.2.8.tar.gz、nginx-1.11.1.tar.gz
安装 pcre 依赖
下载 pcre 压缩文件依赖
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
解压文件
命令 tar –xvf pcre-8.37.tar.gz
编译
进入 pcre-8.37 执行 ./configure,完成后回到 pcre 目录下执行 make && make install
4.查看 pcre 依赖是否安装成功
执行pcre-config --version
安装剩余依赖
输入命令
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2、安装nginx
解压 nginx tar -xvf nginx-1.12.2.tar.gz 进入解压后的目录,执行 ./configure
进入解压后的目录会有一个configure文件,输入 ./configure 命令执行
编译
make && make install
3、启动nginx
启动看看有没有问题,先进入目录 /usr/local/nginx/sbin/nginx(要root权限下进入),执行
./nginx
然后浏览器访问自己服务器的ip+80端口,访问到的前提是防火墙开放了80端口,如果访问到显示Welcome to nginx!,则是成功了。如果没有成功,要排查下防火墙是否开放了端口,操作如下:
1.关闭防火墙
2.开放端口
3.重启防火墙
开放防火墙的某个端口,每个linux系统操作命令可能存在差异,演示为Centos 6
查看防火墙当前设置,具体开放的端口号信息 /etc/init.d/iptables status 配置防火墙策略 vi 或 vim vim /etc/sysconfig/iptables 开放 66 88 端口 -A INPUT -m state –state NEW -m tcp -p tcp –dport 66 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 88 -j ACCEPT 保存退出 按 esc 然后 :wq
重启防火墙
service iptables restart
其他命令
查看防火墙状态
service iptables status
开启防火墙
service iptables start
关闭防火墙
service iptables stop
三、nginx的基本操作
1、基本命令
注意,使用nginx操作命令前提条件,必须进入到nginx的目录 /usr/local/nginx/sbin 常用命令如下 # 查看版本号 ./nginx -v # 启动nginx ./nginx # 关闭nginx ./nginx -s stop # 重新加载nginx(修改配置文件使其生效) ./nginx -s reload
2、配置文件
nginx的配置文件在nginx目录下的conf目录,全名为nginx.conf
nginx的配置文件由三部分组成
全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令
比如配置 worker_processes 1; 这是nginx服务器并发处理服务的关键配置,它的值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
events块
events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等
比如配置 worker_connections 1024; 支持的最大连接数为1024,这部分配置对于nginx的性能影响较大,在实际中应灵活配置
http块
这是nginx配置中最频繁的一部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,需要注意的是,http块包括http全局块、server块
http全局块
这部分包括文件引入,MIME-TYPE定义,日志自定义、连接超时时间、单链接请求数上限等。
server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
比如配置,代表监听80端口,服务名称为localhost
listen 80;
server_name localhost;
location 块
一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
比如配置
location /{
root html;
index index.html main.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗