Nginx简介
2021/11/22 7:11:56
本文主要是介绍Nginx简介,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Ngxin
- 一. Ngxin是干嘛的
- 二. 使用docker-compose安装Nginx
- 2.1 安装
- 2.2 Nginx的配置文件
- 修改配置文件
- 三. Nginx反向代理
- 反向代理和正向代理
- 基于Nginx实现反向代理
- 关于Nginx的路径映射
- 测试路径映射
- 四. Nginx的负载均衡策略
- 轮询
- 权重
- ip_hash
- 五. Nginx动静分离
- 动态资源访问
- 六. Nginx集群
一. Ngxin是干嘛的
由于现在的生产环境中, 由于一个对外的服务上线之后,需要部署的服务器往往不止一台, 这个时候就产生了如下的几个问题:
-
代理问题
现在存在两台服务器, 客户端怎么知道需要请求哪一台服务器呢?
-
负载均衡问题
要是所有的请求都达到了服务器A, 那么在服务器B上进行的部署将毫无意义
-
资源优化
一个请求可能是请求动态资源, 也有可能访问静态资源,比如样式等, 如果都访问服务器会使资源浪费
这个时候使用nginx处理之后就可以很好的解决以上的几个问题.
nginx 稳定性极强, 并且占用内存很小,并发能力还非常的强,并且由于非常的火,网上存在非常多的配置的示例, 可以很方便的参考配置
二. 使用docker-compose安装Nginx
2.1 安装
在/opt(第三方软件的安装我们一般放在这个文件夹下面)目录下创建一个docker_nginx目录,放置docker-compose.yml文件
具体的docker教程后面补, 可自己自行学习. ->> 菜鸟 Docker 教程
version: '3.1' services: nginx: restart: always # 随着docker的启动而启动 image: daocloud.io/library/nginx:latest # 拉取镜像的地址, 这里用的是国内的地址 container_name: nginx # 生成的镜像名称 ports: - 80:80 #端口映射 volumes: - /opt/docker_nginx/conf.d/:/etc/nginx/conf.d # 数据卷映射, 将nginx容器内的配置文件夹映射到linux主机的本地文件夹, 修改其中一个另一个也会对应改变
然后使用docker-compose up -d 启动即可
2.2 Nginx的配置文件
使用 docker exec -it nginx bash
进入Nginx容器内部, 在/etc/nginx目录下存放着nginx.conf文件, 即是nginx的核心配置文件
worker_processes 1; error_log /var/log/nginx/error.log warn; # 以上统称为全局块, # worker_processes他的数值越大,Nginx的并发能力就越强 # error_log 代表Nginx的错误日志存放的位置 events { worker_connections 1024; } # events块 # worker_connections他的数值越大,Nignx并发能力越强 http { include /etc/nginx/mime.types; default_type application/octet-stream; server { listen server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } # location块 # root:将接收到的请求根据/usr/share/nginx/html去查找静态资源 # index: 默认去上述的路径中找到index.html或者index.htm } # server块 # listen: 代表Nginx监听的端口号 # localhost:代表Nginx接收请求的ip } # http块 # include代表引入一个外部的文件 -> /mime.types中放着大量的媒体类型 # include /etc/nginx/conf.d/*.conf; -> 引入了conf.d目录下的以.conf为结尾的配置文件 server块的内容就相当于是*.conf中配置的内容
修改配置文件
由于我们上面设置过了数据卷, - /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
, 我们在/opt/docker_nginx/conf.d目录下新建一个default.conf文件,内容如下:
可以根据需要进行修改, 后面我们只需要修改这个文件即可, 修改完成之后重启下ngxin服务器即可验证是否生效
server{ listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } }
三. Nginx反向代理
反向代理和正向代理
- 正向代理
正向代理是客户端的代理, 客户端知道自己具体需要访问的目标服务器和代理服务器, 这个时候我们使用正向代理进行访问权限的突破, 提高访问的速度等, 并且这个时候对于目标服务器是隐藏了客户端的ip的
比如在我们访问谷歌, youtube等网站的时候使用的即时正向代理
- 反向代理
反向代理是服务器端进行配置的, 客户端只知道访问的域名, 但是不知道自己访问的具体是那一台服务器,可以由此达成负载均衡, 并隐藏服务器的ip地址
基于Nginx实现反向代理
修改上面的ngxin配置文件, 准备一个可以正常访问发服务, 一个普通的在tomcat中的网页也行, 这里我在服务器中运行了一个简单的SpringBoot demo , 配置的端口是, 修改配置文件如下之后:
访问我在服务器中的服务的时候就不需要带上端口号了, 使用nginx的默认80端口即可自动跳转到配置文件中的8088端口.实现了反向代理. (注: 修改文件后重启下服务器)
关于Nginx的路径映射
优先级
(location =) --> (location /xxx/yyy/zzz) -->(location ^~) -->(location ,*)–>(location /起始路径)–>(location /)
# 1. 直接匹配 location = / { # 精准匹配,主机名后面不能带任何的字符串 } # 2. 通用匹配 location /xxx { # 匹配所有以/xxx开头的路径 } # 3. 匹配开头路径 location ^~ /images/ { # 匹配所有以/images开头的路径 } # 4. 正则匹配 location ~ /xxx { # 匹配所有以/xxx开头的路径 } # 5. 匹配后缀 location ~* \.(gif|jpg|png)$ { # 匹配以gif或者jpg或者png为结尾的路径 } # 6. 全部通配 location / { # 匹配全部路径 }
测试路径映射
启动一个springboot项目(保证可用, 自己根据需要写就好了)
修改配置文件内容, 添加两个反向代理的路径
重启nginxdocker-compose restart
请求
server{ listen 80; # 监听80端口 server_name localhost; location = /index { # 匹配所有index开头的路径 proxy_pass http://192.168.206.138:8081/; } location ^~ /ssm/ { # 匹配所有/ssm/ 开头的路径 proxy_pass http://192.168.206.138:8081/ssm/; } location / { # 匹配所有路径 proxy_pass http://192.168.206.138:8080/; } }
四. Nginx的负载均衡策略
Nginx默认提供了3种负载均衡策略
- 轮询
- 将请求平均分配给每一台服务器
- 权重
- 根据配置的权重不同分配服务器 - ip Hash
- 根据请求的ip计算hash值, 使相同ip的请求总是访问同一台服务器
轮询
配置后如果没有生效可以换个浏览器刷新试试
upstream 名字 { server ip:port; server ip:port; ... } server { listen 80; server_name localhost; location / { proxy_pass http://upstream的名字/; } }
权重
如果访问的次数少, 不一定可以出现
upstream 名字 { server ip:port weight=权重比例; server ip:port weight=权重比例; ... } server { listen 80; server_name localhost; location / { proxy_pass http://upstream的名字/; } }
ip_hash
upstream 名字 { ip_hash; server ip:port; server ip:port; ... } server { listen 80; server_name localhost; location / { proxy_pass http://upstream的名字/; } }
五. Nginx动静分离
Nginx并发力公式 : worker_processes * worker_connections / 4 | 2
= Nginx最终的并发能力
动态资源需要/4,静态资源需要/2.
Nginx通过动静分离,来提升Nginx的并发能力,更快的给用户响应。
动态资源访问
# 配置如下 location / { proxy_pass 路径; }
- 静态资源访问
# 配置如下 location / { root 静态资源路径; index 默认访问路径下的什么资源; autoindex on; # 代表展示静态资源全的全部内容,以列表的形式展开。 } # 先修改nginx的docker-compose.yml文件,添加一个数据卷,映射到Nginx服务器的一个目录 - /opt/docker_nginx/html:/data/html - /opt/docker_nginx/img:/data/img # 添加了index.html和1.jpg静态资源 # 修改default.conf配置文件 location /html { root /data; index index.html; } location /img { root /data; autoindex on; }
六. Nginx集群
使用nginx集群可以防止单点故障的问题
可使用keepalived Keepalived详细介绍 监听nginx的健康情况
使用HAProxy HAProxy用法详解 提供一个虚拟的路径,统一的去接收用户的请求。
测试方式:
1.在opt目录下创建一个docker_nginx_cluster目录,放入所有的集群需要的文件
2.关闭删除其他容器,再启动集群的部署
3.启动后先保证能访问master的8081,slave的8082,通过浏览器访问,可以看到页面
4.通过浏览器访问80端口,默认找master主机,所以能看到输出master
5.当关闭master容器后,再访问80端口,则会访问slave容器,输出slave
具体集群的搭建可参考这篇文章:
keepalived原理及nginx+keepalived
Nginx+Keepalived实现Nginx高可用
可能出现的问题 : ERROR: Pool overlaps with other one on this address space
可参考其他的nginx文章 : 搞懂Nginx一篇文章就够了
这篇关于Nginx简介的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享