AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 473130
Accepted
Saqib Ali
Saqib Ali
Asked: 2013-01-29 08:55:44 +0800 CST2013-01-29 08:55:44 +0800 CST 2013-01-29 08:55:44 +0800 CST

在生产环境中保护 Apache Solr

  • 772

我正在设置 Apache Solr 4.1,它将用于为 Web 应用程序索引数据。只有 Web 应用程序才能访问 Solr。用户和其他客户端不会直接与 Solr 对话。

保护此类 Solr 设置的最佳实践有哪些?

(我们使用 Jetty 来运行 Solr)

web-server
  • 2 2 个回答
  • 6760 Views

2 个回答

  • Voted
  1. Best Answer
    Giacomo1968
    2013-01-29T20:58:59+08:002013-01-29T20:58:59+08:00

    我知道您正在使用 Jetty,但我有一个使用 Tomcat 的方法有效,将在下面解释。

    基本上,我已经放弃尝试理解我认为 Java Web 应用程序在 Jetty 和 Tomcat 中保护自己的过于迟钝的方式。因此,我更愿意让 Apache 承担重任,成为防止访问的第一道防线。Apache 坚固可靠。如果您觉得需要额外的安全性,您可以随时安装ModSecurity等工具以使其更加安全。

    关键是像这样在 Apache 中创建反向代理设置。将运行 Solr 的主机的 Apache 配置代码。我喜欢让它从子目录中运行,所以这个例子/solr用作ProxyPass和ProxyPassReverse设置的例子。首先是在 URL 中添加尾部斜杠的设置,以便将调用http://my.server.is.great/solr转换为http://my.server.is.great/solr/

    # Settings for adding a trailing slash to the URL
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/(solr)$
    RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]
    

    现在来了mod_proxy将 Tomcat Web 应用程序路由到 Apache 前端的魔法。

    # Settings for Solr in Apache
    <IfModule mod_proxy.c>
    
        # Proxy specific settings
        ProxyRequests Off
        ProxyPreserveHost On
    
        <Proxy *>
            AddDefaultCharset off
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass /solr http://localhost:8080/solr/
        ProxyPassReverse /solr http://localhost:8080/solr/
    
    </IfModule>
    

    此时,我将重新启动 Apache 并查看它是否有效。如果是这样,一切都很好!现在最后一步是进入 Tomcat XML 文件并通过添加到连接器来限制 Solr 仅响应localhost/请求。127.0.0.1address="127.0.0.1"

    <Connector port="8080" protocol="HTTP/1.1"
                           address="127.0.0.1"
                           connectionTimeout="20000"
                           URIEncoding="UTF-8"
                           redirectPort="8443" />
    

    现在这最后一部分?也许这就是您所需要的。也许您只是希望它address="127.0.0.1"成为需要访问的一台机器的机器 IP。但是话又说回来,您正在使用 Jetty,所以也许有一种等效的方法可以限制 Jetty 中的一个 IP?或者您甚至可以通过 Apache 配置中的 IP 进行限制。什么效果最好。

    • 5
  2. Shane Madden
    2013-01-29T20:40:05+08:002013-01-29T20:40:05+08:00

    如果可能,请使用 SSL 并要求对所有内容进行身份验证。

    对于 SSL,请参阅 Jetty 文档。

    对于身份验证,Solr 文档中有一个很好的 Jetty 示例。

    • 1

相关问题

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 持续监控许多服务器运行状况的简单方法?

  • 构建家庭服务器时要考虑的要点[关闭]

  • 用于 Web 应用服务器的 FreeBSD 磁盘分区(Apache/MySQL/PHP)

  • 我需要在 Rackspace 专用/托管网络和数据库 (Linux) 服务器上安装防病毒软件吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve