2018년 3월 25일 일요일

JBoss watches 비활성화

JBoss EAP 7.0.x 버전 사용 시에 tail을 사용하여 로그를 확인 할경우 또는 기동시에


ERROR [io.undertow] (MSC service thread 1-8:) UT005024: Could not register resource change listener for caching resource manager, automatic invalidation of cached resource will not work: java.lang.RuntimeException: java.io.IOException: User limit of inotify watches reached
    at org.xnio.nio.WatchServiceFileSystemWatcher.watchPath(WatchServiceFileSystemWatcher.java:183)
    at io.undertow.server.handlers.resource.PathResourceManager.registerResourceChangeListener(PathResourceManager.java:191)
    at org.wildfly.extension.undertow.deployment.ServletResourceManager.registerResourceChangeListener(ServletResourceManager.java:82)
    at io.undertow.server.handlers.resource.CachingResourceManager.<init>(CachingResourceManager.java:64)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.createServletConfig(UndertowDeploymentInfoService.java:584)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.start(UndertowDeploymentInfoService.java:283)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: User limit of inotify watches reached
    at sun.nio.fs.LinuxWatchService$Poller.implRegister(LinuxWatchService.java:264)
    at sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:260)
    at sun.nio.fs.LinuxWatchService$Poller.run(LinuxWatchService.java:329)


라는 메시지를 간혈적으로 보일경우가 있다
위 메시지를 Jboss 설정에서 default로 watches를 사용하고 있는데
이 watches를 비활성 하기 위해서는 JAVA_OPTS를 추가해야 한다.


"$JAVA_OPTS -Dio.undertow.disable-file-system-watcher=true"





2018년 3월 21일 수요일

Apache virtualhost rewrite 설정

virtualhost 설정은 기본적으로 IP 기반으로 동작한다

http는 80포트
https는 443포트

한 서버에서 테스트 시에 http와 https를 동시에 사용할 경우 문제점이 발생한다.
예를 들면
http://nonssl.testserver.com 이라는 URL을 호출하였을 시 문제가 없다
하지만 https://nonssl.testserver.com https로 호출하였을 시에 코드는 200이 떨어지면서 정상적으로 호출 된거처럼 보인다. 이건 잘못된 것이기 때문에 바로 잡아 주어야 한다.
이 원리는 기본적으로 host파일에 IP와 domain을 매핑 시키면 도메인명을 찾아 호출되는게 아니라 IP로 호출하기 때문에 https://nonssl.testserver.com 로 호출 하였을 시에
virtualhost *:443 으로 Listen하고 있는 virtualhost로 호출된다. 이 원리가 이해가 안간다면 virtualhost 동작 방식 문서를 참고하길 바란다.

IP를 추가로 할당 하여 virtualhost IP:PORT 로 설정 해주어도 가능하지만 만약 추가로 IP를 할당 받지 못할 경우 mod_rewrite를 사용하여 https 로 호출되는 것을 막을 수 있다.

RewriteEngine On (rewriteengine 사용여부 default가 off기 때문에 on)
RewriteCond %{HTTP_HOST} !^usessl\.testserver\.com$ [NC] (조건)
RewriteRule (.*) http://%{SERVER_NAME}$1 [R,L] (처리)

!는 부정이기 때문에 SERVER_NAME을 받아서 ssl을 사용하는 SERVER_NAME으로 들어왔을 경우에 다시 돌려보내는 방식으로 설정한다. 

이외에도 다른 방법들이 있지만 우선 이 방법을 사용하는 것이 가장 빠르다.