设置 google.com 的反向代理,同时维护先前在 apache 上托管的 Web 服务

设置 google.com 的反向代理,同时维护先前在 apache 上托管的 Web 服务
server {
    listen 80;
    server_name example.com;
    location / {
        rewrite ^/(.*)$ https://$host$1 permanent;
    }
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate      /etc/ssl/example.crt;
    ssl_certificate_key  /etc/ssl/example.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    location / {
        proxy_pass https://www.google.com;
        proxy_set_header Host www.google.com;
        proxy_set_header Referer https://www.google.com;

        proxy_set_header User-Agent $http_user_agent;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Accept-Encoding "";
        proxy_set_header Accept-Language $http_accept_language;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        sub_filter google.com example.com;
        sub_filter_once off;
    }
}

我正在尝试使用这个,但 0.0.0.0:80 正在被 apache 使用,但问题是如何将请求从 bi.example.com 反向代理到 google.com,同时仍让 webservice.example.com 将请求重定向到托管 API web 服务的 example.com。我认为这不可能,但我可能错了。

当我尝试启动 nginx 时出现此错误:

Dec 28 10:52:22 example.com nginx[27291]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address al...use)
Dec 28 10:52:23 example.com nginx[27291]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address alr...use)
Dec 28 10:52:23 example.com nginx[27291]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address al...use)
Dec 28 10:52:23 example.com nginx[27291]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address alr...use)
Dec 28 10:52:23 example.com nginx[27291]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address al...use)
Dec 28 10:52:24 example.com nginx[27291]: nginx: [emerg] still could not bind()

我检查了端口,它正在被与 Apache 相对应的 httpd 使用。

进一步解释一下,我有两个 CNAME 重定向到 example.com,我想重定向到与 Google 不同的页面,但这只是一个例子,因为两个 CNAME 都重定向到同一个 url,我认为这是不可能的,如果 Apache 使用端口 80,则从一个 url 重定向到另一个 url 以向 Google.com 以外的另一个链接提供 SSL 证书是不可能的。除了为此使用全新的服务器外,还有其他可能性吗?现在,有一个从 bi.example.com 到 Google 以外的另一个 url 的 CNAME 重定向,我尝试使用 nginx 设置重定向,将 bi.example.com 中的 CNAME 指向 example.com 而不是其他 url。

答案1

您不能让两个程序(Apache 和 nginx)监听同一个端口,但您可以让一个程序(Apache 或 nginx)将两个单独的主机名反向代理到两个不同的服务,甚至可以在一个主机名上提供内容而反向代理另一个主机名。

因此,解决方案是首先决定使用 Apache 或 nginx 这两个程序中的一个,然后在该程序中为通过 CNAME 记录重定向到它的两个主机名设置两个虚拟主机。然后,这两个虚拟主机中的一个可以反向代理到 Google,另一个可以提供(或反向代理到)您的 Web 服务。

SSL 证书的问题另当别论。你可以配置反向代理,为两个虚拟主机使用单独的证书,也可以使用对两个虚拟主机都有效的证书。

相关内容