设置访问受限的Magento登台环境


18

我正在尝试找出设置具有某些访问限制的暂存环境的最佳方法。

一个简单的解决方案是抛出基本身份验证,但是在测试性能优化以及我想访问它的其他类似外部服务时,我将无法针对它进行指点Google Page Speed Insights。

可以将它与robots.txt完全公开,以防止其出现在搜索引擎中。但我担心的是,robots.txt中任何错误的风险都很高,我宁可不必为此担心。

如果您不阻止搜索引擎(或者如果有人忽略它),那么您将吸引现场客户向您的登台站点下订单,这不会使他们满意。

甚至更糟的是,如果您不小心将robots.txt部署到生产环境中,则会损失所有的Google果汁和大量的销售收入。

因此,我喜欢的选项是简单的IP地址限制。但是,我希望能够添加/删除限制而不必重新启动Nginx,只是为了最大程度地降低更改时的风险。

因此,我开始倾向于一个快速模块,该模块在启用后将查看开发人员IP地址,并且仅在用户的IP地址(或X_FORWARDED_FOR)与之匹配时才允许访问该站点(前端和后端)。

想知道这听起来像是一个合理的解决方案,还是我遗漏了更简单的东西。

更新:鉴于robots.txt可以通过本机后端交换机控制,并且演示商店通知将阻止任何合法的客户订单,并且由于我真的不担心对登台站点的公共访问,所以我喜欢Phil的解决方案。

但是对于任何想限制访问其暂存站点的人来说,我认为Kris的解决方案是必经之路。

更新2:不能100%确定应在“系统配置”>“设计”>“ HTML头”中选择robots.txt选项,但是在我的情况下-从简短的搜索看来这很常见-我只有一个扁平的robots.txt文本文件正被使用的地方,因此不考虑config选项。

因此,我现在要使用维护模块:https : //github.com/aleron75/Webgriffe_Maintenance

Answers:


6

一些建议-有些是内置的!

- 开发人员IP限制内置于系统配置>开发人员中:

这并不限制IP访问。向前走。

  • IP限制很严格,我个人更喜欢在防火墙上进行处理。IP表也是一个候选者,htaccess限制或通过$_SERVER['REMOTE_ADDR']index.php也可以。

  • 在系统配置>设计> HTML Head中暂存时,将CMS中默认的每页漫游器元数据更新为NOINDEX / NOFOLLOW:

在此处输入图片说明

  • 在同一配置区域中,可以显示演示商店通知

在此处输入图片说明


1
谢谢菲尔。我有点忘记了robots是默认的后端选项,我想这使使用它而不是手动使用robots.txt文件大惊小怪。我实际上知道开发人员的IP限制,但实际上并不能帮助您限制对该网站的访问,对吗?仅开发人员功能?演示通知-绝对应该避免客户错误地下订单,打个招呼。
kalenjordan 2013年

1
天哪,你是对的。我不知道我怎么不知道。
philwinkle

11

锁定(大多数)登台环境的主要方法是BASIC身份验证。但是,我们也采取了预防措施,以防止引擎发现它们,禁止在公共网站上显示链接(这种情况永远不会发生),并防止它们被Google索引。

/etc/httpd/conf.d/robots.conf使用以下别名设置了一个规则:

Alias /robots.txt /<path_to_public_html>/robots.txt
<Location /robots.txt>
  Satisfy any
</Location>

别名会将所有请求发送到robots.txt位置的锁定文件。这意味着Magento登台根目录中robots.txt文件中的内容并不重要,服务器将始终遵循以下规则:

User-agent: *
Disallow: /

由于我们没有全局disallow from any规则,因此位置并满足任何条件都可以将robots.txt文件提供给任何人,而无需进行身份验证。

对于密码身份验证,我已经设置了规则,以便可以通过添加Satisfy any.htaccess文件来临时在单个站点上打开身份验证。这是因为我们在同一台专用内部登台服务器上运行多个登台站点。它还将允许设置allow from规则以及,Satisfy any以删除对特定IP地址的密码身份验证,同时为其他所有人(如果我确实需要)维护密码身份验证。

我不喜欢全面使用基于IP的白名单的原因(即没有基于密码的身份验证)是因为客户端的IP地址并不总是静态的。这意味着我们将不得不更新其IP,以使其(可能)每天或每周访问一次,这取决于其ISP DHCP保留租约的时间。

