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;
}
相关推荐
TeleostNaCl2 小时前
SMBJ 简单使用指南 实现在 Java/Android 程序中访问 SMB 服务器
android·java·运维·服务器·经验分享·kotlin
知北游天2 小时前
Linux网络:使用UDP实现网络通信(网络套接字的创建&&绑定)
linux·网络·udp
weixin_749949903 小时前
当没办法实现从win复制东西到Linux虚拟机时的解决办法
linux·运维·服务器
时空自由民.3 小时前
SC3336 rgb sensor linux
linux·运维·服务器
我就要用Cx3303 小时前
微服务配置管理
java·运维·微服务
我好饿13 小时前
自动化运维工具 Ansible 集中化管理服务器
运维·自动化·ansible
東雪蓮☆3 小时前
Ansible 自动化运维:集中化管理服务器实战指南
linux·运维·自动化·ansible
荣光波比3 小时前
自动化运维工具 Ansible:集中化管理服务器完全指南
运维·自动化·云计算·ansible
Cyan_RA93 小时前
Linux 虚拟机软件 VMware Workstation Pro 安装CentOS的相关说明和操作
linux·运维·服务器·centos·vmware·vmtools