![NGINX 反向代理公开后端服务器 IP 地址和协议](https://linux22.com/image/734727/NGINX%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%85%AC%E5%BC%80%E5%90%8E%E7%AB%AF%E6%9C%8D%E5%8A%A1%E5%99%A8%20IP%20%E5%9C%B0%E5%9D%80%E5%92%8C%E5%8D%8F%E8%AE%AE.png)
code.kx.com 上的文档服务器使用 CentOS 下的 NGINX 1.12.2 来提供静态 HTML。防火墙仅允许 SSH、HTTP、HTTPS。我们的自定义搜索引擎在同一台机器上的端口 5023 上作为 HTTP 服务器运行。
NGINX 配置文件将 HTTP 重定向到 HTTPS。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name code.kx.com;
return 301 https://$server_name$request_uri;
}
它还通过 HTTP 将搜索请求反向代理到搜索引擎,然后返回 HTML。
# Reverse-proxy to kxsearch-v2 service * 2018.12.21
location /v2/search {
proxy_pass http://127.0.0.1:5023/q/search;
}
HTTP 响应来自 code.kx.com:80,如下所示
curl -i https://code.kx.com/v2/search?query=iasc
问题来自三个不同公司代理服务器的访问者报告称,他们看到搜索引擎的 IP 地址暴露了。(当然,它与 code.kx.com 的 IP 地址相同。)在两种情况下,他们的代理服务器拒绝访问该 IP 地址。在第三种情况下,浏览器会提醒从 HTTPs 切换到 HTTP,然后再次提醒切换回 HTTPS,然后显示结果页面。
这种行为就像是浏览器被重定向到后端服务器一样。
答案1
事实证明这是 Unix/Linux 问题的重复Nginx 反向代理重定向。
答案的关键部分是
proxy_set_header Referer $http_referer;
这设置Referer
字段发送到我的搜索引擎。显然,发送到浏览器的响应取决于搜索引擎响应中的标头,我需要更好地理解这一点。