如何设置 SSL 和 Nginx 代理?

如何设置 SSL 和 Nginx 代理?

我让 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 的框架来说是必需的。

相关内容