AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 725958
Accepted
Jonesome Reinstate Monica
Jonesome Reinstate Monica
Asked: 2015-10-01 21:42:06 +0800 CST2015-10-01 21:42:06 +0800 CST 2015-10-01 21:42:06 +0800 CST

nginx 负载均衡器 - 如何在上游保留完整的原始 url?

  • 772

Linux 上的 nginx 1.7.9

问题:

使用 nginx 时,Web 服务器将所有请求视为来自 http,即使它们是通过 https 进入的。

使用 IIS 请求跟踪,我们看到请求是这样进来的,即使外部(来自浏览器)请求是https://myapp.com:443/appdir/:

RequestURL="http://myapp.com:80/appdir/"

但是在我们的硬件负载均衡器(我们正试图逐步淘汰)上,它正确地出现在:

RequestURL="https://myapp.com:443/appdir/"

该应用程序需要看到https,这取决于它。(它试图强制连接安全。)

我们知道使用 X-Forwarded-Proto 等来告诉应用程序请求是通过 ssl 进来的,但是应用程序的一部分是围绕请求本身构建的,我们可能无法修改它。

硬件负载均衡器可以“全部完成”——终止 ssl,并将“假装”请求发送回应用程序(通过端口 80),这些请求似乎是对 https 的请求。

如何让 nginx 将完整的、未更改的请求 url 传递回服务器?

配置:

http {

upstream sandbox_site {
    least_conn;
    # we pipe to back end on port 80 only, so that nginx handles all ssl
    server 192.168.2.16:80 max_fails=1 fail_timeout=60s;  # sbox3-site is .2.16
}

server {
    # This is sandbox.myapp.com block **************************************
    listen 192.168.2.27:80;
    server_name sandbox.myapp.com;

    location / {
    proxy_pass http://sandbox_site;
        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;
    }
}

server {
    # This is SSL version of sandbox.myapp.com block **************************************
    listen 192.168.2.27:443 ssl;
    server_name sandbox.myapp.com;

    ssl_certificate      new-sandbox-myapp-com.cer;
    ssl_certificate_key  new-sandbox-myapp-com.key;

    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://sandbox_site;
        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;            
    }
}   

}

nginx
  • 1 1 个回答
  • 2946 Views

1 个回答

  • Voted
  1. Best Answer
    drookie
    2015-10-01T21:55:29+08:002015-10-01T21:55:29+08:00

    基本上你有两个选择:

    • 要么你正在卸载 SSL,就像你现在正在做的那样,那么你可以告诉你的后端请求实际上是用 SSL 接收的(如果是的话):

      proxy_set_header X-Forwarded-Proto $scheme;
      

      但这肯定意味着您必须调整代码,以便它处理该标头。

    • 或者,如果不允许修改代码,您可以停止卸载 SSL,并通过它从后端实际代理页面。

      所以这就是 SSL 沙盒块的样子:

      location / {
          proxy_pass https://sandbox_site;
          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;            
      }
      

    但是,第二种方式是多余的:您看,您实际上仍然卸载 SSL,但随后再次组装 SSL 请求,即使它来自您的受信任网络。它所做的一切——只是增加了不必要的转换。

    • 3

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve