01 正向代理与反向代理
正向代理(Forward Proxy)和反向代理(Reverse Proxy)都是计算机网络中的代理服务器,用于在客户端和服务器之间进行数据传输。
- 正向代理
正向代理的服务器代理客户端向目标服务器发送请求。
当客户端发送请求时,请求首先发送到正向代理服务器,然后由代理服务器转发给目标服务器。正向代理服务器可以用于隐藏客户端的真实身份、绕过网络限制或提供缓存等功能。在正向代理的情况下,目标服务器不知道请求的真实来源是客户端,只知道请求来自代理服务器。 - 反向代理
反向代理的服务器是代理服务端接收客户端的请求。
当客户端发送请求时,请求首先发送到反向代理服务器,然后由代理服务器转发给后端的目标服务器。反向代理服务器可以用于负载均衡、安全性增强、缓存静态内容、SSL加密等功能。在反向代理的情况下,客户端并不知道发出的请求具体由哪台服务器处理,只知道请求发向了代理服务器。。
总而言之,正向代理隐藏了客户端的身份,代表客户端发送请求,而反向代理隐藏了服务器的身份,代表服务器接收请求。
02 通过Nginx实现反向代理
本文以Linux的Nginx为例,讲解如何配置Nginx的反向代理设置。
2.1 安装Nginx
有两种安装nginx的方式,一种是直接安装在服务器,另一种是使用docker安装。
直接安装:Linux拾遗 | CentOS7 Linux安装nginx并设置开机自启(步骤操作)
本文使用docker进行安装,简单方便。需要先安装docker和docker-compose。
2.2 编写nginx配置文件
# 进入一个自定义的文件夹 此处以root目录为例
cd ~
# 新建一个nginx.conf配置文件
vim nginx.conf
首先将nginx.conf的默认配置全部粘贴进来,然后在http > server下添加内容。
...
http {
...
server {
listen 80; # 监听80端口
server_name www.xxx.com; # 监听的域名 通常是与本机绑定的域名 也可以写ip地址
location / {
proxy_pass http://www.baidu.com; # 代理的网站 以百度为例
proxy_set_header Host $host; # 设置请求头(可选)
proxy_set_header X-Real-IP $remote_addr; # 设置真实请求的ip(可选)
}
}
}
这样设置好后,访问这台服务器(www.xxx.com)就会被反向代理到目标网站了(www.baidu.com)。
虽然这台服务器只有一个ip,但可以绑定多个域名(例如子域名),在配置的时候 只需要多配置几个server就可以,端口可以相同,域名不同,代理的网站不同。
2.3 编写docker-compose(可选)
如果是docker方式启动,可以选择通过docker-compose的方式启动nginx。
# 文件名为docker-compose.yml
version: '3.3'
services:
nginx:
volumes:
- '/root/nginx.conf:/etc/nginx/nginx.conf'
- '/root/ssl:/etc/ssl/certificates' # (可选)开启https的情况下才配置
- '/root/html:/usr/share/nginx/html' # (可选)有页面的情况下才配置
network_mode: host # 使用宿主机的网络 也可自定义网络映射
image: 'nginx:stable-alpine-slim' # 拉取的镜像 这里选择最轻量的版本
2.4 启动并访问
在docker-compose.yml
所在路径,使用启动命令进行启动。
# 启动nginx
docker-compose up -d
# 关停容器
docker-compose down
# 查看容器日志
docker logs <容器id或容器名>
在本地访问http://www.xxx.com即可。
本文的配置也可用于做端口转发,原理相同,只是被代理的服务器设置为http://127.0.0.1:端口号
即可。