【nginx】最常用的六大功能是什么?

1.正向代理

定义解释:正向代理就是代理服务器替客户端去访问目标服务器。
实现效果:在浏览器输入 http://www.google.com , 浏览器跳转到http://www.google.com
具体配置:

server{resolver 8.8.8.8;listen 80;location / {proxy_pass http://$http_host$request_url;}
}   

在需要访问外网的客户端上执行以下一种操作即可:

  1. 方法1(推荐)
    export http_proxy=http://你的正向代理服务器地址 : 代理端口

  2. 方法2
    vim ~/.bashrc
    export http_proxy=http://你的正向代理服务器地址 : 代理端口

2.反向代理

定义解释:反向代理指代理后端服务器响应客户端请求的一个中介服务器,代理的对象是服务端
具体配置:
#实现效果:在浏览器输入 http://www.abc.com , 从 nginx 服务器跳转到 linux 系统 tomcat 主页面

server {listen       80;   server_name  192.168.4.32;   #监听地址location  / {       root html;  #/html目录proxy_pass http://127.0.0.1:8080;  #请求转向index  index.html index.htm;      #设置默认页       } }

实现效果:根据在浏览器输入的路径不同,跳转到不同端口的服务中。

server {listen  9000;   server_name  192.168.4.32;   #监听地址       location  ~ /example1/ {  proxy_pass http://127.0.0.1:5000; # 对发送给客户端的URL进行修改的操作# proxy_redirect     off;# 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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;#proxy_max_temp_file_size 0;        } location  ~ /example2/ {  proxy_pass http://127.0.0.1:8080;         } }

location 指令说明:

  • ~ : 表示url包含正则表达式,且区分大小写。
  • ~* : 表示url包含正则表达式,且不区分大小写。
  • = : 表示url不含正则表达式,要求严格匹配。

3.负载均衡

实现效果:在浏览器地址栏输入http://192.168.4.32/example/a.html ,平均到 5000 和 8080 端口中,实现负载均衡效果。
具体配置:

upstream myserver {   server 192.167.4.32:5000;server 192.168.4.32:8080;}    server {listen  80;                  #监听端口server_name  192.168.4.32;   #监听地址location  / {       root html;                    # html目录index index.html index.htm;   # 设置默认页proxy_pass  http://myserver;  # 请求转向 myserver 定义的服务器列表      } }

nginx 分配服务器策略
- 轮询(默认)
按请求的时间顺序依次逐一分配,如果服务器down掉,能自动剔除。
- 权重
weight 越高,被分配的客户端越多,默认为 1。比如: upstream myserver { server 192.167.4.32:5000 weight=10; server 192.168.4.32:8080 weight=5; } 复制代码
- ip
按请求 ip 的 hash 值分配,每个访客固定访问一个后端服务器。比如: upstream myserver { ip_hash; server 192.167.4.32:5000; server 192.168.4.32:8080; } 复制代码
- fair
按后端服务器的响应时间来分配,响应时间短的优先分配到请求。比如: upstream myserver { fair; server 192.168.4.32:5000; server 192.168.4.32:8080; }
- least_conn;
#把请求转发给连接数较少的后端服务器、upstream myserver {least_conn; server 192.168.4.32:5000; server 192.168.4.32:8080; }

**- 一次性hash (需要安装插件) **
应用场景:一致性hash : nginx / redis集群 / es内部节点

在每一种模式下,每一台服务器可以携带参数如下:
1.down: 当前服务器暂不参与负载
2.weight: 权重,值越大,服务器的负载量(能够处理的请求量)越大。
3.max_fails:允许请求失败的次数,默认为1。
4.fail_timeout:max_fails次失败后暂停的时间。
5.backup:备份机, 只有其它所有的非backup机器down或者忙时才会请求backup机器。

4.nginx 缓存

实现效果:在3天内,通过浏览器地址栏访问 http://192.168.4.32/a.jpg ,不会从服务器抓取资源,3天后(过期)则从服务器重新下载。
具体配置:

http 区域下添加缓存区配置
proxy_cache_path /tmp/nginx_proxy_cache levels=1 keys_zone=cache_one:512m inactive=60s max_size=1000m;#server 区域下添加缓存配置
location ~ \.(gif|jpg|png|htm|html|css|js)(.*) {proxy_pass http://192.168.4.32:5000# 如果没有缓存则转向请求proxy_redirect off;proxy_cache cache_one;proxy_cache_valid 200 1h;                 #对不同的 HTTP 状态码设置不同的缓存时间proxy_cache_valid 500 1d;proxy_cache_valid any 1m;expires 3d;
}

expires 是给一个资源设定一个过期时间,通过 expires 参数设置,可以使浏览器缓存过期时间之前的内容,减少与服务器之间的请求和流量。也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。

5.动静分离

实现效果:通过浏览器地址栏访问 http://www.abc.com/a.html ,访问静态资源服务器的静态资源内容。通过浏览器地址栏访问 http://www.abc.com/a.jsp ,访问动态资源服务器的动态资源内容。
具体配置:

upstream static {   server 192.167.4.31:80;
}upstream dynamic {   server 192.167.4.32:8080;
}server {listen  80;               # 监听端口server_name  www.abc.com; # 监听地址# 拦截动态资源location ~ .*\.(php|jsp)$ {proxy_pass http://dynamic;}# 拦截静态资源location ~ .*\.(jpg|png|htm|html|css|js)$ {       root /data/;            # html目录proxy_pass http://static;autoindex on;;          # 自动打开文件列表}  
}

6.高可用

一般情况下,通过 nginx 主服务器访问后台目标服务集群,当主服务器挂掉后,自动切换至备份服务器,此时由备份服务器充当主服务器的角色,访问后端目标服务器。
6.1 实战一
实现效果:
准备两台 nginx 服务器,通过浏览器地址栏访问虚拟 ip 地址,把主服务器的 nginx 停止,再次访问虚拟 ip 地址仍旧有效。

具体配置:
(1)在两台 nginx 服务器上安 keepalived。
keepalived 相当于一个路由,它通过一个脚本来检测当前服务器是否还活着,如果还活着则继续访问,否则就切换到另一台备份服务器。

# 安装 keepalived
yum install keepalived -y# 检查版本
rpm -q -a keepalivedkeepalived-1.3.5-16.el7.x86_64

(2)修改主备服务器
/etc/keepalived/keepalivec.conf 配置文件(可直接替换),完成高可用主从配置。
keepalived 将 nginx 服务器绑定到一个虚拟 ip , nginx 高可用集群对外统一暴露这个虚拟 ip,客户端都是通过访问这个虚拟 ip 来访问 nginx 服务器 。

global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from_Alexandre.Cassen@firewall.locsmtp_server 192.168.4.32smtp_connect_timeout 30router_id LVS_DEVEL  # 在 /etc/hosts 文件中配置,通过它能访问到我们的主机
}vrrp_script_chk_http_port {   script "/usr/local/src/nginx_check.sh"interval 2      # 检测脚本执行的时间间隔weight 2        # 权重每次加2
}vrrp_instance VI_1 {interface ens7f0 # 网卡,需根据情况修改state MASTER    # 备份服务器上将 MASTER 改为 BACKUPvirtual_router_id 51 # 主备机的 virtual_router_id 必须相同priority 100   # 主备机取不同的优先级,主机值较大,备份机值较小advert_int 1  # 每隔多长时间(默认1s)发送一次心跳,检测服务器是否还活着authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100 # VRRP H 虚拟地址,可以绑定多个}
}

字段说明

  • router_id: 在 /etc/hosts 文件中配置,通过它能访问到我们的主机。
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    127.0.0.1 LVS_DEVEL
  • interval: 设置脚本执行的间隔时间
  • weight: 当脚本执行失败即 keepalived 或 nginx 挂掉时,权重增加的值(可为负数)。
  • interface: 输入 ifconfig 命令查看当前的网卡名是什么。
    ens7f0:
    flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
    mtu 1500 inet 192.168.4.32 netmask 255.255.252.0 broadcast 192.168.7.255
    inet6 fe80::e273:9c3c:e675:7c60 prefixlen 64 scopeid 0x20 … …

(3)配置sh脚本
在 /usr/local/src 目录下添加检测脚本 nginx_check.sh。

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ ps -C nginx -no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

(4)启动两台服务器的 nginx 和 keepalived。

# 启动 nginx
./nginx# 启动 keepalived
systemctl start keepalived.service

(5)检查验证
查看虚拟 ip 地址 ip a 。把主服务器 192.168.4.32 nginx 和 keepalived停止,再访问虚拟 ip 查看高可用效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

住宅IP和数据中心IP有何区别?为什么住宅IP更适合爬虫采集?

随着互联网的普及和发展&#xff0c;IP地址作为网络通信中的重要标识&#xff0c;其类型和应用场景也在不断变化。其中&#xff0c;住宅IP和数据中心IP是两种常见的IP类型&#xff0c;它们在某些方面存在明显的区别。本文将探讨这两种IP类型的区别以及为什么住宅IP更适合爬虫采…

python GUI开发:实现主屏幕控制副屏显示

实现效果 实现代码 import tkinter as tk import threading import pygetwindow as gw import subprocess import cv2 import pygame import time import screeninfodef func1():print("影音播放")open_child_window()def func5():print("视频播放")video…

数据库系列:InnoDB下实现高并发控制

1 介绍 并发控制是为了防止多用户并发使用数据库时造成数据错误和程序运行错误&#xff0c;保证数据的完整性。当多个事务并发地存取数据库时&#xff0c;就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据&#xff0c;破坏数据库…

期末阶段 -之大学牲备考

先断更几日&#xff0c;待我凯旋归来&#xff0c;兄弟们&#xff01;

web前端(第二次作业)

1、计算用户指定的数值内的奇数和。例如用户输入的是 10&#xff0c;则计算 1 3 5 7 9 的和 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>var nprompt("请输入数值&#xff1a;&…

基于开源组件自主开发工作流引擎系统

目前基于Java语言开发的主流开源工作流引擎有osworkflow、jbpm、activiti、flowable、camunda。其中osworkflow、jbpm技术较老已经过时&#xff0c;activiti包括activiti5、activiti6、activiti7三个版本&#xff0c;flowable分开源版和商业版&#xff0c;camunda包括camunda7和…

ETCD 未授权访问实战案例

1、发现 etcd 未授权。 https://xxx200:2379/v2/keys 2、尝试在etcd里查询管理员的token&#xff0c;然后使用该token配合kubectl指令接管集群。 proxychains ./etcdctl --insecure-transportfalse --insecure-skip-tls-verify --endpointshttps://xxx0:2379/ get / --prefix…

12月威胁态势 | 0day占比超82%!两大勒索家族“均分天下”

近日&#xff0c;亚信安全正式发布《亚信安全2023年12月威胁态势报告》&#xff08;以下简称“报告”&#xff09;报告显示&#xff0c;12月份新增安全漏洞1511个&#xff0c; APT 攻防较量日趋复杂&#xff0c;成为网络空间与现实地缘政治融汇交织新的风险点&#xff1b;监测发…

精品量化公式——“主力拉升”,信号出现股价随时准备拉升

► 日线表现 代码评估 技术指标代码评估&#xff1a; 计算变量: HSL1:5;&#xff1a;设置了一个常数变量。 VAR0 到 VAR6&#xff1a;这些变量通过复杂的计算公式来定义&#xff0c;通常涉及收盘价、最高价、最低价、开盘价以及它们的历史数据。 技术指标和信号: 线: VAR6 …

使用Dockerfile构建镜像的详细指南

目录 前言 一、什么是 Dockerfile 二、使用 Dockerfile 定制镜像 开始构建镜像 上下文路径 三、指令详解 四、构建阿里云仓库 前言 Docker是一种流行的容器化平台&#xff0c;可以帮助开发人员和运维团队更轻松地构建、发布和运行应用程序。在Docker中&#xff0c;镜像是…

使用注解@GrpcService在Spring Boot 中开始使用gRPC

介绍 在现代微服务架构中&#xff0c;不同服务之间高效、健壮和可扩展的通信至关重要。gRPC是由Google开发的高性能开源框架&#xff0c;使客户端和服务器应用能够无缝、高效地进行通信。本文将指导您通过使用GrpcService注解将gRPC集成到Spring Boot应用程序中的步骤。 gRPC…

虾皮开通:如何在虾皮(Shopee)平台上开通店铺详细步骤

在全球电商市场的竞争中&#xff0c;越来越多的卖家选择在虾皮&#xff08;Shopee&#xff09;平台上开设店铺。作为东南亚地区最大的电子商务平台之一&#xff0c;虾皮提供了一个便捷的销售渠道&#xff0c;吸引了数百万的买家和卖家。如果您想在虾皮上开设自己的店铺&#xf…

【Leetcode】二叉树的递归遍历

【Leetcode】二叉树的递归遍历 先序遍历题目链接代码一&#xff1a;代码二&#xff1a; 迭代法先序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a; 先序遍历 题目链接 【Leetcode】二叉树的递归遍历 代码一&#xff1a; /*** Definition for a binary tree nod…

使用官方构建工具来创建一个vue3的项目

当你使用 Vite 构建项目时&#xff0c;可能会发现在命令行界面无法选择是否包含 TypeScript 等其他基础配置。此外&#xff0c;使用 vue create 命令创建项目时&#xff0c;默认会使用 vue-cli&#xff0c;但项目启动等过程可能较慢。在这种情况下&#xff0c;你可以参考以下步…

Matlab论文插图绘制模板第135期—隐函数曲面图(fimplicit3)

在之前的文章中&#xff0c;分享了Matlab隐函数折线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下隐函数曲面图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋友可以关…

CG Magic分享3dmax渲染太亮问题如何解决?

3D Max软件渲染时&#xff0c;渲染问题较多也是正常的&#xff0c;对于行业小白来说&#xff0c;渲染问题多也是能理解的&#xff0c;因为&#xff0c;小编经常在问答中&#xff0c;看到一些网友提问&#xff0c;3dmax渲染太亮怎么办&#xff1f; 3dmax渲染太亮了怎么回事&…

SpringSecurity入门demo(四)授权

一、授权demo&#xff1a; 1、资源权限&#xff1a; RequestMapping("/menu") RestController public class MenuManageController {RequestMapping("/test")public String test(){return "这是菜单管理";} }RequestMapping("/role"…

pycharm的使用技巧

1.新建文件时,自动生成代码 settings->editor->file and code templates,选择python script ${NAME} 文件名 ${DATE} 日期 2.自动补齐自定义段落 settings->editor->live templates,在右侧点击+号,添加自定义的内容 完成之后,在下方勾选python 3.修改注释的…

就业难,程序员年纪大了怎么办?

程序员作为一项技术工种&#xff0c;年龄的确可能成为职业生涯发展的一大障碍。但年龄并不是决定职业生涯终点的唯一因素&#xff0c;只要保持对技术的热爱、不断学习提升&#xff0c;并积极调整心态&#xff0c;仍有许多出路可以选择。 1. 职业发展路线 随着年龄的增长&#…

ModuleNotFoundError: No module named ‘mysql‘

首先安装虚拟环境 python3 -m venv myenv 激活虚拟环境 source myenv/bin/activate 报错如下 raceback (most recent call last):File "test.py", line 1, in <module>import mysql.connector ModuleNotFoundError: No module named mysql 解决方法&#…