狂神说ngnix笔记
Nginx
一、什么是Nginx
Nginx(engine x)是一个轻量级高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好,Nginx是一个安装非常简单、配置文件非常简洁,(支持perl语法)、Bug非常少的服务。Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够达到高达50,000个并发连接的响应。
二、Nginx的作用
Http代理,反向代理:作为Web服务器最常用的功能之一,尤其是反向代理,反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端做任何设定。
反向代理

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash。
扩展策略,就天马行空,只有你想不到的没有你做不到的。
轮询

加权轮询

iphash对客户端的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

动静分离,在软件开发中,有些请求是需要后台处理的,有些请求是不需要经后台处理的(如:css、html、js 等文件),这些不需要后台处理的文件称为静态文件。让动态网站里的动态网页一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。


三、Nginx的安装
下载nginx官网链接下载稳定版本。找系统对应的版本。
1. Windows下安装
- 启动Nginx
有很多启动方式
①直接双击nginx.exe,双击之后有一个黑色的弹窗一闪而过
②使用cmd命令窗口,切换到nginx目录下,输入命令nginx.exe,回车即可 - 检查nginx是否安装成功
在浏览器输入http://localhost/回车,出现以下页面说明安装成功!

- 配置监听
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。

当我们修改了nginx的配置文件nginx.config时,不需要关闭nginx后重新启动nginx,只需要执行命令nginx -s reload即可让改动文件生效 - 关闭Nginx
如果使用cmd窗口启动nginx,关闭cmd窗口是不能结束nginx进程的
两种关闭nginx的方法:
- 输入nginx命令
nginx -s stop(快速停止nginx)或nginx -s quit(完整有序的停止nginx) - 使用taskkil
taskkill /f /t /im nginx.exe
1.taskkil是用来终止进程的。
2. /f是强制终止
3. /t终止指定的进程和任何由此启动的子进程
4. /im示指定的进程名称
2.Linux下安装
- 安装gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装:
yum install gcc-c++
- 1
- PCRE pcer-devel安装
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括Perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在Linux上安装pcre库,pcre-devel是使用pre开发的一个二次开发库,nginx也需要此库。命令:
yum install -y pcre pcre-devel
- 1
3.zlib安装
zlib库提供了很多种压缩和解压缩的方式,nginx使用zib对http包内的内容进行gzip,所以需要在CentOS上安装zlib库。
yum install -y zlib zlib-devel
- 1
- OpenSSL安装
OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的的使用。Nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在CentOS上安装OpenSSL库。
yum install -y oppenssl oppenssl-devel
- 1
- wget安装
yum install wget
- 1
- 下载nginx
wget http://nginx.org/download/nginx-1.20.2.tar.gz
- 1
- 解压(在root目录下)
tar -zxvf nginx-1.20.2.tar.gz
- 1
cd nginx-1.20.2
- 1

8. 配置
使用默认配置,在nginx根目录下执行,确保以上命令都执行
首先创建要安装的目录文件
mkdir -p /usr/local/nginx
- 1
安装到指定目录下
./configure --prefix=/usr/local/nginx
- 1
编译安装
make && make install
- 1
查看安装路径
whereis nginx
- 1
3.Nginx目录结构
安装完Nginx后,Nginx的目录结构如图:

重点目录/文件:
- conf/nginx.conf nginx配置文件
- html 存放静态文件(html、css、js等)
- logs 日志文件,存放日志文件
- sbin/nginx 二进制文件,用于启动,停止Nginx服务
4.Nginx常用命令
- 进入nginx,sbin目录下
cd /usr/local/nginx/sbin
- 1
- 查看版本
./nginx -v
- 1
3.检查配置文件的正确性
./nginx -t
- 1
- 启动Nginx服务
./nginx
- 1
- 停止Nginx服务
./nginx -s stop
- 1
- 安全退出Nginx服务
./nginx -s quit
- 1
- 查看nginx进程
ps aux|grep nginx
- 1
- 重新加载配置文件
./nginx -s reload
- 1
- 配置环境变量
vim /etc/profile
- 1
追加:
PAHT=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH
- 1
保存生效:
source /etc/profile
- 1
启动成功访问 服务器ip:80
注意:
如果连接不上,检查云服务器安全组是否开放端口,或者服务器防火墙是否开放端口!
相关命令
11. # 开启
12. service firewalld start
13. # 重启
14. service firewalld restart
15. # 关闭
16. service firewalld stop
17. # 查看防火墙规则
18. firewall-cmd --list-all
19. # 查看端口是否开放
20. firewall-cmd --query-port=8080/tcp
21. # 开放80端口
22. firewall-cmd --permanent --add-port=80/tcp
23. # 移除端口
24. firewall-cmd --permanent --remove-port=8080/tcp
25. # 重启防火墙(修改配置后要重启防火墙)
26. firewall-cmd --reload
27. # 参数解释
28. firewall-cmd:是Linux提供的操作firewall的一个工具
29. --permanent:表示设置为持久
30. --add-port:标识添加的端口
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
5.Nginx配置文件结构
整体结构介绍
Nginx配置文件(cong/nginx.conf)整体分为三部分:
- 全局快 ( 和Nginx运行相关的全局配置)
- events块 ( 和网络连接相关的配置)
- http快(代理、缓存、日志记录、虚拟主机配置)
- http全局快
Server块- Server全局块
- location块
注意:http块中可以配置多个Server块,每个Server块中可以配置多个location块。

