작성일 댓글 남기기

solr 접근제한 설정

IP로 접근제한 할려면 Context안에 설정해주면 된다.

tomcat/conf/Catalina/localhost/solr.xml 파일에 Value 추가한다.

 

<?xml version='1.0' encoding='utf-8'?>

<Context crossContext="true" debug="0" docBase="/home/solr/tomcat/webapps/solr" priviledged="true">
<Environment name="solr/home" override="true" type="java.lang.String" value="/search_data/solr/example/solr" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="10\.0\.96\.*|114\.119\.135\.116|114\.119\.145\.146|210\.25\.139\.101" />
</Context>

 

주의할점은 IP적을 때 . 앞에 \ 붙여 한다. 안 그러면 정규표현식이 되면서 . 는 아무 문자라는 뜻이 된다.
그리고 여러개의 IP를 넣을려면 | 로 구분자를 쓰면 된다.

 
id, pass 형식으로 접근제할려면

tomcat/conf/tomcat-users.xml 파일에 유저정보 추가하고

<tomcat-users>
<role rolename="solr "/>
<user username="solr" password="1234" roles="solr"/>
</tomcat-users>

 
tomcat/webapps/solr/WEB-INF/web.xml 에 아래 내용 추가한다.

<web-app>
....
<security-constraint>
<web-resource-collection>
<web-resource-name>Solr Lockdown</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>solr</role-name>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Solr</realm-name>
</login-config>
</web-app>

 

이부분에서 rolename을 매칭시켜야 한다.

 

작성일 댓글 남기기

solr 설치

자바SDK를 다운로드 후 /usr/local/java 에 설치하고 /etc/profile 에 java 경로를 추가한다.

export JAVA_HOME=/usr/local/java

 

solr 계정을 만든다.

adduser solr

 

이 후 작업은 solr 계정으로 전환해서 작업한다.

su - solr

 

 

tomcat과 solr데이터 디렉토리는 아래와 같이 진행한다.

– tomcat 디렉토리 : /home/solr/tomcat
– solr 디렉토리 : /search_data/solr (디렉토리권한은 solr로 변경되어 있다고 가정)

tomcat은 7.0.52 버전을 사용했고 solr는 4.7.0을 사용했다.

 

 

tomcat과 solr 를 solr 홈디렉토리에 다운로드 후 압축을 풀고 링크를 건다.

wget http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.52/bin/apache-tomcat-7.0.52.tar.gz
wget http://mirror.apache-kr.org/lucene/solr/4.7.0/solr-4.7.0.tgz
 
tar xzpvf apache-tomcat-.7.0.52
tar xzpvf solr-4.7.0.tgz
ln -sf apache-tomcat-7.0.52 tomcat

 

 

vi tomcat/conf/server.xml 파일을 열어서 Connector 부분에 URIEncoding=”UTF-8″ 옵션을 추가한다.

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

 

solr 웹앱 파일을 tomcat 앱디렉토리에 solr.war 이름으로 복사를 한다.

cp -av solr-4.7.0/dist/solr-4.7.0.war tomcat/webapps/solr.war

 

solr 폴더의 내용을 /search_data/solr 로 복사한다.

cp -av solr-4.7.0/* /search_data/solr/

이 부분에서 보통 다른 설치문서를 보면 example/solr 디렉토리를 복사하는 것으로 되어 있는데,
그렇게 설치하면 solr 설치디렉토리에 있는 contrib등의 디렉토리에 있는 라이브러리를 못 찾는다는 에러가 뜬다.

 

 

solr 웹앱 설정파일을 만든다.

mkdir -p tomcat/conf/Catalina/localhost
cd !$
vi solr.xml
 <?xml version='1.0' encoding='utf-8'?>
 
<Context crossContext="true" debug="0" docBase="/home/solr/tomcat/webapps/solr" priviledged="true">
    <Environment name="solr/home" override="true" type="java.lang.String" value="/search_data/solr" ></Environment>
</Context>

 

여기까지가 검색하면 나오는 설치방법인데, 여기까지 하면 catalina.out에 아래와 같은 에러가 발생한다.

SEVERE: Error filterStart
Mar 18, 2014 1:49:04 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/solr] startup failed due to previous errors

 

 

왜 에러가 발생하는지 알수가 없는데 알려면

tomcat/webapps/solr/WEB-INF/classes/logging.properties 파일을 만들어서 아래 내용을 추가해준다.

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

 

tomcat을 재시작하면 자세한 로그가 나온다.

SEVERE: Exception starting filter SolrRequestFilter
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at org.apache.solr.client.solrj.impl.HttpClientUtil.<clinit>(HttpClientUtil.java:78)
        at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:120)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at java.lang.Class.newInstance(Class.java:374)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:140)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:670)
        at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1839)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
        ... 23 more

 

 

slf4j 관련 에러가 나오는데 관련라이브러리와 설정파일을 tomcat에 복사해주면 된다.

cp -av solr-4.7.0/example/lib/ext/* tomcat/lib/
cp -av solr-4.7.0/example/resources/log4j.properties tomcat/lib

 

log4j.properties 파일을 열어서 solr.log 경로를 수정한다.

solr.log=/home/tomcat/logs/

 

다시 tomcat을 재시작 후 http://server:8080/solr 로 접속해보면 페이지가 뜨는 것을 확인 할 수 있다.