vi 에디터에서 텍스트 바꾸는 법이다.

기본형식은 다음과 같다. (맨앞에 :(콜론)이 있음)


:%s/찾는텍스트/변경할텍스트/옵션


[옵션설명]

  • i : 대소문자 구분없이 변경
  • g : 전역으로 치환
  • c : 찾을때마다 변경할 것인지 물어봄


1. foo 텍스트를 bar로 모두 변경

예제) :%s/foo/bar/g


2. foo 텍스트를 bar로 모두 변경하며, 변경전 바꿔도 되는지 물어본다.

예제) :%s/foo/bar/gc


3. 대소문자 구분없이 모두 변경

예제) :%s/foo/bar/gi



'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] sudo  (0) 2017.02.03
[리눅스] strings 명령어  (0) 2016.08.30
[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] find  (0) 2015.12.16
[리눅스] sort  (0) 2015.12.09
Posted by SungHoon, Park
,

현재 톰캣 9.0까지 나와 있으나, 7.0을 기준으로 설치한다.


1. 다운로드

- http://apache.tt.co.kr/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69.tar.gz


2. 설치

1) 톰캣을 설치할 적당한 디렉토리를 생성한다.


[root@localhost ~]# mkdir apps


2) 다운로드 받은 tar.gz 파일을 apps 디렉토리로 이동한다.


[root@localhost ~]# mv 다운로드/apache-tomcat-7.0.69.tar.gz apps/


3) 압축해제


[root@localhost apps]# tar xvf apache-tomcat-7.0.69.tar.gz


4) 심볼릭 링크 생성

- 링크를 생성하지 않아도 무방하나, 간단하게 tomcat으로 링크를 연결하면 작업시 편하다.


[root@localhost apps]# ln -s apache-tomcat-7.0.69 tomcat


3. 톰캣 실행

- bin 디렉토리로 이동후, startup.sh을 실행한다. 그리고나서, http://localhost:8080 접속한다.


[root@localhost bin] ./startup.sh




Posted by SungHoon, Park
,

톰캣 운영시, JVM 옵션과 같은 추가 설정을 좀 더 깔끔하게 관리할 수 있는 방법에 대해 정리한다.

 

문제점

- 대부분의 시스템들은 JVM 관련 옵션을 catalina.sh 파일을 수정하여 사용함.

- 이렇게 catalina.sh 파일을 수정을 하게될 경우 유지보수에 많은 어려움이 있다.

톰캣 버전 업그레이드나, 서버이전 등과 같은 작업이 발생할 경우 설정된 옵션을 옮기기 위해서 주의하여 값을 추출하여야 한다.

- 또한, catalina.sh을 지속적으로 수정하게 된다면 톰캣의 메일 sheell을 잘못 건드릴 수 있는 위험성이 존재한다.

 

[현재 catalina.sh 예시] 

# -----------------------------------------------------------------------------

# OS specific support.  $var _must_ be set to either true or false.


CATALINA_OPTS="-server -Xmx2g -Xms2g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dfile.encoding=UTF-8" 

CATALINA_OPTS="$CATALINA_OPTS -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails"

 

cygwin=false
os400=false
darwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
Darwin*) darwin=true;;
esac 

... 

 

해결방법

- 톰캣에는 이러한 옵션값을 추가할 수 있는 또 다른 방법을 제공한다.  바로 bin 하위에 setenv.sh 파일을 사용하는 방법이다.

- 해당 파일은 기본적으로 존재하지 않으며, 직접 쉘 파일을 생성해줘야 한다.

  

[/bin/setenv.sh 파일 생성]

-------------------------------------------------------------------------------------------------------------------

CATALINA_OPTS="-server -Xmx2g -Xms2g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dfile.encoding=UTF-8" 

CATALINA_OPTS="$CATALINA_OPTS -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails"

-------------------------------------------------------------------------------------------------------------------


setenv.sh이 있을 경우 catalina.sh에서 다음과 같이 setenv.sh 파일을 로드하게 된다.

 

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi 

 

마치며

