我正在尝试检测访客所在国家。我在 cloudflare dash 中选中了 geoip 选项,它会将 CF-IPCountry 标头添加到请求标头中,但我无法通过 nginx 代理将其传递给我的后端应用程序。我做错了什么?
location / {
# forward application requests to the gunicorn server
proxy_pass http://localhost:8080;
proxy_redirect off;
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 CF_IPCountry $http_cf_ipcountry; #this line is the culprit
}
编辑:后端看不到此标头。我正在使用 flask 并创建了一条路由来输出所有请求标头。
@app.route('/headers')
def header():
headers = request.headers
header_list = []
for h in headers:
header_list.append(h)
return jsonify(header_list)
答案1
默认情况下,nginx 会忽略包含下划线的 HTTP 标头。
你有:
proxy_set_header CF_IPCountry $http_cf_ipcountry; #this line is the culprit
但这应该是:
proxy_set_header CF-IPCountry $http_cf_ipcountry; #this line is the culprit