카테고리 보관물: config

IIS 10 URL Rewrite를 사용 HTTP → HTTPS Redirect 설정

이 글은 Windows 10의 IIS에서 테스트 되었습니다. URL 재작성을 사용하기 위해서는 웹 플랫폼 인스톨러를 통해서 URL 재작성 기능을 설치해야 합니다.

웹 플랫폼 인스톨러가 설치되어 일지 않다면 Web Platform Installer 에서 다운로드하여 설치합니다.

웹 플랫폼 인스톨러에서 URL 재작성 기능을 검색하여 설치합니다.

IIS 관리자에서 웹사이트를 선택하고 가운데 화면에서 “URL 재작성”을 더블 클릭합니다.

오른쪽 화면에서 “규칙 추가…”를 클릭합니다.

인바운드 규칙의 “빈 규칙” 을 선택하고 “확인” 버튼을 누릅니다.(빈 규칙을 더블 클릭해도 됩니다.)

인바운드 규칙 편집 상단의 이름과 URL 검색에 다음과 같이 입력합니다.

* 이름 : Redirect to HTTPS

* URL 검색

– 요청한 URL(R) : 패턴과 일치

– 사용(S) : 정규식

– 패턴(T) : (.*)

– 대/소문자 무시(I) : 체크

조건 영역에서 “논리 그룹화(G)”는 “모두 일치” 를 선택하고 “추가…” 버튼을 누릅니다.

조건 추가 창에서 다음과 같이 입력합니다.

– 조건 입력(C): {HTTPS}

– 입력 문자열이 다음과 같은 경우 확인: 패턴과 일치

– 패턴(T): ^OFF$

– 대/소문자 무시 : 체크

작업 영역에서 다음과 같이 입력합니다.

– 작업 유형(Y): 리디렉션

– URL 리디릭션: https://{HTTP_HOST}/{R:1}

– 쿼리 문자열 추가(Q): 체크

– 리디렉션 유형: 기타 참조(303)

IIS관리자 오른쪽 화면에서 “적용”을 누르고 “규칙으로 돌아가기”를 누릅니다.

URL 재작성 룰이 추가된것을 확인할 수 있습니다.

이제 http:// 요청을 해보면 https:// 로 리다이렉트 되는 것을 확인할 수 있을 것입니다.

IIS + PHP 상세 에러 보기 설정

PHP 개발에서 에러가 날때, 해당 내용을 봐야 하는데,

기본적으로 IIS에서 PHP에러를 차단하고 에러번호(500번등)로만 나타난다.

운영서버에서 에러를 보지 못하게 하는 것은 좋은 설정이지만, 개발 당시에 에러를 보지 못한다는 것은 너무도 참혹한 설정이다.

해당 부분의 설정은 다음과 같이 설정하면 된다.

먼저, php.ini의 설정 위치를 찾기 위해서 <? phpinif(); ?>를 만들어서, 설정 파일 위치 정보를 찾는다.

1) PHP의 php.ini위치 값 확인

phpinfo 정보

2) C:\Program Files\PHP\v7.2\php.ini의 display_errors = On로 변경로 변경후 주석제거

3) Configurat Editor를 선택

IIS의 configurationEditor

4) 세션 항목 중에 httpErrors항목을 선택합니다.

httpError세션 선택

5) httpErrors세션의 errorMode를 Detailed로 변경

errorMode 변경

다음과 같이 설정하면, PHP의 에러 메시지를 확인 할 수 있습니다.

HTTPS SSL 인증서 상호 변환하기 apache(.crt ) ↔ IIS(.pfx) ↔ Tomcat(jks)

1. PKCS(.pfx)

– 윈도우 IIS 에서 사용되는 키와 인증서가 포함된 파일

2. apache 용 인증서

– .crt : 텍스트 형식의 인증서 파일

– .key : 텍스트 형식의 키파일

3. pfx -> crt

root]~]# openssl pkcs12 -in filename.pfx -nocerts -out filename.key # 키파일 추출
root]~]# openssl pkcs12 -in filename.pfx -nokeys -clcerts -out filename.crt # 인증서파일 추출
root]~]# openssl pkcs12 -in filename.pfx -nodes -nokeys -cacerts -passin pass:비밀번호 -out chain.crt # 체인인증서 추출

4. crt -> pfx

root]~]# openssl pkcs12 -inkey aaa.key -in qtrustssl.crt -certfile ChainCA.crt -export -out qtrustssl.pfx -name “qtrustssl”

5. pfx -> jks

keytool -importkeystore -srckeystore qtrustssl.pfx -srcstoretype pkcs12 -destkeystore qtrustssl.jks -deststoretype jks -alias “qtrustssl”

6. jks 정보 확인방법

keytool -list -keystore cert.jks -rfc
keytool -list -keystore cert.jks -v

APM연동_PHP설치(Windows 10)

http://windows.php.net/download/

에 들어가 Thread safe방식 zip파일 가장 최근 버전을 다운로드 받습니다.

압축을 풀고 폴더이름을 PHP7으로 변경한 후에 PHP7폴더를 C드라이브에 옮겨줍니다.

PHP7의 폴더 속 php.ini-production파일을 php.ini로 변경합니다. (-production)을 지워줍니다.

php.ini을 메모장으로 열고 extension_dir을 아래와 같이 수정해줍니다.

extension_dir = “c:/PHP7/ext”

설정이 끝나면 C:\Apache24\conf로 들어가 httpd.conf파일을 메모장으로 열어줍니다.

아래 내용을 그림처럼 집어넣습니다.

LoadModule php7_module “c:/PHP7/php7apache2_4.dll”
AddType application/x-httpd-php .php .html
AddHandler application/x-httpd-php .php .html
PHPIniDir “c:/PHP7”

cmd를 열고, httpd.exe -k restart를 입력해준후 엔터를 누릅니다.

만약 Cannot load어쩌구 into server 오류가 뜬다면

http://www.microsoft.com/ko-KR/download/details.aspx?id=30679

에 들어가 파일을 다운받고 설치한 후에 다시 시도해봅니다.

그래도 안되면 PHP7 폴더속 php7apache2_4.dll과 php7ts.dll을 C:\Windows\System32 에 복사해 넣고 다시 시도해봅니다.

그래도안되면 php7ts.dll을 C:\Apache24\bin에 복사해 넣고 다시 시도해봅니다.

만약 그래도 안된다면 Apache를 64비트가 아닌 32비트로 다시 다운로드해서 설치해보시기 바랍니다.

저는 이것저것 시도하다가 마지막에 Apache를 32비트로 다시 설치하고 성공했습니다.

이래도안되는분들은 댓글로 문의 남겨주시기 바랍니다.

어쨋든 이리저리해서 성공적으로 설치가 되신분들은 C:\Apache24\htdocs로 들어가 phpinfo라는 이름의 메모장을 새로만들고 <?php phpinfo(); ?>를 적고 저장하신후에 확장자를 txt에서 php로 바꾸어줍니다.

그후에

http://127.0.0.1/phpinfo.php/

로 접속합니다.

만약 위와같은 화면이 뜬다면 php설치에 성공한겁니다.

다음시간에는 mysql의 설치와 한글화를 해보도록 하겠습니다.

윈도우에서 Apache와 PHP 연동

1. PHP 내려받기

링크: https://secure.php.net/downloads.php

2017/03/12 기준 5.6.30버전과 7.1.2버전이 있는데 7.x가 실행시간 더 빠르대요.

Current Stable PHP 7.x에 있는 Windows downloads를 클릭합니다!

이 중 Thread Safe라고 되어있는 것 중 시스템 종류(32/64bit)에 맞는 Zip 파일을 다운로드 합니다.

다운로드 받은 파일은 원하는 경로에 압축을 풀어 놓고 나중에 경로 적기 쉽게 PHP로 폴더이름을 바꿔줍시다. 저는 “E:/Program Files/”에 압축 풀었습니다.

2. php.ini 수정하기

php.ini을 수정하면 curl, mysql 등 다양한 확장기능을 사용할 수 있습니다.

PHP 폴더 안에서 “php.ini-development”를 찾아서 “php.ini”으로 이름을 바꾸고 메모장으로 실행합니다.

먼저 확장파일이 들어있는 ext 폴더 경로를 알려줘야 합니다.

;extension_dir = “./”를 검색해서 주석처리(;)를 지우고 ./로 된 부분을 (PHP 경로)\ext로 바꿔줍니다.

예) extension_dir = “E:\Program Files\PHP\ext”

그다음 다음 항목들을 검색해서 앞에 주석처리(;)된 부분만 지워줍니다.

;extension=msql.dll -> extension=msql.dll

;extension=php_curl.dll -> extension=php_curl.dll

;extension=php_mysqli.dll -> extension=php_mysqli.dll

;extension=php_pdo_mysql.dll -> extension=php_pdo_mysql.dll

