1.原理

代理服务器的作用是代替客户端向目标服务器发送请求,然后将目标服务器的响应返回给客户端。在网络中,代理服务器可以用来隐藏客户端的真实 IP 地址,或者用于访问某些受限制的内容,或者实现缓存、安全策略等功能。

在这个示例中,请求被发送到代理服务器,然后由代理服务器转发到指定的 URL。当服务器响应后,代理服务器将响应返回给客户端。因此,通过设置代理,客户端可以通过代理服务器与目标服务器进行通信。

我们的代理服务器使用的是flask与nginx来进行搭建。

2.技术

flask:搭建显示ip地址的网站

nginx:转发请求

request:使用代码的方式发起测试请求

3.关键部分代码

nginx

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://target_server_ip:target_server_port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

flask

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    ip_address = request.headers.get('X-Forwarded-For', request.remote_addr)
    return f"Your IP address is: {ip_address}"

if __name__ == '__main__':
    app.run(port=****, debug=True)

request

import requests

url = '*****'

proxy = {
    'http': '*****',
}
response = requests.get(url, proxies=proxy)


if response.status_code == 200:
    print("Response from server:")
    print(response.text)
else:
    print("Failed to get response from server.")
4.代码解析

 4.1nginx

首先我们需要在我们的云服务器上安装nginx,安装教程有很多,如果有需要我们再单开一期

然后我们需要进行配置Nginx,

  • 进入Nginx配置文件夹,通常是 /etc/nginx/
  • 编辑 nginx.conf 或者 sites-available/default 文件,根据你的需求进行配置。  
  • your_domain.com 替换为你的域名或者服务器IP地址。
  • target_server_ip 替换为你要转发请求的目标服务器的IP地址。
  • target_server_port 替换为目标服务器的端口号。

 4.2flask

Flask 默认只会将请求认为来自于本地(localhost),因此即使你在云服务器上运行 Flask 应用,它也会认为请求来自于本地地址(127.0.0.1)。要获取真实的客户端 IP 地址,你需要处理由反向代理服务器(如Nginx)转发的请求头。在 Flask 中,这可以通过检查特定的请求头来实现。通常,经过反向代理服务器的请求会在 X-Forwarded-For 头部中包含客户端的真实 IP 地址。

通过这样的修改,Flask 将首先尝试从 X-Forwarded-For 请求头中获取客户端的真实 IP 地址,如果找不到则使用默认的 request.remote_addr,以便在本地开发时也能正常工作。当请求经过反向代理服务器时,X-Forwarded-For 请求头将包含一个或多个 IP 地址,以逗号分隔,第一个 IP 地址即为客户端的真实 IP 地址。

4.3request

这个是最简单的示例

在这个示例中,它发送了一个 GET 请求到指定的 URL,同时设置了代理服务器。

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