四、Nginx具体应用
1.部署静态资源
Nginx可以作为静态web服务器来部署静态资源。静态资源 指在服务端真实存在并且能够直接展示的一些文件,比如常见的html文件、css文件、js文件、图片、视频等资源。
相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中。将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。
server {
listen 80; # 监听端口
server_name localhost; # 服务器名称
location /{ # 匹配客户端请求url
root html; # 指定静态资源根目录
index index.html; # 指定默认首页
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.反向代理
- 配置反向代理
server {
listen 82;
server_name localhost;
location /{
proxy_pass http://192.168.81.129:8080; #反向代理配置,将请求转发到指定服务
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7

3.负载均衡
早期的网站流量业务功能都比较简单,单台服务器就可以满足基本要求,但是随着互联网的发展,业务流量越来越大并且业务逻辑越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障的出现。
- 应用集群:将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回效应数据
- 负载均衡器:将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理

配置负载均衡:
upstream targetserver{ # upstream指令可以定义一组服务器
server 192.168.81.129:8080;
server 192.168.81.129:8081;
}
server {
listen 80;
server_name localhost;
location /{
proxy_pass http://targetserver; #反向代理配置,将请求转发到指定服务
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3.负载均衡策略
| 名称 | 说明 |
|---|---|
| 轮询 | 默认方式 |
| weight | 权重方式 |
| ip_hash | 依据ip分配方式 |
| least_conn | 依据最少连接方式 |
| url_hash | 依据url分配方式 |
| fair | 依据响应时间方式 |
笔记md文件下载链接:
狂神说ngnix笔记的更多相关文章
- ngnix笔记
ngnix可通过-s 参数控制,如quit正常退出:reload重载配置文件,具体参考:http://nginx.org/en/docs/switches.html ngnix的指令解释请参考这里:h ...
- 狂神redis学习笔记
一.Nosql概述 为什么使用Nosql 1.单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用.随着用户增多,网站出现以下问题 数据量增加到一定程度,单机数据库就放不下了 ...
- 狂神说Linux笔记:Vim和账号、用户组、磁盘管理
什么是Vim编辑器 Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但 ...
- 狂神说linux笔记:基本操作
Linux介绍 Linux的概述本文就不赘述了,如果想仔细了解的小伙伴可以百度Linux的历史或者看看狂神的原文.本文主要写linux的操作过程知识点. 狂神的原文如下: https://mp.wei ...
- 狂神说Mybatis笔记
环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 第一节:入门 什么是MyBati ...
- 狂神说redis笔记(四)
十二.Redis主从复制 概念 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower), ...
- 狂神说redis笔记(三)
八.Redis.conf 容量单位不区分大小写,G和GB有区别 可以使用 include 组合多个配置问题 网络配置 日志 # 日志 # Specify the server verbosity le ...
- 狂神说redis笔记(二)
四.三种特殊数据类型 Geospatial(地理位置) 使用经纬度定位地理坐标并用一个有序集合zset保存,所以zset命令也可以使用 geoadd key longitud(经度) latitude ...
- 狂神说redis笔记(一)
一.Nosql概述 1.单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用.随着用户增多,网站出现以下问题: 数据量增加到一定程度,单机数据库就放不下了 数据的索引(B+ ...
- 狂神说mysql笔记
1.mysql 基本操作 Windows-->Mysql5.7打开 输入用户名和密码 查看数据库 :show databases:查询所有数据库,记住一定要加分号结尾 这里必须全部为 英文空格 ...
随机推荐
- sql union 和 union all
UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 但是需要注意: 1.union内部的select语句必须拥有相同数量的列. 2.列必须拥有相似的数据类型. 3.每条select语句 ...
- Javaweb项目和Maven项目的相关导包
Javaweb项目的学习大致需要一下几个导包: 以上几个包需要导入到WEB-INF目录下的lib文件夹里面,主要操作如下: 1.新建一个lib文件夹(在WEB-INF目录下) 2.右键lib文件夹,选 ...
- 17.explicit关键字
c++提供了关键字explicit,禁止通过构造函数进行的隐式转换.声明为explicit的构造函数不能在隐式转换中使用. [explicit注意] ● explicit用于修饰构造函数,防止隐式转化 ...
- Javacv 音视频小工具 - 下载抖音视频
一.前言 大家好,俗话说的好,学习新的知识后要学以致用,在学习音视频的过程中,你有没有疑问,不知道音视频可以用来做什么.下面举几个例子,比较耳熟能详,被吹到风口的一些场景有:AI 视觉计算, AI 人 ...
- Kafka 集群调优
更多内容,前往 IT-BLOG 单个 kafka服务器足以满足本地开发或 POC要求,使用集群的最大好处是可以跨服务器进行负载均衡,再则就是可以使用复制功能来避免因单点故障造成的数据丢失.在维护 Ka ...
- window计时器函数
// 定时器: // 计时器 // 开启:setInterval() // 参数1:回调函数 // 参数2:毫秒数 // 功能:每个指定的毫秒数执行一次回调函数 demo: var t = setIn ...
- Perceptron, Support Vector Machine and Dual Optimization Problem (3)
Support Vector Machines Perceptron and Linear Separability 假设存在一个 linear decision boundary,它可以完美地对 t ...
- [小迪安全]笔记 day12、13 MySQL注入
1. 简单案例 1.1 简易代码分析SQL注入原理 http://localhost:8085/sqli-labs/Less-2/index.php?id=2 id=2 正常查询 http://loc ...
- 股票K线图概要——R语言
K线图是200多年前日本人发明的,后来传入了美国.K线图本来就是对当前数据的可视化显示而已,但是越来越多的人对K线图做出了痴迷的分析和解读,有众多追随者也根据K线图指导自己的具体行动,因此,K线图在实 ...
- Prometheus+Grafana监控系统
Prometheus vs Zabbix Zabbix的客户端更多是只做上报的事情,push模式.而Prometheus则是客户端本地也会存储监控数据,服务端定时来拉取想要的数据. Zabbix的客户 ...
