一.正向代理
正向代理(Forward Proxy)是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端
Nginx 的 正向代理 充当客户端的“中间人”,代表用户访问外部资源并隐藏真实 IP。它是企业内网管控、安全审计与加速访问的核心工具。用于场景一般是:
内网访问控制:限制员工访问特定网站(如社交媒体)
匿名访问:通过代理服务器隐藏用户真实身份。
资源缓存加速:缓存公共资源(如软件包、镜像文件),减少外网带宽消耗
1、编译安装Nginx
1.1、安装支持软件
#关闭防火墙 systemctl stop firewalld #禁用防火墙 systemctl disable firewalld #临时关闭内核保护机制 setenforce 0 #永久关闭内核保护机制 vim /etc/sysconfig/selinux #在配置文件中修改参数为: SELINUX=disabled
#提供编译安装的环境 dnf -y install gcc zlib-devel pcre-devel openssl-devel
1.2、创建程序用户
useradd -M -s /sbin/nologin nginx
1.3、编译安装 Nginx
#解压 tar zxf nginx-1.26.3_http_proxy.tar.gz cd nginx-1.26.3 #配置 ./configure --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --add-module=./ngx_http_proxy_connect_module #编译 make #编译安装 make install #做软连接 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
2、Nginx 的运行控制
2.1、检查配置文件
nginx -t
2.2、Nginx的启、停
#开启 nginx #关闭 nginx -s stop #查看状态 netstat -anpt | grep nginx
2.3、添加 Nginx 系统服务
#切换目录 cd /lib/systemd/system #编辑服务文件 vim nginx.service #编写内容: [Unit] Description=cyauhiojpkl67tfyjop0k[ldrtuyfgiuvjnko After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/sbin/nginx ExecStop=/usr/sbin/nginx -s stop ExecReload=/usr/local/sbin/nginx -s reload [Install] WantedBy=multi-user.targe
备注:
fork 其实本身就是一个进程。
当执行 Execstart 启动 nginx 进程的时候,fork 进程自身以 daemon 模式运行,将 nginx作为一个子进程,并启动起来这个 nginx 的子进程。然后 fork 父进程退出。并将 fork 出的 nginx 子进程作为服务主进程进行跟踪
2、配置正向代理
编辑主配置文件添加正向代理相关配置:
vim /usr/local/nginx/conf/nginx.conf
proxy_connect;
# 允许代理到 80 和 443 端口
proxy_connect_allow 443 80;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
# 动态协议
proxy_pass $scheme://$http_host$request_uri;
proxy_set_header Host $http_host;
# 优化缓冲区
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
# 保持连接
proxy_http_version 1.1;
proxy_set_header Connection ""
重启服务并测试
#查看访问日志
cat /usr/local/nginx/logs/access.log
在Linux系统上访问
curl -x http://192.168.10.101:8080 www.baidu.com
二、反向代理
Nginx 的七层(应用层)反向代理基于 HTTP/HTTPS 协议,深度解析应用层内容(如 URL、Header、Cookie),将客户端请求精准转发至后端服务器。作为企业级架构的“智能调度器”,它实现了负载均衡、安全隔离与性能优化的核心能力。
负载均衡 | 将流量分发至多台后端服务器,避免单点故障 |
动静分离 | 静态资源(图片、CSS/JS)由 Nginx 直接响应,动态请求(PHP、API)转发至 Apache/Tomcat |
SSL 终端 | 统一处理 HTTPS 加密/解密,降低后端服务器计算压力 |
灰度发布 | 根据请求特征(如 IP、Header)将部分流量导向新版本服务 |
Nginx 的四层(网络层)反向代理基于 TCP/UDP 协议,直接转发原始数据流,不解析应用层内容。它专为高性能、低延迟的传输层场景设计,是数据库、游戏服务器等非 HTTP 服务的理想选择。
数据库代理 | 对外暴露统一端口,内部转发至 MySQL、Redis 集群 |
游戏服务器 | 代理 UDP 协议,实现实时数据包负载均衡 |
SSH 跳板机 | 通过端口映射安全访问内网服务器 |
高可用服务 | TCP 服务(如 MQTT)的主备切换与健康检查 |
反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的
1、配置nginx七层代理
通过配置nginx七层代理实现转发nginx请求至后端的httpd服务,通过该转发也能实现nginx+httpd的动静分离
1.1、环境安装
192.168.10.102上操作:
systemctl stop firewalld
dnf -y install httpd
echo "我是102服务器" >/var/www/html/index.html
systemctl start httpd
192.168.10.103上操作:
systemctl stop firewalld
dnf -y install httpd
echo "我是103服务器" >/var/www/html/index.html
systemctl start httpd
1.2、配置七层代理
192.168.10.101上操作:
#使用upstream定义后端应用服务器的地址池设置
upstream aaa{
server 192.168.10.102:80; #后端主机设置
server 192.168.10.103:80; #后端主机设置
}
#请求转发
proxy_pass http://aaa;
proxy_set_header Host $host;
#返回客户端的真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://aaa; | 使用 转发请求至后端地址池 |
proxy_set_header Host $host; | 将请求中的Host 头部设置为客户端请求的主机名 |
proxy_set_header X-Real-IP $remote_addr; | 将请求中的 X-Real-IP 头部设置为客户端的真实 IP 地址 |
1.3、测试
轮询显示
2、配置nginx四层代理
SSH协议是基于TCP协议的,配置nginx的四层代理,实现代理ssh请求至后端服务器,用以登录内网服务器场景
2.1、配置四层代理
192.168.10.101上操作:
stream {
#定义后端地址池
upstream ssh_cluster {
#设置后端地址和服务端口
server 192.168.10.102:22;
server 192.168.10.103:22;
}
server {
listen 2222;
proxy_pass ssh_cluster;
#连接超时时间
proxy_connect_timeout 5s;
#长连接保持时间
proxy_timeout 1h;
}
}
通过上面的验证发现,通过202的2222端口登录后,实际上是登录到201服务器