만약 위에서 PHP 5.x로 받으신 분은 ;extension=php_mysql.dll도 찾아서 주석처리를 지워줍니다. php7에서는 php_mysql.dll의 기능을 php_mysqli.dll이 대체하기 때문에 없어졌다고 하네요.

Apache 내려받기 & 설정

1. Apache 내려받기

링크: https://www.apachelounge.com/download/

이것도 자신의 시스템 종류(32/64bit)에 맞춰 받아서 압축파일 안에 “Apache24” 폴더만 C:/에 압축을 풀어줍니다. 원하는 경로에 풀어도 되지만 httpd.conf 파일 수정할 때 Apache24 폴더 경로 기본값이 C:/라서 번거러운 작업 몇 가지 줄어듭니다. 저는 D:/에 압축을 풀었습니다.

2. httpd.conf 설정

이제 Apache 서버의 포트설정, php 연동을 위한 설정을 해야합니다.

Apache24/conf 폴더 안에 있는 httpd.conf 파일을 메모장으로 열어서 다음 순서대로 찾아가면서 경로를 설정합니다.

ServerRoot “c:/Apache24”

DocumentRoot “c:/Apache24/htdocs

<Directory “c:/Apache24/htdocs”>

<Directory “c:/Apache24/cgi-bin”>

ScriptAlias /cgi-bin/ “c:/Apache24/cgi-bin/”

각 항목을 메모장에서 찾아서 아래 예시와 같이 자신의 경로에 맞게 변경해줍니다. 항목 중 DocumentRoot를 위와 같이 기본값으로 주면 c:/Apache24/htdocs 안에 있는 파일을 보여줄 수 있게 됩니다. 예를 들어 c:/Apache24/htdocs 안에 hello.html이라는 파일이 있으면 나중에 주소창에 localhost/hello.html으로 연결하여 hello.html 파일을 브라우저로 열 수 있습니다. 기본값으로 두거나 원하는 폴더 경로로 변경합니다.

d:/Apache24인 경우 예시

ServerRoot “d:/Apache24”

DocumentRoot “d:/Apache24/htdocs

<Directory “d:/Apache24/htdocs”>

<Directory “d:/Apache24/cgi-bin”>

ScriptAlias /cgi-bin/ “d:/Apache24/cgi-bin/”

다음 항목들을 찾아서 변경하여 포트번호를 설정합니다. 포트번호는 기본값 80으로 되어있는데 임의의 포트로 수정하려면 아래와 같이 변경할 수 있습니다. 저는 8008로 설정해봤습니다.

Listen 8008

ServerName localhost:8008

마지막으로 PHP 연동을 위해 맨 아래에 다음을 추가해줍니다.

PHPIniDir “E:/Program Files/PHP/php.ini”

LoadModule php7_module “E:/Program Files/PHP/php7apache2_4.dll”

AddType application/x-httpd-php .php .inc .phtml

PHPIniDir 은 앞에서 수정했던 php.ini의 위치를 적습니다.

LoadModule 은 PHP폴더 내의 php7apache2_4.dll을 확인하시고 경로/파일명을 씁니다. php5로 받으신 분은 7 부분을 5로 고치고 php5apache2_4.dll을 확인하고 씁니다.

3. PHP와 연동하기

PHP 폴더의 libeay32.dll, libssh2.dll, ssleay32.dll을 복사해서 .\Apache24\bin\ 에 덮어씌워 줍니다. 아파치에서 curl_init() 같은 함수를 undefine으로 처리하는 문제를 해결해줍니다.

4. Apache 설치 및 실행

cmd를 관리자 권한으로 실행시켜 다음과 같이 적습니다.

(Apache24 경로)\bin\httpd.exe -k install

예) D:\Apache24\bin\httpd.exe -k install

성공 시 아래와 같이 나옵니다.

여기서 안되는 경우, vc15 패키지 를 다운로드&설치 후 다시 해보세요.

만약 아래와 같은 화면이 뜬다면 httpd.conf 파일에서 설정한 포트번호가 다른 서버로 사용 중인 경우입니다. 이 경우, httpd.conf에서 Listen과 ServerName의 포트번호만 변경하고 다음으로 넘어가시면 됩니다.

여기까지 성공하셨으면 이제 제어판-큰 아이콘-관리 도구-서비스 (또는 시작-서비스 검색)에서 Apache2.4를 오른쪽 클릭해서 시작을 클릭합니다. 그리고 브라우저를 실행하여 주소창에 다음과 같이 적습니다.

localhost:(위에서 설정한 포트번호)/index.html

It works!

※ 부록

localhost 를 주소창에 입력했을 때 뜨는 It works!를 없애고 싶을 때…

