nginx
一 Nginx介绍
1.1 为什么要学习Nginx
问题1: 客户端到底要将请求发送那台服务器
问题2:所有客户端的请求都发送给了服务器1
问题3:客户端发送的请求可能是申请静态资源的,也有可能是访问动态资源的
1.2 Nginx介绍
特点:
1.稳定性极强,7*24小时不间断运行
2.Nginx提供了非常的配置实例
3.占用内存小,并发能力强
二 Nginx安装
2.1 安装
version: '3.1'
services:
nginx:
restart: always
image: nginx:1.19.2
container_name: study_nginx
ports:
- 80:80
2.2 Nginx配置文件
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 以上统称全局块
# worker_processes 它的数值越大,Nginx的并发能力越强
# error_log 代表Nginx的日志文件存放位置
events {
worker_connections 1024;
}
# events块
# worker_connections 默认1024 数字越大,Nginx的并发能力越强
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
# http块
# 上面的include 代表引入一个外部文件 ->mime.types中存放了大量的媒体类型
# 下面的include /etc/nginx/conf.d/*.conf; 引入了conf.d目录下的以.conf的配置文件
Server块
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
# location 块
# root 将接收到的请求根据/usr/share/nginx/html去查找静态资源
# index 默认去上述的路径中找到index.html或者index.htm
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# server块
# listen 代表Nginx的监听端口号
# localhost 代表Nginx接收请求的ip
#
三 Nginx的反向代理
3.1 什么是正向代理:
1.正向代理服务时由客户端设立的
2客户端了解代理服务器和目标服务器都是谁
3.帮助实现突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址
3.2 什么是反向代理
1.反向代理服务器是配置在服务端的
2.客户端是不知道到底访问的那一台服务器
3.达到负载均衡,并且可以真正的隐藏ip地址
3.3 基于Nginx实现反向代理
1.准备一个目标服务器
启动一个tomcat服务器8080端口,在ROOT目录下放一个index.html页面
2.编写nginx配置文件通过nginx访问tomcat容器,实现反向代理
修改conf.d目录下的default.conf文件
server{
listen 80;
server_name localhost;
#基于反向代理访问到nacos
location = /index {
proxy_pass http://47.112.174.148:8848/nacos;
}
# 基于反向代理访问百度
location ^~ /test/ {
proxy_pass http://47.112.174.148:8081;
}
#基于反向代理访问到tomcat服务器
location / {
proxy_pass http://47.112.174.148:8080;
}
}
然后访问nginx的80端口,如果页面展示的是tomcat的index.html页面,说明nginx反向代理成功
3.3.1 关于nginx的location路径映射
优先级关系:
(location = ) > (location /xxx/yyy/zzz) > (location ^~) > (location ~ , ~*) > (location/起始路径) > (location /)
# 1. = 匹配
location = / {
# 精准匹配,主机名后面不能携带任何字符串
}
# 2. 通用匹配
location /xxx {
# 匹配所有以/xxx开头的路径
}
# 3. 正则匹配
location ~ /xxx {
# 匹配所有以/xxx开头的路径,与2的效果一样 但是比2中优先级高些
}
# 4. 匹配开头路径
location ^~/images/ {
# 匹配所有以/images开头的路径
}
# 5 匹配文件路径
~*\.(gif|jpg|png){
# 匹配以gif或者jpg或者png为结尾的路径
}
四 Nginx的负载均衡
Nginx为我们提供了三种负载均衡的策略
-
轮询:
将客户端发起的请求,平均分配给每个服务器,轮着处理请求
-
权重:
会将客户端的请求,根据服务器的权重值不同,分配不同的请求数量给权重不同的服务器
-
ip_hash
基于发起请求的客户端IP地址不同,他会始终将请求发送到指定的服务器上.
4.1 轮询
修改conf.d目录下的default.conf文件
# 在server块外面声明upsteam fs-server是我自己取得名字 自定义名称不要加下划线_
# server 指定服务地址,端口
upsteam fs-server {
server 47.112.174.148:8080;
server 47.112.174.148:8081;
.....
}
server{
listen 80;
server_name localhost;
#基于反向代理到我们上面upsteam指定的服务名字,默认使用轮询
location / {
proxy_pass http://upsteam的名字/;
}
}
4.2 权重
修改conf.d目录下的default.conf文件
# 在server块外面声明upsteam fs-server是我自己取得名字 自定义名称不要加下划线_
# server 指定服务地址,端口
# weight=值越大权重约定,被访问的几率大些
upsteam fs-server {
server ip:port weight=10;
server ip:port weight=2;
.....
}
server{
listen 80;
server_name localhost;
#基于反向代理到我们上面upsteam指定的服务名字,默认使用轮询
location / {
proxy_pass http://upsteam的名字/;
}
}
4.3 ip_hash
修改conf.d目录下的default.conf文件
# 在server块外面声明upsteam fs-server是我自己取得名字 自定义名称不要加下划线_
# server 指定服务地址,端口
# ip_hash 表示负载均衡使用ip_hash 当某个ip访问nginx的时候,后续始终将请求发送到指定的服务器上.
upsteam fs-server {
ip_hash;
server ip:port;
server ip:port;
.....
}
server{
listen 80;
server_name localhost;
#基于反向代理到我们上面upsteam指定的服务名字,默认使用轮询
location / {
proxy_pass http://upsteam的名字/;
}
}
五 Nginx的动静分离
Nginx的并发能力公式:
Nginx的配置文件中worker_processes和events块的worker_connections相乘除以4或者2,最终的结果就是nginx的并发能力
worker_processes*worker_connections/4|2=Nginx最终的并发能力
动态资源需要/4,静态资源/2
Nginx通过动静分离,来提升Nginx的并发能力,更快的给用户响应
5.1 动态资源代理
# 配置如下
location / {
proxy_pass ip;
}
5.2 静态资源代理
# 配置如下
location / {
root 静态资源路径;
index 默认访问路径下的资源;
autoindex on: # 代表展示静态资源全部的内容,以列表的形式展开.
}
测试案例,先修添加一个index.html和1.jpg静态资源
六 Nginx集群
单点故障,导致整个程序的崩溃,提升高可用