Nginx

Nginx_第1张图片

1. 基本概念  

1.1 什么是nginx

Nginx (engine x) 是一个 高性能 HTTP 和反向代理 web 服务器 [13] ,同时也提供了 IMAP( 交互邮件访问协 议)/POP3/SMTP 服务 (SMTP 协议的发送邮件服务器 ) Nginx 是由伊戈尔 · 赛索耶夫为俄罗斯访问量第二的 Rambler.ru站点(俄文: Рамблер )开发的,公开版本 1.19.6 发布于 2020 12 15 日。
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件( IMAP/POP3 )代理服务器,在 BSD-like 协 议下发行。其特点是占有内存少,并发能力强,事实上nginx 的并发能力在同类型的网页服务器中表现较好。这也是促使中国一些企业都在使用nginx , 其中典型的就是 BAT

1.2 nginx作用

1.2.1 基本的 web 服务器
web World Wide Web )即全球广域网,也称为万维网,它是一种基于超文本和 HTTP 的、全球性的、动态交互的、跨平台的分布式图形信息系统。
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl php 等。但是不支持 java Java 程序只能通过与 tomcat 配合完成。 Nginx 专为性能优化而开发, 性能是其最重要的考量 , 实现上非常注重效率 ,能经受高负载的考验, 有报告表明能支持高 达 50,000 个并发连接数。
tomcat 默认并发是 200( 官方 ), 可以修改 , 但实际用的时候也就 150 并发左右。
实操 1 tomcat 静态资源发布
Nginx_第2张图片

实操2 nginx静态资源发布

Nginx_第3张图片 1.2.2 正向代理服务器

正向代理,意思是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标( 原始服务器 ) ,然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet ,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
Nginx_第4张图片
为什么不直接访问互联网而需要使用正向代理?
正向代理的典型用途是为在防火墙内的局域网客户端提供访问 Internet 的途径。正向代理还可以使用缓冲特 性( mod_cache 提供 ) 减少网络使用率。
速记:正向代理主要是客户端配置的代理,侧重的是客户端通过代理解决问题,例如过滤资源、缓存、隐藏 客户端 ip 等。

1.2.3 反向代理服务器

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web 加速,即使用反向代理作为 Web 服务器的前置机来降低网络和服务器的负载,提高访问效率。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址
其中典型的应用就是接下来学习 nacos 集群或 gateway 集群的时候,需要使用反向代理进行负载均衡。
速记:反向代理主要是服务器配置的代理,侧重的是通过反向代理实现负载均衡和隐藏服务端真实访问地址 等。
1.2.4 负载均衡服务
负载均衡( Load Balance )其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、 FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
Nginx_第5张图片

1.2.5 动静分离

动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
Nginx_第6张图片

2.nginx安装 

https://nginx.p2hp.com/en/download.html

Nginx_第7张图片

2.1 window 下安装
window 下安装 nginx 只需要将 nginx 的压缩包解压到一个非中文目录即可。

 2.2 linux下安装

执行: yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

 安装nginx前需要确保linux上安装了gccPCRE zlibOpenSSL

1. 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境。
2. PCRE(Perl Compatible Regular Expressions) 是一个 Perl 库,包括 perl 兼容的正则表达式库。 nginx的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库, pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。命令:
3. zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib http 包的内容进行 gzip ,所以需要在Centos 上安装 zlib 库。
4. OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https 即在ssl 协议上传输 http ),所以需要在 Centos 安装 OpenSSL 库。
执行后等待安装完毕!
2.2.2 安装 nginx
1.将 nginx 安装包上传到 usr/src 目录下
2.解压到当前文件夹,命令为: tar -zxvf nginx-1.22.0.tar.gz
3.配置当前 nginx ,命令为: ./configure 这里其实也是执行 nginx 下的 configure 文件
4.执行命令: make && make install
拓展:
./configure( 配置 ) make( 编译 ) make install( 安装 ) 这三个命令,我们可以用 && 来把命令连接起来执行,表示当前一条命令正常结束后,后面的命令才会执行,这个办法很好,既节省时间,又可以防止发生错误。
例:
        ./configure && make && make install

 2.2.3 运行nginx

安装完 nginx 后,会在 路径 /usr/local 下自动生成 nginx 文件夹。这是自动生成的
进入 sbin 目录通过 ./nginx 命令启动 nginx 服务 cd /usr/local/nginx/sbin/

2.2.3 配置防火墙 

  windows 系统中访问 linux nginx,默认不能访问的,因为防火墙问题.

解决办法:
1 )关闭防火墙
2 )开放访问的端口号, 80 端口
防火墙的开启、关闭、禁用命令
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)检查防火墙状态:systemctl status firewalld
使用 firewall-cmd 配置端口
(1)查看防火墙状态:firewall-cmd --state
(2)重新加载配置:firewall-cmd --reload
(3)查看开放的端口:firewall-cmd --list-ports
(4)开启防火墙端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
(5)关闭端口命令:firewall-cmd --zone= public --remove-port=80/tcp --permanent
(6)查看端口是否打开:firewall-cmd --zone= public --query-port=80/tcp
开放防护墙端口 ( 设置白名单 )
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

3. nignx的常用命令和配置文件

3.1 常用命令
执行命令的前提条件,必须进入 nginx 下的 /sbin 的目录中 cd /usr/local/nginx/sbin
- 查看 nginx 的版本号 ./nginx -v
- 启动 nginx ./nginx
- 关闭nginx ./nginx -s stop
- 重新加载 nginx ./nginx -s reload
3.2 配置文件
nginx 配置文件位置
cd /usr/local/nginx/conf/nginx.conf
打开文件可以查看到 nginx 配置文件主要被分为三个部分
3.2.1 第一部分:全局块
Nginx_第8张图片

 user nobody

主模块命令, 指定 Nginx worker 进程运行用户以及用户组,默认由 nobody 账号运行。
worker_processes
指定 nginx 要开启的进程数,单个节点的 nginx 启动有 1 master 进程和 n worker 进程。
这里我们先查看 nginx 进程情况 ps -ef|grep nginx
可以尝试多配置几个进程,然后我们再次通过进程查看
master 进程介绍
(1)读取并验正配置信息;
(2)创建、绑定及关闭套接字( Socket )连接; 协议 地址 端口号
(3)启动、终止及维护 worker 进程的个数;
worker 进程介绍
(1)接收、传入并处理来自客户端的连接;
(2)提供反向代理及过滤功能;
(3) nginx 任何能完成的其它任务;
pid
用来指定进程 id 的存储文件位置,注释的就是 pid 默认存储的位置。
log
日志存放路径和和日志级别的设定,这部分没有特殊情况默认也够用
3.2.2 第二部分: events
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work
process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
比如 worker_connections 1024; 支持的最大连接数为 1024
3.2.3 第三部分:内容块
http 内容块
Nginx_第9张图片
http 块又包括 http 全局块、 server 块。 http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单连接请求数上限等。
include
设置 nginx 支持的多媒体文件类型, mime.types 是引用 nginx 下的媒体类型文件。 路径在 config 目录下,可自行查看。
default_type
默认值为 application/octet-stream; 表示为二进制流传输。
log_fomat

你可能感兴趣的:(nginx,服务器,运维)