将域子目录反向代理到服务于同一域名的另一台主机

将域子目录反向代理到服务于同一域名的另一台主机

我有一个正确运行的 Debian 6.0 网络服务器,其设置如下:

Nginx as front-server listening on the WAN facing interface port 80
    Serving the domain HTTP mydomainame dot org (via reverse proxy to Apache)
    Directly serving and caching static files

Apache as backend-server listening on localhost port 8080 and WAN facing interface port 443
    Serving the domain HTTP mydomainame dot org (behind Nginx reverse proxy)
    Directly serving SSL for HTTPS mydomainame dot org (port 443)

我必须处理另一台我不管理的服务器,该服务器应该只提供 HTTPS mydomainame dot org/subdir 服务。

因此,该外部服务器应该监听 (WAN) 端口 443 并为同一域名 (mydomainame dot org) 下的子目录 /subdir 提供服务。

请注意,mydomainame dot org 的 DNS 记录指向我的 Debian 服务器。

我尝试做的第一件事就是设置我的 Nginx,以便它将任何 /subdir 请求反向代理到外部服务器 IP:

  location ^~ /subdir {
    proxy_pass https://000.000.00.000;
    include /etc/nginx/proxy_subdir.conf;
    error_log /var/log/nginx/mydomainame_subdir.errors.log;
    access_log /var/log/nginx/mydomainame_subdir.access.log;
    expires off;
  }

然后像这样设置标题:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Host "mydomainame dot org";

在这种情况下发生的情况是,外部服务器使用 301 反弹请求并重定向到 HTTPS mydomainame dot org/subdir,DNS 记录基本上将其解析回监听端口 443 的 Debian Apache 服务器。

我认为发生这种情况是因为在外部服务器(Magento)上运行的应用程序将 base_url 重写为 HTTPS mydomainame dot org/subdir,但我不完全确定这一事实。

因此浏览器最终访问了我的服务器,但是 Apache 没有配置为服务 /subdir,所以我当然会得到 404。

我是否应该设置 Apache 监听端口 443 以便再次反向代理回外部服务器?

这听起来像是创建重定向循环的好方法,所以我有点怀疑。

我认为问题实际上出在外部服务器上,但我不太确定该向该主机的维护人员提出什么建议。

他们也使用 Nginx,但直接在端口 443 上提供 SSL 服务。

感谢您对这一混乱局面的任何建议!

答案1

我会在 Apache 主机上启动 tcpdump 端口 443,看看是谁发送了 404,或者调整你的 404 消息以包含一些昵称来识别哪个框抛出了 404。另外,你是否已经证明了最终目的地https://somehost.org/subdir此时还能正常运作吗?

答案2

也许是时候利用端口和 IP 重定向来作弊了。

将 https 配置为来自 NGINX 的回复,即 mydomainname dot org:8443/subdir。然后将 rinetd 添加到将接收此回复的任何框中,盲目地将端口 8443 流量重定向到非托管框上的端口 443。(请记住添加防火墙规则以允许在 Apache/NGINX 系统上接收 8443。)

它应该执行以下操作:

incoming https at mydomainname dot org:443/subdir > 
NGINX rewrite to https at mydomainname dot org:8443/subdir >
incoming https at mydomainname do org:8443/subdir >
NGINX/APACHE rinetd forwards directly to https at notmyserver dot org:443/subdir

这对你有用吗?

另外,我会确实证明他们的终端会接受请求,因为在您这边请求可能已经正确,但在他们这边却不被接受。最简单的方法?在 url 调用中使用他们的 IP 地址,看看是否得到 404 或网站。

相关内容