1. 서버 루트 폴더에서 index.html을 지운다

2. httpd.conf를 메모장으로 실행한다

3. IfModule dir_module 를 검색해서 바로 밑줄의

DirectoryIndex index.html 을 주석처리한다

[Windows, Apache2.4] 날짜별로 로그찍는 방법.

{아파치가 설치된 경로}/httpd.conf 파일에서

log_config_module이 아래처럼 주석이 없는 것을 확인 후 (기본 설정이면 주석이 없다.)

LoadModule log_config_module modules/mod_log_config.so

<IfModule log_config_module> (안에서)

CustomLog “logs/access.log” common (이렇게 되어있는 것을)

CustomLog “|bin/rotatelogs.exe logs/%Y%m%d_access.log 86400” combined (이렇게 바꾼다.)

*. Windows 운영체제에선 반드시 rotatelogs 다음에 .exe 를 붙여주어야 한다.

MSSQL에서 MSSQL Linked Server 설정

*. 연결된 서버 설정 창 “일반” 텝에서 SQL Server Native Client 선택 후 데이터 원본에 IP,PORT 입력

  • 연결된 서버 설정 창 “보안” 텝에서 “다음 보안 컨텍스트를 사용하여 연결” 선택 후 ID/PW 입력

SELECT * FROM OPENQUERY(AKIS_HR, ‘SELECT * FROM [dbo].[Table name]’) WHERE COMPANY_CODE IS NOT NULL;

 

Apache Web Server 2.4 에 HTTPS 적용하기 (CentOS)

설정방법

  1. 의존패키지 설치하기
    sudo yum install openssl-devel
    
  2. Apache 모듈 포함하여 재설치
    CentOS 7 에서 Apache Web Server 2.4 설치하기 참고하여 진행

    sudo ./configure --prefix=[Apache 설치된 디렉토리] --with-apr=[Apache 설치된 디렉토리]/bin/apr-1-config --enable-ssl --with-ssl=/usr/bin/openssl
    sudo make
    sudo make install
    

    prefix를 다른 위치로 지정하여 설치 후 SSL 모듈만 가져와서 사용하는것이 더 안전합니다.

    1. Apache 설정 변경하기
      vi [Apache 설치된 디렉토리]/conf/httpd.conf
      

      httpd.conf 파일에 수정할 내용

      LoadModule socache_shmcb_module modules/mod_socache_shmcb.so //주석 해제
      LoadModule ssl_module modules/mod_ssl.so //추가
      LoadModule rewrite_module modules/mod_rewrite.so //추가 (HTTPS로 리다이렉트시 사용 필요하신 분만 사용하세요.)
      Include conf/extra/httpd-ssl.conf //주석 해제
      
    2. HTTP 접속시 HTTPS로 리다이렉트 하기 위해 httpd.conf파일 마지막에 추가
      <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [C]
      </IfModule>
      
  3. OpenSSL 인증서 생성하기
    GitLab에 HTTPS 보안 적용을 위한 OpenSSL 설정하기 참고하여 생성
  4. Apache SSL 관련 부분 설정 변경하기
    vi [Apache 설치된 디렉토리]/conf/extra/httpd-ssl.conf
    

    httpd-ssl.conf 파일에 수정할 내용

    JkMountCopy on //<VirtualHost _default_:443>아래에 추가
    DocumentRoot //주석처리
    SSLCertificateFile "[인증서 설치된 디렉토리]/[인증서 이름].crt"
    SSLCertificateKeyFile "[인증서 설치된 디렉토리]/[인증서 이름].key"
    
  5. Tomcat 설정 변경하기
    vi [Tomcat 설치된 디렉토리]/conf/server.xml
    

    server.xml에 변경할 내용

    SSLEngine=off” //기존 "off"를 “on”변경
    
  6. 방화벽 설정하기
    sudo firewall-cmd --add-service=https --permanent
    sudo firewall-cmd --reload
    
  7. Apache, Tomcat 재시작

 Windows 7 Apache와 Tomcat 연동 – 로드 밸런싱

환경 설정

Tomcat 7

Apache 2.4.29

OS windows 7 Win64

 

리케이션을 여러대의 Tomcat으로 구동하는 방식입니다.

Apache 설치

https://www.apachelounge.com/download/

Apache 2.4.29 Win64 용 httpd를 다운받습니다.

이때 mod_jk 파일 mod_jk-1.2.42-win64-VC15.zip도 같이 받으셔야 합니다.

Apache 버전과 Mod_jk 버전이 일치하지 않은경우 

Apache 설치후 구동이 되지 않을수 있습니다.

꼭 호환이 되는 Apache ,Mod_jk 파일을 다운 받으셔야 합니다.

원하는 경로에 Apache 압축을 풀어줍니다.

mod_jk 역시 압축을 풀어줍니다.

mod_jk.so 파일을 

Apache24\moudle 경로에

복사 / 붙여넣기합니다.

시스템 속성 -> 환경변수 설정

Apache 폴더가 존재하는 경로를 입력해줍니다.

C:\Apache24\bin

환경설정 이후

CMD Dos모드로 들어가 

Apache 설치 : httpd -k install

Apache 버전확인 : httpd -v

명령어를 통해 확인합니다.

Apache 설정모드

Apache24\conf 경로 이동후

httpd.conf 파일을 편집합니다.

Editplus 또는 메모장 활용

ServerRoot 수정

Apache 설치경로

ServerName 수정

window -> 서비스 -> Apache24 구동 후 확인

구동이 도지 않으면 Apache24 및 mod_jk를 확인해야 합니다.

Tomcat 로드 밸런싱 설정

저는 Tomcat을 2개 사용할것 입니다.

설치 된 Tomcat 경로로 이동합니다.

Tomcat 설치 경로 이동 후

was1 / was2 라는 빈 폴더를 생성합니다.

Conf / logs / webapps / work 폴더를 복사합니다.

was1 / was2 를 따로 따로 구동하기 위해 필요한 폴더입니다.

기존에 있던 폴더를 복사 하시면 됩니다.

저는 그냥 모든 폴더/파일을 복사 붙여넣기 하였습니다.

물론 Server쪽 환경 설정할때는

Conf / logs / webapps / work 폴더만 붙여넣기 하였습니다.

was1\conf\

Server.xml파일을 편집합니다.

 

<?xml version=’1.0′ encoding=’utf-8′?>

<Server port=”8005″ shutdown=”SHUTDOWN”>

  <Listener className=”org.apache.catalina.startup.VersionLoggerListener” />

  <Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />

  <Listener className=”org.apache.catalina.core.JasperListener” />

  <Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener” />

  <Listener className=”org.apache.catalina.mbeans.GlobalResourcesLifecycleListener” />

  <Listener className=”org.apache.catalina.core.ThreadLocalLeakPreventionListener” />

  <GlobalNamingResources>

    <Resource name=”UserDatabase” auth=”Container” type=”org.apache.catalina.UserDatabase” description=”User database that can be updated and saved” factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”

              pathname=”conf/tomcat-users.xml” />

  </GlobalNamingResources>

  <Service name=”Catalina”>

<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″/>

<Connector port=”7591″ maxHttpHeaderSize=”8192″ maxKeepAliveRequests=”-1″ maxThreads=”1000″ minSpareThreads=”500″ maxSpareThreads=”500″ enableLoopups=”false” redirectPort=”8443″ acceptCount=”500″

compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla.graviata” compressableMimeType=”text/html,text/xml,text/plain,text/javascript,text/css”

connectionTimeout=”600000″ disabledUploadTimeout=”true” Server=”” protocol=”AJP/1.3″  />

<Engine jvmRoute=”tomcat1″ name=”Catalina” defaultHost=”localhost”>

<Realm className=”org.apache.catalina.realm.LockOutRealm”>

<Realm className=”org.apache.catalina.realm.UserDatabaseRealm” resourceName=”UserDatabase”/>

</Realm>

<Host name=”localhost”  appBase=”C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps” unpackWARs=”true” autoDeploy=”true”>

 <Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs” prefix=”was1″ suffix=”.txt”  pattern=”%h %l %u %t &quot;%r&quot; %s %b” />

<Context crossContext=”true” path=”” docBase=”/KorailBim” reloadable=”true”></Context>

</Host>

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster” channelSendOptions=”8″>

<Manager className=”org.apache.catalina.ha.session.DeltaManager” expireSessionsOnShutdown=”false” notifyListenersOnReplication=”true” />

<Channel className=”org.apache.catalina.tribes.group.GroupChannel”>

<Membership className=”org.apache.catalina.tribes.membership.McastService” address=”228.0.0.4″ port=”45564″ frequency=”500″ dropTime=”3000″ />

<Receiver className=”org.apache.catalina.tribes.transport.nio.NioReceiver” address=”auto” port=”4000″ autoBind=”100″ selectorTimeout=”5000″ maxThreads=”6″ />

<Sender className=”org.apache.catalina.tribes.transport.ReplicationTransmitter”>

