如何在 Elastic Beanstalk 负载均衡器环境中允许编码斜杠
Posted
技术标签:
【中文标题】如何在 Elastic Beanstalk 负载均衡器环境中允许编码斜杠【英文标题】:How to allow for encoded slashes in an Elastic Beanstalk Load Balancer environment 【发布时间】:2016-12-13 10:08:18 【问题描述】:我遇到了一个问题,即传递给我的 Elastic Beanstalk 环境的某些 URL 在 URL 的参数中包含斜杠,例如:
https://example.com/param1=this/that/param2=....
这些 URL 在我的应用程序可以在本地测试中正确处理斜线的上下文中有效。在 EB 上的生产中,Apache 服务器 EB 用作默认解码斜杠,导致 404 返回给用户。我对我的 Apache 知识不是很了解。在环境启动时动态设置参数的最佳和最有效方法是:AllowEncodedSlashes NoDecode
在我的 Apache 配置中?
显然,通过 SSH 连接到我的实例以进行更改远非理想,并且不会持续超过重新加载。是否可以以某种方式使用我的应用程序 .ebextensions 进行设置?
编辑:
为了提供更多详细信息,我正在使用负载平衡的 EB 环境,该环境使用 HTTPS 并正在运行 Django 应用程序(使用 mod_wsgi)
这是我的 wsgi.conf 文件,取自我的一个实例:
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On
<VirtualHost *:80>
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/python/current/app/test_app/wsgi.py
AllowEncodedSlashes NoDecode
<Directory /opt/python/current/app/>
Require all granted
</Directory>
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%GROUP \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>
LogFormat "%h (%X-Forwarded-Fori) %l %u %t \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\"" combined
这是我必须编辑的文件吗? EB enviornemnt 不会在环境重启时覆盖我的更改吗?
【问题讨论】:
Configure apache on elastic beanstalk的可能重复 【参考方案1】:检查下面的 Apache 示例配置以处理编码斜杠。请记住,这只是一个示例。您必须通过参考以下代码来操作您的 Apache 代码,因为您没有将 apache 主机文件粘贴到您的问题中。
<VirtualHost *:80>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost on
AllowEncodedSlashes NoDecode
LogFormat "%h (%X-Forwarded-Fori) %l %u %t \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\""
ErrorLog /var/log/httpd/elasticbeanstalk-error_log
TransferLog /var/log/httpd/elasticbeanstalk-access_log
</VirtualHost>
【讨论】:
我的问题是,我如何有效地进行这些更改?我是否将我的 EB 实例中的 wsgi.conf 文件替换为类似版本? 在 AllowEncodedSlashes 行上方添加此 ProxyPreserveHost以上是关于如何在 Elastic Beanstalk 负载均衡器环境中允许编码斜杠的主要内容,如果未能解决你的问题,请参考以下文章
重新部署后如何使用 Elastic Beanstalk 处理经典负载均衡器
如何从 CloudFormation 中的 Elastic Beanstalk 环境中提取负载均衡器名称
在 Elastic Beanstalk 中,如何使用 .ebextensions 将现有安全组设置为负载均衡器?
如何使用 CLI 配置 Elastic beanstalk 经典负载均衡器以终止 HTTPS