我让 Nginx 监听端口 80 上的流量,并通过端口 8080 将某些请求代理到 Apache。我将设置 Nginx 来监听端口 443 上的 https 流量,但我的问题是现在应该如何进行代理?Apache 的代理是否需要 https,或者 Nginx 是否已对其进行解码,以便我可以继续通过端口 8080 将其发送到 Apache。顺便说一句,Apache 运行时安装的模块数量尽可能少,目前没有 SSL 相关模块,我需要安装任何模块吗?
答案1
以下解决方案由 Graham Dumpleton 提出,解决了运行 nginx+ssl 作为 apache+wsgi 代理时出现 SSL 重定向循环的问题。
在您的 nginx.conf 文件中您需要有:
proxy_set_header X-Url-Scheme $scheme;
你的 WSGI 包装器看起来像这样:
import os, sys
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
environ['wsgi.url_scheme'] = environ.get('HTTP_X_URL_SCHEME', 'http')
return _application(environ, start_response)
答案2
这听起来不像是一个编程问题,真的……但无论如何:不,您不需要在 Apache 上启用 SSL。只有监听 HTTPS 请求(在端口 443 上)的服务器才需要 SSL。
答案3
这是一个老问题,但作为参考,你可以看看我的博客文章使用 Nginx 作为 Apache 中基于名称的虚拟主机的 SSL 代理
它基本上转发到端口 80 上的 apache,并使用mod_rpaf(反向代理添加转发)在 apache 中,它将把请求视为 HTTPS,这对于使用服务器变量构建其 url 的框架来说是必需的。