- setenv.sh로 옵션 정보를 옮기게 된다면 위에서 언급한 것처럼 톰캣 업그레이드나 서버이전 등과 같은 작업이 있을 경우 좀 더 편리한 장점이 있다.

(setenv.sh과 server.xml 파일만 옮기면 톰캣에 관한 설정은 끝날 듯)

- 또한, 옵션을 처리하는 영역이 명확히 분리되기에, 옵션을 추가하는 등 유지보수 측면에서도 좋은 역할을 할 것이라 생각한다.



Posted by SungHoon, Park
,

소프트링크(심볼릭링크, symbolic link)

1. ln -s 명령을 통해서 소프트링크(이하 심볼릭링크)를 생성한다.

예제) ln -s original.txt soft.txt


심볼릭링크는 바로가기와 동일하다고 할 수 있다. 원본인 original.txt가 삭제가 된다면 심볼릭링크는 깨지게 되고 당연히 original.txt에 접근할 수 없다. 반대로 soft.txt를 지우더라도 링크만 삭제되는 것이기에 원본에는 영향이 가지 않는다.


2. 생성후 확인하기

예제) ln -ali


790572 -rw-rw-r--  2 centos centos   12 2016-05-11 00:44 original.txt

790560 lrwxrwxrwx  1 centos centos   12 2016-05-11 00:55 soft.txt -> original.txt


하드링크(hard link)

1. ln 명령을 통해서 하드링크를 생성한다.

예제) ln original.txt hard.txt


물리적인 데이터 위치 정보를 나타내주는 inode값이 같은 링크방식이다.

쉽게 말하면 파일에 또다른 이름이 있다고 생각하면 이해하기 편하다.

원본인 original.txt 파일을 삭제하더라도 hard.txt라는 다른 이름이 계속 존재하기 때문에 파일은 계속 유지될 수 있다.


2. 생성후 확인하기

예제) ln -ali


790572 -rw-rw-r--  2 centos centos   12 2016-05-11 00:44 hard.txt

790572 -rw-rw-r--  2 centos centos   12 2016-05-11 00:44 original.txt


i옵션을 붙여주면 inode 정보가 추가로 출력된다.


※ inode란?

우리는 탐색기 등을 통해서 트리구조로 파일을 쉽게 확인하고 볼 수 있다. 이것을 파일테이블이라고 한다.

이 파일테이블의 파일정보에는 물리적 저장공간을 가리키는 위치정보가 포함되는데 이것이 바로 inode값이다. inode값은 별도의 inode 테이블에 존재한다.


사용자 파일 테이블(a.txt) -> 파일 테이블(a.txt=100) -> inode 테이블(100=xxx) -> 하드디스크(xxx)


[참고자료]

http://blog.naver.com/pk920207/110147243183

http://mycute7.blog.me/220521823025



Posted by SungHoon, Park
,

톰캣 버전별로 지원하는 Servlet Spec, JSP Spec, Java Spec을 설명한 표이다.

2016-04-12 기준.



참고자료

http://tomcat.apache.org/whichversion.html

'서버 > 톰캣' 카테고리의 다른 글

[톰캣] server.xml 설정  (1) 2016.07.01
[톰캣] conf 디렉토리 설정파일  (1) 2016.06.24
[톰캣] 디렉토리 구성 및 환경변수  (1) 2016.06.09
[톰캣] 톰캣7 설치  (0) 2016.05.30
[톰캣] setenv.sh 활용하기  (0) 2016.05.23
Posted by SungHoon, Park
,

mod_headers 모듈은 HTTP 요청(응답) 헤더를 수정 및 삭제할 수 있는 모듈이다.

서버 설정 지시자의 거의 모든 부분에서 사용할 수 있으며, <Location>, <Directory>, <IfModule>, <VirtualHost>에서 사용하면 해당 범위에서만 기능을 제한할 수도 있다.


RequestHeader, Header

- 문법 : Header [condition] set|append|add|unset|echo header [value] [replacement] [early|env=[!]variable]

 (요청헤더는 RequestHeader 지시자를 사용)


- HTTP 요청 및 응답 헤더의 정보를 수정 및 삭제한다.

- 첫번째 condition은 onsuccess, always 값이 올 수 있으며 생략도 가능하다.

- 두번째 값은 행위를 지정한다.


 옵션

설명

 set

 헤더정보를 설정한다. 이미 헤더에 같은 이름의 정보가 있다면 덮어쓴다. 

append

 기존 헤더에 값을 추가한다.

add

 헤더에 값을 새롭게 추가한다. 중복 헤더값이 발생할 수도 있으므로 주의한다.

unset

 지정된 이름의 헤더정보를 삭제한다.

echo

 HTTP 요청헤더에 지정된 이름의 헤더정보가 있을 경우, HTTP 응답 헤더에도 추가한다.


- 예제)

IE 브라우저 호환성보기 끄기

BrowserMatch MSIE is-msie

Header set X-UA-Compatible IE=edge env=is-msie


특정페이지 캐시하지 않도록 설정

<Location "/admin">

  Header set Cache-Control "no-cache, no-store"

</Location>


특정 Content-Type 처리 (대문자로 치환)

SetEnvIf Content-Type application/json is_json

Header set ContentType APPLICATION/JSON env=is_json



※ 상세한 헤더정보 디버깅을 위해선 curl -I 옵션을 통해 헤더정보를 확인할 수 있다.

curl -I http://alpha.test.example.com/xxx.do



※ 참고자료

- 리눅스를 활용한 회사 인프라 구축의 모든 것



Posted by SungHoon, Park
,

찾았던 것은 Windows용 2.2.27 버전이였는데 없는 것 같다. ㅠㅠ


Windows용 아파치 다운로드 경로

https://archive.apache.org/dist/httpd/binaries/win32/




Posted by SungHoon, Park
,

mod_rewrite 모듈은 규칙 기반으로 URL을 동적으로 Redirect 및 Rewrite 처리를 해준다.

특정 URL 패턴에 대한 리다이렉트 처리를 할 때 자주 사용하며, RESTful한 웹서비스도 제공할 수 있다.


기본형식


RewriteEngine On

RewriteCond TestString  CondPattern [Flag]

RewriteRule  Pattern     Substitution [Flag]


먼저 RewriteRule의 Pattern을 체크.

Pattern을 통과하면 RewriteRule 상단의 RewriteCond를 체크.

순차적으로 RewriteCond의 TestString의 CondPattern을 체크.

CondPattern을 통과하면 RewriteRule의 Substitution을 최종적으로 처리한다.


[그림1] Ruleset 흐름도


RewriteEngine On|Off

모듈 사용여부를 설정한다.


RewriteLog

mod_rewrite 모듈에서 처리하는 내용에 대해 로그를 남긴다.


(형식)

RewriteLog logs/rewrite.log


RewriteCond

RewriteRule에 대한 조건문

RewriteRule과 달리 단독으로 사용할 수 없으며, 최상단부터 순차적으로 실행된다.


[그림2] RewriteCond 흐름도


(형식)

RewriteCond TestString CondPattern


1) TestString

- 테스트 대상 텍스트

- 웹서버 변수를 사용할 수 있다. %{변수명} 형식이다.


[그림3] 서버변수


2) CondPattern

- TestString과 일치할 패턴을 지정하며, 정규표현식을 사용할 수 있다.

- 정규표현식 사용 가능

- RewriteCond 앞에 RewriteRule에서 사용한 정규표현식에서 그룹으로 지정된 값을 사용할 수 있다. $0~$9 형식.


3) Flag


 플래그

의미

 설명

 NC

 NoCase

 대소문자 무시한다.

 OR

ORNext

 여러개의 RewriteCond를 사용할 경우 OR 조건으로 사용된다.

 (RewriteCond가 연속으로 있을 경우는 AND 조건이다.)


RewriteRule

조건에 따른 rewrite 규칙을 설정하고 해당 규칙에 따른 동작을 지정한다.


(양식)

RewriteRule Pattern Substitution [Flag, Flag...]


1) Pattern

- 일치시킬 패턴을 지정하며, 정규표현식을 사용할 수 있다. 또한 정규표현식에서 그룹으로 지정한 값을 Substitution에서 사용할 수 있다. $0 ~ $9까지 사용 가능함.


2) Substitution

- Pattern이 일치할 경우 Rewrite 처리할 URL을 지정한다.


3) Flag

- 처리할 동작을 지정한다.

전체 플래그명, 축약어 모두 사용가능하다.


플래그

의미

설명

E

Env

 조건이 일치할 경우 특정 환경변수를 설정하거나 해제한다. 

F

Forbidden

 403 Forbidden으로 응답한다.
 Forbidden은 Last의 의미를 포함한다.
 외부에서 접근하면 안되는 리소스를 차단할 경우 유용하다.

G

Gone

 410 Gone으로 응답한다.

L

Last

 더는 RewriteRule 처리를 하지 않는다는 의미다.

 개발언어에서 break문과 비슷하다고 할 수 있다. 

N

Next

 Rewriting 프로세스를 재시작한다.

R

Redirect

 302 Redirect로 응답한다.

 R=301은 HTTP 301 Moved Permanently 응답으로 Redirect 한다.

NC

NoCase

 대소문자를 무시한다.

PT

Passthru

 타겟URL이 http(s)로 시작하지 않아도 URL 처리를 할 수 있도록 한다.

 ※ 기본적으로 타겟URL에 http(s)를 적지 않으면 디렉토리 경로로 인식하게 된다.

 /로 시작한다면 절대경로, /로 시작하지 않으면 상대경로로 처리한다.

 QSA

qsappend

 qsappend (Query String Apped)

 QUERY_STRING 변수값을 타겟URL에 유지시켜준다.



※ 참고자료

- 리눅스를 활용한 회사 인프라 구축의 모든 것

https://httpd.apache.org/docs/2.0/ko/misc/rewriteguide.html

http://soul0.tistory.com/139

http://soul0.tistory.com/270

http://martinmelin.se/rewrite-rule-tester/


'서버 > 아파치' 카테고리의 다른 글

[아파치] mod_headers 모듈  (0) 2016.03.06
[아파치] Windows용 다운로드 경로  (0) 2016.03.06
[아파치] mod_setenvif 모듈  (0) 2016.02.22
[아파치]VirtualHost 설정  (0) 2016.02.21
[아파치]httpd.conf 서버설정  (0) 2016.02.20
Posted by SungHoon, Park
,

mod_setenvif 모듈을 통해 특정 조건에 만족시 환경변수를 설정할 수 있다. 환경변수 설정을 통해 프로그래밍 조건문과 같은 효과를 낼 수 있다.


BrowserMatch

- 문법 : BrowserMatch regex [!]env-variable[=value][[!]env-variable[=value]]

- 클라이언트가 보낸 헤더정보에서 regex 표현식을 비교하여 환경변수를 설정한다.

- !가 붙으면 해당 환경변수를 삭제한다.


- 예제)

 BrowserMatch MSIE 7.0 ie=yes

 BrowserMatch "^(curl|ELink|Wget)" iframe=yes !javascript


BrowserMatchNoCase

- BrowserMatch와 역할은 같으며, 대소문자를 구분하지 않는다.


SetEnvIf

- 문법 : SetEnvIf attribute regex [!]env-variable[=value][[!]env-variable[=value]]

- HTTP 요청 속성에 따라 환경변수를 설정한다.

- 첫번째는 HTTP 요청 속성, 두번째는 정규표현식이다.

- 마지막은 변수 설정/해제 옵션이며, 공백을 기준으로 여러개의 변수를 설정할 수 있다.


- 예제)

1. static 리소스만 로그에서 제외하기

SetEnvIf REQUEST_URI \.(gif|jpg|png|js|css)$ static_request

CustomLog ... combined env=!static_request


SetEnvIfNoCase

- SenEnvIf와 역할은 같으며, 대소문자를 구분하지 않는다.

 


※ 참고자료

- 리눅스를 활용한 회사 인프라 구축의 모든 것



'서버 > 아파치' 카테고리의 다른 글

[아파치] Windows용 다운로드 경로  (0) 2016.03.06
[아파치] mod_rewrite 모듈  (0) 2016.02.23
[아파치]VirtualHost 설정  (0) 2016.02.21
[아파치]httpd.conf 서버설정  (0) 2016.02.20
[아파치] httpd.conf 전역설정  (0) 2016.02.12
Posted by SungHoon, Park
,

가상 호스트(VirtualHost)는 한 장비에서 여러개의 웹서비스를 구동할 수 있도록 해준다.

보통 httpd-vhosts.conf에 가상 호스트를 설정하고, httpd.conf 파일 마지막에 Include conf/extra/httpd-vhosts.conf를 추가한다.


IP 기반 가상 호스트

- 한 장비에 여러개의 IP를 할당받고 IP별로 가상호스트를 사용하는 방법이다.

- IP추가를 위해 네트워크 카드 추가 및 네트워크 설정 등이 필요하다.


Listen 192.168.111.100:80

Listen 192.168.111.200:80


<VirtualHost 192.168.111.100:80>

  DocumentRoot /var/www/site1

  ServerName site1.example.com

</VirtualHost>


<VirtualHost 192.168.111.200:80>

  DocumentRoot /var/www/site2

  ServerName site2.example.com

</VirtualHost>


포트 기반 가상 호스트

- 포트를 기반으로 가상 호스트를 설정한다. Listen 포트에 사용할 포트를 여러개 설정한 후 VirtualHost를 해당 포트로 설정하면 된다.

- 하지만, 포트를 인식하고 사용자들이 웹서비스에 접근하는 것은 불편하므로 일반적인 방법은 아니다.


- 예제)

Listen 80

Listen 90


<VirtualHost 192.168.111.100:80>

  DocumentRoot /var/www/port_80

</VirtualHost>


<VirtualHost 192.168.111.100:90>

  DocumentRoot /var/www/port_90

</VirtualHost>


이름 기반 가상 호스트

- 한 장비에 여러개의 도메인 이름을 부여하고 도메인 이름별로 가상 호스트를 사용하는 방법이다.

- 이름 기반 가상 호스트는 클라이언트 요청시 전송하는 헤더중 Host 헤더정보를 사용하여 가상 호스트 설정에 따라 웹 서비스를 하게 된다.


- 예제)

NameVirtualHost *:80


<VirtualHost *:80>

  ServerName site1.example.com

  ServerAlias site1.co.kr

  ServerAlias site.kr

  DocumentRoot /var/www/site1

</VirtualHost>



<VirtualHost *:80>

  ServerName site2.example.com

  DocumentRoot /var/www/site2

</VirtualHost>


1) NameVirtualHost 설정

 - 80 포트에서 이름 기반 가상 호스트를 사용하겠다는 의미로 반드시 적어줘야 한다.

 - 만약 설정되지 않는 호스트명을 보냈을 경우 기본 처리할 가상호스트로 지정하려면 <VirtualHost _default_:80>으로 지정하도록 한다. 만약 이 설정이 없다면 첫번째 가상 호스트 설정으로 동작하게 된다.

 - 하지만 아파치 웹서버 2.4 이후부터는 이름 기반 가상 호스트가 Default이므로, 2.4 이후 버전에서는 없어졌다.


2) ServerAlias

 - 웹서비스가 여러개의 도메인을 사용할 경우 지정해준다. 여러개 지정해줘도 무방하다.



※ 참고자료

- 리눅스를 활용한 회사 인프라 구축의 모든 것



'서버 > 아파치' 카테고리의 다른 글

[아파치] mod_rewrite 모듈  (0) 2016.02.23
[아파치] mod_setenvif 모듈  (0) 2016.02.22
[아파치]httpd.conf 서버설정  (0) 2016.02.20
[아파치] httpd.conf 전역설정  (0) 2016.02.12
[아파치] mod_mpm 모듈  (0) 2016.01.12
Posted by SungHoon, Park
,