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