Nginx教程

Nginx简介

本文主要是介绍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项目(保证可用, 自己根据需要写就好了)
修改配置文件内容, 添加两个反向代理的路径
重启nginx docker-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简介的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!