对于DNS,我们使用通配符DNS,以便DNS搜寻器不会在需要公共DNS的所有阶段站点主机名上使用。Google实际上会从DNS记录中选择一个站点。这样可以防止这种情况的发生,这意味着他们找到它的唯一方法是有人将链接放置在某处。但是,如果强迫漫游器文件提供禁止规则,则一旦发现链接,它们将停止索引。

如果我代替的是为公司网站运行舞台站点的商人的地方,我会做一些不同的事情,并且只会阻止所有进入舞台箱的流量,除非它知道IP地址。如果他们没有静态IP(我可以将其列入白名单),则远程(内部)在网站上工作的任何人都必须连接到公司VPN才能访问。

如果您需要测试支付处理器集成之类的东西,则必须拥有公共DNS,这与大多数网关不同,必须对服务器进行回调以完成支付过程。


2
这真的很周到。我们还使用基本身份验证,不过,大部分呈现给分期,你叫出上述同样的挑战时间:支付processers等
philwinkle

6

我开发了一个用于启用维护模式的模块,该模块可以与阻止用户访问前端的效果相同(而不是受Magento的本机IP阻止功能限制的管理员)。

即使启用了维护模式,您实际上也可以允许某些IP访问前端。

也许您可以尝试一下,希望对您有所帮助。它是免费和开源的:https : //github.com/aleron75/Webgriffe_Maintenance


+1好!这正是我所想到的那种模块。您是否在Varnish之后对其进行了测试?
kalenjordan 2013年

嗨,很抱歉,我没有在Varnish后面进行测试。你会那样做吗?;-)
亚历山德罗·隆奇

在我的暂存环境中工作。我不知道,如果这个逻辑会工作B / C是我见过的REMOTE_ADDR存在,但不正确的地址,所以我认为这可能是更好的来比较两种 REMOTE_ADDRX_FORWARDED_FOR。不过,在分阶段工作还不错,所以我现在还不太担心自己亲自进行深入研究。
kalenjordan 2013年

4

有几种不同的方法可以做到这一点。

一种方法是让您的开发人员使用正确的IP地址编辑/ hosts文件。

那里有一个扩展声称可以更优雅的方式做到这一点:http : //www.magentocommerce.com/magento-connect/et-ip-security.html


1
谢谢克里斯!我想我现在考虑只使用演示商店功能。由于我不必手动使用robots.txt来走动,也不必通知演示商店,所以我认为就足够了。但是对于任何想限制登台访问的人来说,我认为您找到的模块就是路要走。谢谢!!
kalenjordan

2

由于您在评论中询问了Varnish,因此我将使用Varnish与HTTP Basic Authentication共享我的配置,包括异常。您必须在VCL中进行设置,否则将始终可以访问缓存的页面。

清漆VCL配置

我想允许某些IP地址和范围用于付款提供商等的回调,在VCL文件顶部将其定义为ACL:

acl payment {
  "1.2.3.4"/28;
  "1.3.3.7";
}

然后,在末尾添加以下vcl_recv,就在return (lookup)

if (! req.http.Authorization ~ "Basic XXXXXXXXX"
&& ! client.ip ~ payment
&& ! req.url ~ "^/index.php/ADMIN/.*/upload") {
    error 401 "Restricted";
}

payment是上面定义的ACL。我还允许访问上载路由,因为Flash上​​载器不会发送身份验证标头,因此在HTTP Basic Auth之后失败。用您的实际管理员URL替换ADMIN。您可以通过这种方式添加其他任何例外。

XXXXXXXXX是base64编码的用户名和密码。在外壳上运行以下命令以生成此字符串:

$ echo -n "username:password" | base64

然后在VCL的末尾添加此代码以定义401错误响应:

sub vcl_error {
if (obj.status == 401) {
  set obj.http.Content-Type = "text/html; charset=utf-8";
  set obj.http.WWW-Authenticate = "Basic realm=Secured";
  synthetic {" 

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

 <HTML>
 <HEAD>
 <TITLE>Error</TITLE>
 <META HTTP-EQUIV='Content-Type' CONTENT='text/html;'>
 </HEAD>
 <BODY><H1>401 Unauthorized (varnish)</H1></BODY>
 </HTML>
 "};
  return (deliver);
}
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.