当前位置: 首页 > news >正文

Linux系统Nginx服务(三)

一、正向代理和反向代理

1.1 正向代理概述

正向代理是位于客户端和目标服务器之间的中间服务器,代理的是客户端。客户端向代理服务器发送包含目标服务器的请求,由代理转发并将结果返回给客户端。

正向代理的作用

  • 为局域网客户端提供访问 Internet 的途径
  • 利用缓冲特性减少网络使用率
  • 帮助访问受地理位置限制的网络
  • 隐藏客户端真实 IP 地址

正向代理基本配置格式

bash

server {listen 192.164.65.100:80;server_name 客户端访问的域名;location / {proxy_pass http://目标服务器地址;}
}

1.2 反向代理概述

反向代理代理的是服务端,客户端不直接与后端服务器通信,而是与反向代理服务器交互,从而隐藏了后端服务器的 IP 地址。

反向代理的主要功能

  • 负载均衡:将请求分发到多个后端服务器,平衡负载
  • 缓存功能:缓存静态文件或动态页面,提高响应速度
  • 动静分离:将动态内容和静态资源分别处理
  • 多站点代理:代理多个域名或虚拟主机

反向代理常用模块

bash

ngx_http_proxy_module:#将客户端请求以http协议转发至指定服务器
ngx_http_upstream_module #定义后端服务器分组
ngx_stream_proxy_module:#以tcp协议转发请求
ngx_http_fastcgi_module:#处理php请求
ngx_http_uwsgi_module:#处理Python请求

二、反向代理配置

2.1 核心配置参数

proxy_pass 指令

用于设置将客户端请求转发给的后端服务器,格式如下:

bash

proxy_pass 地址:端口;

使用示例

bash

# 不带斜线,会将location后的url附加到proxy_pass指定的url后
proxy_pass http://10.0.0.18:8080; # 带斜线,相当于置换,访问/web时实际访问后端服务器根目录
proxy_pass http://10.0.0.18:8080/;   

注意:如果 location 使用正则表达式模式,则 proxy_pass 之后不能使用 uri(即不能有 /)

其他常用参数
  • proxy_hide_header field:隐藏后端服务器的响应头信息
  • proxy_pass_header field:传递后端服务器的特定首部字段给客户端
  • proxy_pass_request_body on|off:是否向后端服务器发送 HTTP 实体部分,默认开启
  • proxy_pass_request_headers on|off:是否将客户端请求头部转发给后端服务器,默认开启

三、配置实战

3.1 反向代理单台 web 服务器

代理服务器配置

bash

vim /apps/nginx/conf.d/pc.conf
server{listen 192.164.65.100:80;server_name  www.pc.com;root    /apps/nginx/html/pc;location  / {proxy_pass http://192.164.65.101;}
}

真实服务端配置

bash

# 安装httpd服务
yum install httpd -y
# 创建主页内容
cd /var/www/html
echo "Hi~" > index.html
# 启动服务
systemctl start httpd

配置完成后,客户端访问代理服务器 (192.164.65.100) 即可获取后端服务器的内容。

3.2 实现动静分离

通过不同 location 配置,将动态资源和静态资源分别代理到不同服务器:

bash

# 代理服务器配置
vim /apps/nginx/conf.d/pc.conf
location /api {proxy_pass http://192.164.65.101;  # 动态资源服务器
}location /static {proxy_pass http://192.164.65.103;  # 静态资源服务器
}

动态资源服务器配置

bash

# 创建动态资源目录和内容
cd /usr/share/nginx/html
mkdir api
echo this is api > ./api/index.html

静态资源服务器配置

bash

# 创建静态资源目录和内容
cd /usr/share/nginx/html
mkdir static
echo this is static > ./static/index.html

测试时,客户端访问192.164.65.100/api会获取动态资源,访问192.164.65.100/static会获取静态资源。

3.3 缓存功能配置

Nginx 可以缓存静态资源,减少后端服务器压力并提高响应速度。

缓存基本配置

bash

# 在http配置块中定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache  # 缓存保存路径
levels=1:2:2  # 缓存目录结构层次
keys_zone=proxycache:20m  # 内存中缓存大小
inactive=120s  # 缓存有效时间
max_size=10g;  # 最大磁盘占用空间# 在server或location中调用缓存功能
proxy_cache proxycache;
proxy_cache_key $request_uri;  # 缓存key
proxy_cache_valid 200 302 301 10m;  # 特定状态码的缓存时长
proxy_cache_valid any 1m;  # 其他状态码的缓存时长

清理缓存方法

  1. 直接删除缓存目录:rm -rf 缓存目录
  2. 使用第三方扩展模块 ngx_cache_purge

3.4 客户端 IP 透传

实现将客户端真实 IP 传递给后端服务器,主要通过X-Forwarded-For头字段。

一级代理配置

bash

server{listen 192.164.65.100:80;server_name  www.pc.com;location  / {proxy_pass http://192.164.65.101;# 添加IP透传配置proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

$proxy_add_x_forwarded_for变量会获取客户端真实 IP 并添加到请求头中,后端服务器可通过查看日志获取该 IP。

3.5 负载均衡配置

Nginx 基于ngx_http_upstream_module模块提供负载均衡功能,支持多种调度算法。

常用调度算法
  1. 轮询(Round Robin)

bash

upstream bakend {  server 192.164.65.1;    server 192.164.65.2;  
}
  1. 加权轮询(Weighted Round Robin)

bash

upstream bakend {  server 192.164.65.1 weight=10;  server 192.164.65.2 weight=20;  
}
  1. IP 哈希(ip_hash)

bash

upstream bakend {  ip_hash;  server 192.164.65.1:88;  server 192.164.65.2:80;  
} 
  1. 最小连接数(least_conn)

bash

upstream backend {least_conn;server backend1.example.com;server backend2.example.com;
}
负载均衡实战配置

bash

# 在主配置文件中定义后端服务器组
vim /apps/nginx/conf/nginx.conf
upstream group1{server 192.164.65.102 weight=2;server 192.164.65.103 weight=3;
}# 在子配置文件中引用
vim /apps/nginx/conf.d/pc.com
location / {proxy_pass http://group1;
}
http://www.dtcms.com/a/403286.html

相关文章:

  • 新手向 算法 基数排序-yang
  • 怎么搭建php网站网页设计个人网站设计
  • 小淇云库-Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
  • 芋道源码 - RabbitMQ + WebSocket 实现分布式消息推送
  • Spring Data JPA 语法详解与使用案例
  • 网站开发面试题天津公司建设网站
  • 个人怎么做音乐网站网页设计与制作教程刘瑞新课后答案
  • noi-9月23日作业
  • 购物网站每个模块主要功能怎么免费搭建网站
  • 如何高效使用Xshell和finalshell连接服务器,简单高效
  • Nestjs框架: 策略的权限控制(ACL)与数据权限实战
  • mmap 虚拟地址映射
  • 网站做好第二年要多少钱wordpress添加文件2m
  • Linux编程笔记2-控制数组指针函数动态内存构造类型Makefile
  • 【数据结构】冒泡、选择、插入、希尔排序的实现
  • npm镜像源配置指南
  • 【QT常用技术讲解】QTreeWidget实现树形筛选框(包含源码)
  • 站长工具ip查询外贸平台实训总结
  • 在JavaScript / HTML中,让<audio>元素中的多个<source>标签连续播放
  • 【Web前端|第二篇】JavaScript对象和事件
  • Linux配置网络————设置虚拟机为静态ip的网络配置详细教程
  • EPGF 架构为什么能保持长效和稳定?
  • reader should realize that all properties of real numbers that are to句子分析
  • ubuntu安装失败:Sorry, there was a problem completing the installation.原因分析及解决办法
  • 深圳商城网站设计价格网站轮播广告
  • AR技术:轨道交通运维与安全保障的革新力量
  • 友元类和友元函数bug
  • Zabbix7.4.8(二):通过http监控Nginx相关指标
  • 厦门 外贸网站访问数据库的网站开发语言
  • Gerkin+Pytest(python)实现自动化(BDD)