<Transport className=”org.apache.catalina.tribes.transport.nio.PooledParallelSender” />

</Sender>

<Interceptor className=”org.apache.catalina.tribes.group.interceptors.TcpFailureDetector” />

<Interceptor className=”org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor” />

</Channel>

<Valve className=”org.apache.catalina.ha.tcp.ReplicationValve” filter=”” />

<Valve className=”org.apache.catalina.ha.session.JvmRouteBinderValve” />

<Deployer className=”org.apache.catalina.ha.deploy.FarmWarDeployer” tempDir=”/tmp/war-temp/” deployDir=”/tmp/war-deploy/” watchDir=”/tmp/war-listen/” watchEnabled=”false” />

<ClusterListener className=”org.apache.catalina.ha.session.ClusterSessionListener” />

</Cluster>

</Engine>

 </Service>

</Server>

—————————————————————————–

웹 어플리케이션이 구동될 Webapps\ROOT으로 이동합니다.

이 경로는 Tomcat -> Server.xml -> appBase 에 설정된 경로의 Root을 사용하면 됩니다.

Web.xml 편집모드로 들어가

<distributable/>

추가해줍니다.

Was2\conf

Server.xml

역시 위와 동일하게 처리해줍니다.

<?xml version=’1.0′ encoding=’utf-8′?>

<Server port=”8006″ shutdown=”SHUTDOWN”>

  <Listener className=”org.apache.catalina.startup.VersionLoggerListener” />

  <Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />

  <Listener className=”org.apache.catalina.core.JasperListener” />

  <Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener” />

  <Listener className=”org.apache.catalina.mbeans.GlobalResourcesLifecycleListener” />

  <Listener className=”org.apache.catalina.core.ThreadLocalLeakPreventionListener” />

  <GlobalNamingResources>

    <Resource name=”UserDatabase” auth=”Container” type=”org.apache.catalina.UserDatabase”  description=”User database that can be updated and saved” factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”

              pathname=”conf/tomcat-users.xml” />

  </GlobalNamingResources>

  <Service name=”Catalina”>

        <Connector port=”8081″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″/>

<Connector port=”8090″ maxHttpHeaderSize=”8192″ maxKeepAliveRequests=”-1″ maxThreads=”1000″ minSpareThreads=”500″ maxSpareThreads=”500″ enableLoopups=”false” redirectPort=”8443″ acceptCount=”500″

compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla.graviata” compressableMimeType=”text/html,text/xml,text/plain,text/javascript,text/css”

connectionTimeout=”600000″ disabledUploadTimeout=”true” Server=”” protocol=”AJP/1.3″  />

<Engine jvmRoute=”tomcat2″ name=”Catalina” defaultHost=”localhost”>

<Realm className=”org.apache.catalina.realm.LockOutRealm”>

<Realm className=”org.apache.catalina.realm.UserDatabaseRealm” resourceName=”UserDatabase”/>

</Realm>

<Host name=”localhost”  appBase=”C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps” unpackWARs=”true” autoDeploy=”true”>

 <Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”

               prefix=”was2″ suffix=”.txt”

               pattern=”%h %l %u %t &quot;%r&quot; %s %b” />

<Context crossContext=”true” path=”” docBase=”/KorailBim” reloadable=”true”></Context>

</Host>

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster” channelSendOptions=”8″>

<Manager className=”org.apache.catalina.ha.session.DeltaManager” expireSessionsOnShutdown=”false” notifyListenersOnReplication=”true” />

<Channel className=”org.apache.catalina.tribes.group.GroupChannel”>

<Membership className=”org.apache.catalina.tribes.membership.McastService” address=”228.0.0.4″ port=”45564″ frequency=”500″ dropTime=”3000″ />

<Receiver className=”org.apache.catalina.tribes.transport.nio.NioReceiver” address=”auto” port=”4000″ autoBind=”100″ selectorTimeout=”5000″ maxThreads=”6″ />

<Sender className=”org.apache.catalina.tribes.transport.ReplicationTransmitter”>

<Transport className=”org.apache.catalina.tribes.transport.nio.PooledParallelSender” />

</Sender>

<Interceptor className=”org.apache.catalina.tribes.group.interceptors.TcpFailureDetector” />

<Interceptor className=”org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor” />

</Channel>

<Valve className=”org.apache.catalina.ha.tcp.ReplicationValve” filter=”” />

<Valve className=”org.apache.catalina.ha.session.JvmRouteBinderValve” />

<Deployer className=”org.apache.catalina.ha.deploy.FarmWarDeployer” tempDir=”/tmp/war-temp/” deployDir=”/tmp/war-deploy/” watchDir=”/tmp/war-listen/” watchEnabled=”false” />

<ClusterListener className=”org.apache.catalina.ha.session.ClusterSessionListener” />

</Cluster>

</Engine>

 </Service>

</Server>

———————————————-
Server Port / Connector Port / Cluster Port는
 
was1\Server.xml Port와 중복되지 않게 설정합니다.
 
appBase는 웹 어플리케이션의 위치이기 때문에 
Was1/Was2로 따로 설정해도 무방하지만
배포 처리를 각각해줘야 하기 때문에 
저는 메인 Tomcat 위치로 설정했습니다.
 

다시 Apache24\httpd.conf 파일을 편집하여

Directory경로를 수정해 줍니다.

Apache가 처리할 소스 경로로 Tomcat의 웹 어플리케이션이 존재하는 최상위 폴더를 지정했습니다.

DocumentRoot “C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps”

<Directory “C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps”>

    Require all granted <- 추가

Options Indexes FollowSymLinks

AllowOverride None

Require all granted

</Directory>

Apache24 와 Tomcat의 로드 밸런싱을 위한 설정을 해줘야합니다.

LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel info

JkLogStampFormat “[%a %b %d %H:%M:%S %Y] ”

JkRequestLogFormat “%w %V %T”

JkMount /  loadbalancer

