我有一个由反向代理提供的子目录 /blog/。网站的其余部分通过 https 提供。
我尝试通过 http 提供 /blog/ 服务,但不使用 SSL,但一直收到 too_many_redirects 错误。以下是配置(编辑,以前可以正常工作,但自从我进行了 SSL 更新后,某些地方发生了变化 - 可能是 Forge 的问题 - 我不知道,但我认为找到解决方案并不重要):
# FORGE CONFIG
include forge-conf/example.com/before/*;
server {
listen 80;
server_name example.com;
location /blog {
proxy_set_header X-Original-Host $host;
proxy_set_header X-Is-Reverse-Proxy "true";
proxy_pass_header Set-Cookie;
proxy_cookie_path / /blog/;
proxy_pass http://blog.example.com/;
expires off;
}
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/example.com/server/*;
location / {
return 301 https://example.com$request_uri;
}
}
server {
listen 443 ssl;
server_name .example.com;
root /home/forge/example.com/public;
# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/example.com/166494/server.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/166494/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
index index.html index.htm index.php;
charset utf-8;
location /blog {
return 301 http://example.com$request_uri;
}
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/example.com/server/*;
如果我在 443 监听部分添加反向代理块,它就可以通过 https 正确提供服务 - 但由于混合内容(博客的原始服务器是 http),我无法这样做
编辑:更多信息,这里是设置 - 不理想但别无选择:blog.example.com 托管在另一台没有 SSL 的服务器上的 apache 上。example.com/blog/ 反向代理位于 blog.example.com 的博客。example.com 有 SSL 证书。我不想通过 https 提供博客,否则我需要另一个 blog.example.com 证书
答案1
您的博客似乎是通过 http 提供服务的,而转发器则通过 https 提供服务。为什么会这样?
首先,将您的博客位置从 http 服务器移至 https 服务器,删除进行转发的现有博客位置。
接下来,更改你的 http 服务器以转发所有内容,如下所示
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
我怀疑您设置上述内容是有原因的,但您没有清楚地说明原因。如果此解决方案不起作用,请编辑您的问题以更清楚、更全面地解释您的情况以及此答案不起作用的确切原因 - 最好包括 curl 显示和返回的重定向标头以及匹配的 Nginx 访问/错误日志。