![Nginx 将 http referer 重写为 https](https://linux22.com/image/715083/Nginx%20%E5%B0%86%20http%20referer%20%E9%87%8D%E5%86%99%E4%B8%BA%20https.png)
我正在使用 proxy_pass 指令来连接上游 https 服务器。代理服务器适用于 LAN 客户端。但是我遇到了一个问题,上游 django 应用程序由于 referer 标头不安全而拒绝 http POST 请求
是否可以将http_referer
标头重写为 https?示例
http://192.168.1.5/application/page -> https://upstream.backend/application/page
答案1
我对 Apache 更有经验。但是 .conf 文件大体相同。
那么,您基本上想将所有 http 请求重写为 https?
并且 192.168.1.5 在您的 DNS 中解析为 upper.backend 吗?
如果是这种情况,并且您正在使用最新版本,那么您首先需要生成一个 SSL 证书以供使用。很简单,假设您正在使用 Linux 发行版,因此我将引导您通过 shell 或 ssh 执行此操作:
- /etc/nginx/ 目录
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt
此时,输入您的信息,将生成一个 2048 位(未签名)证书,您可以将其用于 nginx 端口 443。由于您在本地网络上,购买 SSL 证书将是一种浪费。
从这里开始,您需要使用所有上述相关信息(如域、证书位置)填充 /etc/nginx/sites-enabled/default(请务必告诉 nginx 监听端口 443)..下一步是代理传递:
... 地点 / {
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;
proxy_pass http://192.168.1.5/application/page;
proxy_read_timeout 90;
proxy_redirect http://192.168.1.5/application/page https://upstream.backend/application/page;
} ...
注意:这可能有效也可能无效,因为我跳过了一些我通常不会使用的东西。我会尝试这个。如果 nginx 不支持“应用程序/页面”,请尝试http://192.168.1.5和https://upstream.backend。
如果一切都失败了,请查找我不熟悉的“詹金斯”。
干杯