我的网站是用cloudflare 代理 + ngnix + flask 请问怎么获取客户端ip
要获取客户端IP地址,您需要在NGINX上配置proxy_protocol。proxy_protocol是一种协议,它可以在代理服务器和后端服务器之间传递原始的客户端IP地址信息。
以下是如何启用proxy_protocol:
listen 80 proxy_protocol;
from flask import request
@app.before_request
def get_client_ip():
if 'X-Forwarded-For' in request.headers:
return request.headers.getlist('X-Forwarded-For')[0]
else:
return request.remote_addr
这将检查请求标头中是否存在X-Forwarded-For标头,并从中提取客户端IP地址。如果没有,则返回request.remote_addr。
请注意,如果使用Cloudflare作为代理服务器,还需要在Cloudflare控制面板中启用“真实IP”功能。该功能将在HTTP标头中添加CF-Connecting-IP标头,其中包含客户端IP地址。
希望这可以帮助您获取客户端IP地址!
listen 80 proxy_protocol; 报520错误
如果您使用了Cloudflare代理,那么应该将NGINX配置中的listen
端口更改为443,并启用SSL/TLS来保护数据传输。另外,您需要为NGINX启用proxy_protocol以获取客户端IP地址。
以下是如何在Cloudflare代理+NGINX+Flask环境中获取客户端IP地址:
server {
listen 443 ssl http2 proxy_protocol;
ssl_certificate /path/to/ssl/certificate;
ssl_certificate_key /path/to/ssl/key;
# rest of your config
}
这将启用SSL/TLS并启用proxy_protocol以获取客户端IP地址。
from flask import request
@app.before_request
def get_client_ip():
if 'CF-Connecting-IP' in request.headers:
return request.headers.getlist('CF-Connecting-IP')[0]
elif 'X-Forwarded-For' in request.headers:
return request.headers.getlist('X-Forwarded-For')[0]
else:
return request.remote_addr
此代码将检查请求标头中是否存在CF-Connecting-IP
或X-Forwarded-For
标头,并从中提取客户端IP地址。如果没有,则返回request.remote_addr
。
请注意,在Cloudflare代理下,客户端IP地址将作为CF-Connecting-IP
标头发送。如果未启用“真实IP”功能,X-Forwarded-For
标头将不会发送任何有用的信息。
希望这可以帮助您获取客户端IP地址!
我用的是 Flexible Encrypts traffic between the browser and Cloudflare 之前我listen 80; 是可以正常访问网站的
如果您使用了Cloudflare代理,那么应该将NGINX配置中的listen
端口更改为443,并启用SSL/TLS来保护数据传输。另外,您需要为NGINX启用proxy_protocol以获取客户端IP地址。
以下是如何在Cloudflare代理+NGINX+Flask环境中获取客户端IP地址:
server {
listen 443 ssl http2 proxy_protocol;
ssl_certificate /path/to/ssl/certificate;
ssl_certificate_key /path/to/ssl/key;
# rest of your config
}
这将启用SSL/TLS并启用proxy_protocol以获取客户端IP地址。
from flask import request
@app.before_request
def get_client_ip():
if 'CF-Connecting-IP' in request.headers:
return request.headers.getlist('CF-Connecting-IP')[0]
elif 'X-Forwarded-For' in request.headers:
return request.headers.getlist('X-Forwarded-For')[0]
else:
return request.remote_addr
此代码将检查请求标头中是否存在CF-Connecting-IP
或X-Forwarded-For
标头,并从中提取客户端IP地址。如果没有,则返回request.remote_addr
。
请注意,在Cloudflare代理下,客户端IP地址将作为CF-Connecting-IP
标头发送。如果未启用“真实IP”功能,X-Forwarded-For
标头将不会发送任何有用的信息。
希望这可以帮助您获取客户端IP地址!
我的nginx配置是 server { listen 80; server_name api-shape.dreamix.com;
access_log /var/log/nginx/api-shape.dreamix.access.log;
error_log /var/log/nginx/api-shape.dreamix.error.log;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token';
if ( $request_method = 'OPTIONS' ) {
return 200;
}
proxy_connect_timeout 180s;
proxy_send_timeout 180s;
proxy_read_timeout 180s;
location / {
proxy_pass http://127.0.0.1:3001/;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
} 可以https正常访问,但是获取不到客户端ip
如果您使用了Cloudflare代理,那么应该将NGINX配置中的listen
端口更改为443,并启用SSL/TLS来保护数据传输。另外,您需要为NGINX启用proxy_protocol以获取客户端IP地址。
以下是如何在Cloudflare代理+NGINX+Flask环境中获取客户端IP地址:
server {
listen 443 ssl http2 proxy_protocol;
ssl_certificate /path/to/ssl/certificate;
ssl_certificate_key /path/to/ssl/key;
# rest of your config
}
这将启用SSL/TLS并启用proxy_protocol以获取客户端IP地址。
from flask import request
@app.before_request
def get_client_ip():
if 'CF-Connecting-IP' in request.headers:
return request.headers.getlist('CF-Connecting-IP')[0]
elif 'X-Forwarded-For' in request.headers:
return request.headers.getlist('X-Forwarded-For')[0]
else:
return request.remote_addr
此代码将检查请求标头中是否存在CF-Connecting-IP
或X-Forwarded-For
标头,并从中提取客户端IP地址。如果没有,则返回request.remote_addr
。
请注意,在Cloudflare代理下,客户端IP地址将作为CF-Connecting-IP
标头发送。如果未启用“真实IP”功能,X-Forwarded-For
标头将不会发送任何有用的信息。
希望这可以帮助您获取客户端IP地址!
listen 80 http2 proxy_protocol; 这样行吗
是的,您可以使用以下NGINX配置来启用proxy_protocol:
server {
listen 80 http2 proxy_protocol;
server_name yourdomain.com;
# rest of your config
}
这将为NGINX启用代理协议并允许在代理服务器和后端服务器之间传递客户端IP地址。
对于Flask应用程序,您可以使用以下代码来获取客户端IP地址:
from flask import request
@app.before_request
def get_client_ip():
if 'CF-Connecting-IP' in request.headers:
return request.headers.getlist('CF-Connecting-IP')[0]
elif 'X-Forwarded-For' in request.headers:
return request.headers.getlist('X-Forwarded-For')[0]
else:
return request.remote_addr
此代码将检查请求标头中是否存在CF-Connecting-IP
或X-Forwarded-For
标头,并从中提取客户端IP地址。如果没有,则返回request.remote_addr
。
请注意,在Cloudflare代理下,客户端IP地址将作为CF-Connecting-IP
标头发送。如果未启用“真实IP”功能,X-Forwarded-For
标头将不会发送任何有用的信息。
希望这可以帮助您获取客户端IP地址!