nginx反向代理单台 Web 服务器实验
一、Nginx 反向代理笔记
(一)什么是反向代理
- 反向代理服务器位于客户端和目标 Web 服务器之间,客户端向反向代理服务器发送请求,反向代理服务器将请求转发到目标 Web 服务器,并将目标 Web 服务器的响应返回给客户端,对客户端而言,它不知道请求实际上是被转发到了后端的目标服务器,看起来就像是反向代理服务器在处理请求。
(二)反向代理的作用
- 隐藏后端服务器信息:客户端只能看到反向代理服务器的 IP 地址和端口,无法得知后端真实服务器的具体信息,提高了安全性,防止后端服务器被直接攻击。
- 负载均衡:当有多个后端服务器时,可以根据一定的策略(如轮询、IP 哈希、权重等)将客户端请求均匀地分配到不同的后端服务器上,实现高效的资源利用和高可用性。不过在单台后端服务器的情况下,这一优势暂不体现。
- 缓存静态资源:反向代理服务器可以缓存后端服务器返回的静态资源(如图片、样式表、脚本等),当客户端再次请求相同资源时,直接从缓存中返回,减少后端服务器的压力和网络传输延迟,提高响应速度。
(三)Nginx 反向代理的配置指令
server
块:在 Nginx 配置文件中,使用server
块来定义一个虚拟服务器,包括监听的 IP 地址、端口以及相关的location
等配置。location
块:在server
块内,可以使用多个location
块来匹配不同的 URI(路径),针对不同的路径可以设置不同的反向代理规则,例如将/blog
路径下的请求转发到特定的后端服务器上的/blog
目录。proxy_pass
:这是实现反向代理的关键指令,用于指定后端目标服务器的地址(可以是 IP 地址或域名以及端口),例如proxy_pass http://backend_server;
,将请求转发到名为backend_server
的后端服务器上。proxy_set_header
:用于设置转发到后端服务器的请求头信息,例如可以设置Host
、X-Real-IP
等头信息,确保后端服务器能正确获取客户端的相关信息,像proxy_set_header Host $host;
会将客户端请求中的Host
头信息原封不动地转发给后端服务器。
二、反向代理单台 Web 服务器实验
(一)实验环境准备
- 安装 Nginx:在 Linux 系统(以 CentOS 为例)上执行以下命令安装 Nginx:
yum install nginx -y
- 启动 Nginx 服务:
systemctl start nginx
- 检查 Nginx 状态:
systemctl status nginx
- 安装并配置后端 Web 服务器:这里使用 Python 的简单 HTTP 服务器作为示例(确保系统已经安装 Python)。
- 在任意目录下创建一个简单的 HTML 文件,例如
index.html
,内容如下:
- 在任意目录下创建一个简单的 HTML 文件,例如
<html>
<head><title>Backend Web Server</title></head>
<body><h1>Hello from Backend Server!</h1></body>
</html>
- 在该目录下启动 Python HTTP 服务器:
python -m http.server 8080
(这里使用 8080 端口作为后端服务器的端口)
(二)Nginx 配置
- 编辑 Nginx 配置文件(通常在
/etc/nginx/nginx.conf
或/etc/nginx/conf.d/
目录下的自定义配置文件中),添加以下配置:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 上述配置表示 Nginx 在 80 端口监听客户端请求,当收到请求时,将请求转发到本地的 8080 端口(即后端 Python HTTP 服务器),并正确设置
Host
和X-Real-IP
请求头信息。
(三)实验测试
- 在浏览器中访问
http://localhost
(假设 Nginx 服务器的 IP 地址为本地环回地址,如果是远程服务器,则使用相应的域名或 IP 地址),此时浏览器会显示后端服务器返回的页面内容:“Hello from Backend Server!”,这表明客户端的请求先到达 Nginx 反向代理服务器,然后被转发到后端的 Python HTTP 服务器,最后后端服务器的响应又通过 Nginx 返回给客户端,成功实现了反向代理的功能。
通过这个实验,可以直观地理解 Nginx 反向代理的基本原理和配置方法,在实际应用中,可以根据需要进一步扩展和优化配置,例如添加更多的后端服务器实现负载均衡、配置缓存等功能。