柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • 前端必备

  • 技术拓展

    • Bootstrap
    • JQuery
    • TypeScript
    • Nginx
      • 概述
      • 安装
        • Window
        • Linux
      • 配置
        • 常用语法
        • 静态资源代理
        • alias
        • try_files
        • root
        • 反向代理
        • 负载均衡配置
        • 分配策略
      • Docker应用
      • Nginx Proxy Manger
    • Sass
  • 前端技巧

  • Vue

  • 前端
  • 技术拓展
柏竹
2020-02-18
目录

Nginx

# 概述

Nginx是一个高性能的HTTP和反向代理web服务器 , 同时也提供了 IMAP/POP3/SMTP 服务

正向代理&反向代理 正向代理要知道访问服务器的地址,反向代理不需要知道访问服务器的真实地址

优点 :

  1. 反向代理能够将请求进行 负载均衡
  2. 有多种 均衡策略

官网 : https://nginx.org (opens new window)

中文文档 : https://blog.redis.com.cn/doc/index.html (opens new window)

# 安装

下载 : https://nginx.org/en/download.html

一般下载稳定版即可

# Window

解压后 , cmd根路径 ==start nginx==/==nginx.exe== 指令即可食用

验证 : http://localhost:80

window常用指令

# 启动&退出&关闭&重启 服务
start nginx
nginx -s quit
nginx -s stop
nginx -s reopen
# 帮助
nginx -h

注意 :

  • 解压路径中不能包含有中文路径
  • Nginx配置是80端口 , 如果加载无效需要更改端口 配置文件 ==/conf/nginx.conf== 看见 ==listen 80;== 更改即可

# Linux

安装

# 安装
yum install epel-release
yum update
yum -y install nginx

# nginx服务 开启/停止/重启
systemctl start nginx
systemctl stop nginx
systemctl restart nginx

配置

  • ==/etc/nginx/nginx.conf==文件
  • ==/etc/nginx/conf.d/自定义文件.conf==文件 (一般在这里新建应用)

验证 : http://localhost:80

# 配置

Nginx配置中有三个核心功能 :

  • 静态服务器
  • 反向代理
  • 负载均衡

# 常用语法

  • server 块定义了一个虚拟主机的配置
  • location 块用于匹配 URL 并定义如何处理请求
  • listen 指令用于指定服务器监听的端口
  • server_name 指令用于指定服务器的域名
  • root 指令用于指定网站文件的根目录
  • index 指令用于指定默认页面
# 全局配置
main

# 工作模式配置
events { }

# http 配置
http { 
   
	# 服务器主机配置
    server {
		# 端口
    	listen 80;
   	
		# 域名
    	server_name localhost  192.168.1.100;
   	
		# 代表这是项目根目录
    	location / {
			# 虚拟根目录
        	root /usr/share/nginx/www;
    	}
	}
   
	# 路由配置
    location { }

	# 负载均衡配置
    upstream name {  }
}

配置文档 :

  • http://www.gwznkj.cn (opens new window)
  • http://shouce.jb51.net/nginx/left.html (opens new window)
  • https://blog.csdn.net/qq_33454884/article/details/89212702 (opens new window)

# 静态资源代理

将主机中的静态资源挂到外部访问

通过以下三大指令访问 :

  • alias 为特定的 location块指定一个替代路径
  • try_files 尝试不同的文件路径或 URI,直到找到存在的文件或目录
  • root 定义所有请求的基础路径

# alias

请求url指定别名路径应用

location /static/ {
    alias /path/to/your/static/files/;
}

请求url的所有 /static/路由的请求 , 都被映射到 /path/to/your/static/files/目录

PS : alias指令 不会继承 root指令 设置的根路径,因为它直接指向文件系统的绝对路径或相对于根目录的路径

# try_files

指定文件列表去找指定文件

location / {
    try_files $uri $uri/ /index.html;
}

Nginx 会尝试按照 $uri(请求的原始 URI)、$uri/(作为目录处理)、/index.html 的顺序查找文件

一般情况会搭配root使用

# 在 /var/www/html/目录下 查找index.html
location / {
    root /var/www/html;
    try_files $uri $uri/ /index.html;
}

PS : server块中设置 root指令时 , 它会影响该服务器块下所有 location 块的文件查找路径 , 除非在 location 块中明确指定了 root 或 alias

# root

指定根目录 , 指向nginx查目录从哪里开始

location /images/ {
    root /var/www;
}

请求url的所有 /images/的请求都会从 /var/www/images/ 目录中查找文件

当root放在server块时

server {
    listen 80;
    server_name www.example.com;

    root /var/www/html;
    # 静态资源也可直接访问 www.example.com/app/static/js/xxx.js , 实际路径 /var/www/html/app/static/js/xxx.js
    
    # 在 /var/www/html/目录下 查找index.html
    location / {
        try_files $uri $uri/ /index.html;
    }
}

# 反向代理

在 server块中使用 location指令 将请求url转发到指定服务