JkMount /* loadbalancer

AddDefaultCharset UTF-8

conf/workers.properties

파일은 사용자가 직접 빈 파일을 생성해야 합니다.

빈 파일 생성후 편집모드로 작성합니다.

worker.list=loadbalancer, status
worker.tomcat1.port=7591
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=100
worker.tomcat2.port=8090
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=100
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2
worker.loadbalancer.method=B
# B(Busyness), R(Requests), T(Traffic)
worker.status.type=status
 
Tomcat\Server.xml에 정의한 
AJP/13  Connector의  jvmRoute의 명칭가 일치시켜 주면 됩니다.
 
was1/Server.xml -> jvmRoute=tomcat1
was1/Server.xml -> port=7591
 
was2/Server.xml -> jvmRoute=tomcat2
was2/Server.xml -> port=8090
이제 마지막으로 was1/was2 실행을 위한 Startup 작업을 해줘야 합니다.

기존에 있던

startup.bat / shutdown.bat

복사 / 붙여넣기를 통해 명칭을 변경합니다.

startup_was1.bat/shutdown_was1.bat

모두편집 모드로 들어가

set “CATALINA_HOMDE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81”

set “CATALINA_BASE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\was1”

set “SERVER_NAME=was1”

set “JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91”

추가해줍니다.

Apache 설치 및 Was1/was2 구동을 위한 경로

JDK 경로를 설정해줍니다.

————————————-

tartup_was2.bat/shutdown_was2.bat

모두편집 모드로 들어가

set “CATALINA_HOMDE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81”

set “CATALINA_BASE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\was2”

set “SERVER_NAME=was2”

set “JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91”

추가해줍니다.

Apache 설치 및 Was1/was2 구동을 위한 경로

JDK 경로를 설정해줍니다.

Window의 서비스 모드에서

설치된 Apache24를 구동합니다.

마지막으로 Tomcat을 구동하고

localhost:80 포틀 접속하시면 끝이납니다.

한쪽 서버 부하로 인하여 서버가 중단 될경우

다른 한쪽 서버로 웹 어플리케이션이 연동되어

서비스를 운영하는 모드입니다.

테스트 절차는 was1/was2 구동

localhost:80 접속

was로그를 통해 구분 후 접속된 Was 내림

몇초 지난 후

localhost:80 기능 그대로 사용

다른 서버에 붙어서 접속 허용

지금까지

Window Apache Tomcat 로드 밸런싱 연동 과정이었습니다.

출처: https://seungkangmo.tistory.com/173 [Let’s Get It]

Apache24, 톰캣 8.5 연동

2.1 mod_jk 모듈 다운받기

mod_jk는 Apache24에 추가할 수 있는 모듈 중 하나로써,
Apache24에서 다른 웹컨테이너로 처리할 파일을 넘겨줄 수 있게 합니다
https://www.apachelounge.com/download/
링크로 들어가서 스크롤을 살짝 내려보면 Apache 2.4 modules VC14라는 큰 제목이 있고 그 밑에 Apache 2.4에 추가할 수 있는 모듈이 잔뜩 있습니다
그중 mod_jk-1.2.42-win64-VC14.zip
(32bit는 mod_jk-1.2.42-win32-VC14.zip) 를 다운받습니다

압축파일을 열고 mod_jk.so 를
(아파치경로)\modules 폴더 안에 복사합니다
ex) E:\Program Files\Apache24\modules\mod_jk.so

2.2 workers.properties 만들기

(아파치경로)\conf 폴더 안에 텍스트 파일을 만들고 파일 이름과 확장자를 workers.properties로 설정합니다
ex) E:\Program Files\Apache24\conf\workers.properties

workers.properties를 열어서 다음과 같이 작성합니다

worker.list=worker1 

worker.worker1.type=ajp13 

worker.worker1.host=localhost 

worker.worker1.port=8009

2.3 번까지 진행하시면, Apache24는 jsp 파일을 클라이언트로부터 요청받으면 다른 웹컨테이너에게 처리를 떠넘깁니다
이 때 다른 웹컨테이너의 포트번호 등을 작성한 것이 workers.properties 파일입니다
“일을 대신 맡아줄 객체로 worker1를 추가해라. worker1의 type은 ajp13, host는 localhost, 포트번호는 8009이다”

type=ajp13, port=8009를 가진 웹컨테이너는 톰캣이므로 worker1에 작업을 맡기면 톰캣이 그 작업을 처리하게 됩니다

ajp13, port=8009 에 대한 정보는
(톰캣 경로)\conf\server.xml에서 확인할 수 있습니다

2.3 httpd.conf 수정하기

다시
(아파치경로)\conf\httpd.conf 파일을 메모장으로 실행합니다
맨 아래로 스크롤해서 다음을 추가해줍니다

LoadModule jk_module modules/mod_jk.so 
JkWorkersFile conf/workers.properties 
JkLogFile logs/mod_jk.log 
JkLogLevel info 
JkMount /*.jsp worker1

LoadModule로 앞에서 복사해뒀던 mod_jk.so 모듈을 불러옵니다
JkWorkersFile로 작업을 맡길 녀석들의 정보가 담긴 workers.properties 파일을 불러옵니다
JkMount /*.jsp worker1 부분이 젤 중요한데,

/*.jsp: Apache24에서 다른 웹컨테이너에게 맡길 파일 종류를 작성합니다
ex1) JkMount /* worker1
-> worker1으로 지정된 웹컨테이너에게 모든 파일의 처리를 맡깁니다
ex2) JkMount /*.jsp worker1
-> worker1으로 지정된 웹컨테이너에게 jsp 파일의 처리를 맡깁니다

worker1: workers.properties에서 정의한 객체 중 하나로 파일 처리를 맡길 웹컨테이너를 의미합니다
만약 worker1으로 쓰면 worker1에게, worker2로 쓰면 worker2에게 지정한 파일 종류의 처리를 맡깁니다
※ worker1, worker2 등은 작성자가 임의로 지은 변수이름입니다….

3. 잘 된건가??

“제어판-관리도구-서비스”에서 Apache2.4, Apache Tomcat 8.5 서비스를 시작한다
위 첨부파일들을 “1. 경로 설정하기”에서 설정했던 ROOT 경로에 넣고
ex) e:/Server Projects/test.php, e:/Server Projects/test.jsp

localhost/test.php
localhost/test.jsp

를 브라우저 주소창에 쳐본다
숫자 1이 출력되면 성공한 것!
* Apache24 서버가 사용하는 포트를 이용하시면 됩니다
만약 Apache24에 8008 포트를 사용하시면….
localhost:8008/test.php, localhost:8008/test.jsp

4. 잘 안되는 사람들 유형

1. jsp 소스코드가 그대로 출력된다….
연동이 제대로 되지 않은 경우로 Apache24에서 jsp를 톰캣에게 처리를 맡기지 않고 직접 실행한 경우이다
“2.3 httpd.conf 수정”부분을 다시 한번 해본다

2. php 파일실행 시 php 파일이 실행되지 않고 다운로드된다….
Apache24가 php 파일마저 톰캣에게 처리를 맡기는 경우이다
“2.3 httpd.conf수정”에서
JkMount /*.jsp worker1
를 제대로 썼는지 확인해본다

3. 추가로 다음화면은 경로 설정을 잘못해서, 해당 경로에 없는 파일에 접근하려 할 때 나온다

상단 화면이 나타나면 톰캣8.5의 ROOT 경로가 잘못된 경우이고
하단 화면이 나타나면 Apache24의 ROOT 경로가 잘못된 경우이다
“1. 경로 설정하기”에서 경로를 잘 설정했는지 확인해보자