常用配置

location / {
    proxy_pass http://backend_server;
    # proxy_set_header指令 用于修改或添加 转发到后端服务器的 HTTP头部
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

涉及指令

指令 值 说明
proxy_pass IP、域名、变量 代理来源的目标服务
proxy_set_header HeaderName Value 修改或添加 转发到目标服务的HTTP头部
proxy_redirect off、http://old.com/、http://new.com/ 重定向域名
proxy_http_version 1.1 指定通信使用的 HTTP 版本
proxy_connect_timeout 90 (单位: s) 通信连接 超时时长
proxy_send_timeout 90 (单位: s) 请求发送 超时时长
proxy_read_timeout 90 (单位: s) 读取响应 超时时长

# 负载均衡配置

通过 upstream 实现多台主机服务

基本用法

http{
	upstream myweb {
		# 两个服务器
    	server localhost:8080;   
    	server localhost:8081;
	}
	server {
	    listen 80;
       
		# 路由对应
	    location / {
	        proxy_pass http://myweb;
	    }
	}
}

需要对应路由才能进行访问后端指定路由

权重

根据权重进行为请求分流 , 以下配置 权重比 3 : 7 的比例进行分流

upstream backend {
  server backend1.example.com weight=3;
  server backend2.example.com weight=7;
}

备用

当其他主机不可用时才会采用 backend2

upstream backend {
  server backend1.example.com;
  server backend2.example.com backup;
}

健康

定期健康检查 , 会将不可用会被移出服务器池!

upstream backend {
  server backend1.example.com;
  server backend2.example.com;
  # 健康检查
  health_check;
  # 健康配置的参数
  # 检查时 , 超时时间 , 超时 标记不可用
  health_check_timeout 5s;
  # 健康时间 间隔
  health_check_interval 10s;
  # 请求 判断状态 200(如果不是200,标记不可用)
  health_check_status 200;
  # 请求 判断响应正文 success(如果不是success,标记不可用)
  health_check_match "success";
  # 标记不可用前 , 条件 : 重检失败 3次
  health_check_fails 3;
  # 标记可用前 , 条件 : 重检成功 2次
  health_check_healthy_threshold 2;
}

# 分配策略

upstream模块 提供了一下轮询策略 :

  1. 轮询

    默认的负载均衡策略 , 每台服务器都跑一遍 , 按循序执行

  2. 哈希分配

    根据 变量 计算出hash值 , 通过hash分配请求 , 保证同一请求同一主机

  3. 最少连接

    将请求分配给当前连接数最少的服务器 , 请求会分配给最空闲的服务器

  4. 公平

    根据主机响应时长来动态调整权重 , 使得响应时间较短的服务器获得更多的请求

  5. 随机

    随机选择一台主机处理请求

哈希策略

自定义对象Hash

upstream backend {
  # 计算uri的 hash值
  # consistent作用 : 保证服务器 增加/删除 的情况下 , 保证hash值稳定性
  hash $request_uri consistent;

  server backend1.example.com;
  server backend2.example.com;
}

最小连接策略

upstream backend {
  # 使用 Least Connections 策略
  least_conn;

  server backend1.example.com;
  server backend2.example.com;
}

公平策略

upstream backend {
  # 使用 Fair 策略
  fair;

  server backend1.example.com;
  server backend2.example.com;
}

随机策略

upstream backend {
  # 使用 Random 策略
  random;

  server backend1.example.com;
  server backend2.example.com;
}

# Docker应用

利用docker安装nginx实现反向代理

  1. 安装镜像 nginx

  2. 创建配置文件 (运行docker挂载的配置)

    # 创建挂载目录
     mkdir -p /home/nginx/conf
    mkdir -p /home/nginx/log
    mkdir -p /home/nginx/html
    
  3. 拷贝主要配置到宿主机

     # 生成容器
     docker run --name nginx -p 9001:80 -d nginx
    
     # 将容器nginx.conf文件复制到宿主机
     docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
     
     # 将容器conf.d文件夹下内容复制到宿主机
    docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
    
     # 将容器中的html文件夹复制到宿主机
    docker cp nginx:/usr/share/nginx/html /home/nginx/
    
  4. 运行 Nginx容器

    docker run \
    -p 9002:80 \
    --name nginx \
    -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
    -v /home/nginx/log:/var/log/nginx \
    -v /home/nginx/html:/usr/share/nginx/html \
    -d nginx:latest
    
  5. 访问 [IP]:9002 即可

命令 说明
-name [名称] 命名
-d 后台运行
-p [宿主端口]:[容器端口] 端口映射
-v [宿主路径]:[容器路径] 配置文件挂载
nginx:latest 本地运行的版本
\ shell 命令换行

# Nginx Proxy Manger

官方 : https://nginxproxymanager.com/

Nginx 的进化 , 简化了Nginx操作 , 图形化UI操作

#Nginx
上次更新: 2023/03/12, 00:43:49

← TypeScript Sass→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式