POOPOO: 배변 일기 앱
이 포스팅은 CentOS 7 버전에서 진행되었습니다.
목차
- Apache 가이드 - 설치부터 HTTPS 적용까지
- Apache 가이드 - Apache Tomcat과 연동하기
- Apache 가이드 - 설정파일 분석하기
- Apache 가이드 - 로드밸런싱 설정하기
httpd.conf 파일의 속성
ServerRoot
이 설정파일에서 특정 파일을 참조하는 경우에는 이 경로를 기준으로 상대경로를 입력합니다.
ServerRoot "/etc/httpd"
예를들어 /etc/httpd/modules/hello.so 모듈을 로드하기 원하는 경우에는 아래와 같습니다. (modules/hello.so 상대경로 사용)
LoadModule hello_module modules/hello.so
Listen
Apache에서 다룰 포트를 추가하기 위해 사용합니다.
기본적으로는 80번 포트를 등록해 놓고 사용합니다. 하지만 추가적으로 더 많은 포트가 필요한 경우에는 아래와 같이 사용하실 수 있습니다.
Listen 80
Listen 81
Listen 82
Include
일반적으로 Apache의 설정파일의 구조는 설정파일을 용도에 맞게 여러개의 파일로 분리해 놓고, httpd.conf 파일에서 불러와서 사용하는 형태로 이루어져 있습니다. 그러기 위해서 필요한 부분이 바로 이 Include 옵션입니다.
Apache httpd 버전 2.3.6 이상부터 쓸 수 있는 IncludeOptional 이라는 옵션이 있는데, 이 의미는 해당하는 파일이 없더라도 에러를 발생시키지 않도록 합니다.
/etc/httpd/conf.d/*.conf 안에 있는 용도에 따른 설정파일을 가져옵니다.
IncludeOptional conf.d/*.conf
/etc/httpd/conf.module.d/*.conf 안에 있는 모듈을 로딩한 설정파일을 가져옵니다.
Include conf.modules.d/*.conf
User / Group
User와 Group 옵션은 홈페이지 서비스를 직접 담당하는 Apache 서버의 하위 프로세스들의 실행 소유자와 소유그룹을 결정합니다. Apache 서버는 HTTP 포트, 포트 80에 액세스하기 위해 루트 사용자로 실행됩니다.
클라이언트 요청에 응답하기 위해서 Apache는 필요한 하위 프로세스를 분리합니다.
그 하위 프로세스는 최소한의 권한으로 실행되어야 합니다. 따라서 초기에 설정은 apache 유저와 apache 그룹으로 설정되어 있지만, 클라이언트의 엑세스를 최소화하려면 이 부분을 nobody로 설정해야합니다.
User nobody
Group nobody
ServerAdmin
웹 문서 로딩과 같은 문제로 에러가 발생 시, 에러페이지에 보여질 관리자 메일 주소이다.
ServerAdmin root@localhost
ServerName
클라이언트에게 보여주는 호스트이름을 지정합니다. 만약 현재 사용하는 도메인이 없다면 IP주소나 localhost를 입력합니다.
ServerName localhost
DocumentRoot
요청을 받은 아파치는 어떤 파일을 서비스할지 결정하기위해 기본적으로 요청의 URL-경로(URL에서 호스트명과 포트 뒤에 나오는 부분)를 설정파일에서 지정한 DocumentRoot 뒤에 붙입니다. 그래서 DocumentRoot 아래있는 파일과 디렉토리들은 웹에서 보게될 기본적인 내용들을 가지고 있습니다.
예를들어, DocumentRoot /etc 라고 정의하였다고 가정합니다.
http://localhost/hello.jpg 라고 주소를 입력할 시, etc 폴더 안에 있는 hello.jpg 파일을 찾아서 보여줍니다.
초기에는 아래와 같이 설정되어있으나, 변경을 원하는 경우에 자유롭게 바꿀 수 있습니다.
DocumentRoot "/var/www/html"
AddDefaultCharset
이 옵션은 외부로 보내지는 모든 웹문서들에 대하여 기본 charset을 지정한 것입니다. 최근에는 대부분 UTF-8로 다국적인 표준을 사용합니다.
AddDefaultCharset UTF-8
EnableSendfile
Apache는 운영체제가 sendfile을 지원하면 커널 sendfile을 사용하여 정적 파일을 서비스하는 경우 전송할 파일을 직접 읽지 않을 수 있습니다. sendfile을 사용하면 read와 send를 따로 할 필요가 없어서 매우 빨라집니다.
하지만, sendfile을 사용하면 웹서버의 안정성을 해치게되는 경우가 있고, 커널은 자신의 캐쉬를 사용하여 NFS로 마운트한 파일을 안정적으로 서비스할 수 없는 경우가 있으므로 EnableSendfile off를 사용해서 파일을 sendfile 전송하지 않도록 할수 있습니다.
기본 설정값은 on 입니다.
EnableSendfile on
LogLevel
에러로그파일(error_log)의 기록내요을 얼마나 자세하게 기록할 것인가를 결정하는 옵션입니다.
초기에는 info로 설정되어있고, 하단의 테이블을 참조해서 원하는 로그 수준으로 변경할 수 있습니다.
LogLevel info
<Directory>
지정한 디렉토리 안에있는 모든 웹문서들에 대하여, 어떤 서비스와 기능을 허용 및 거부 할 것인지를 설정합니다.
Options은 지정한 디렉토리이하에 모든 파일과 디렉토리들에 적용할 접근제어를 설정합니다. 디렉토리목록을 보여줄지, CGI를 허용할 것인지 등등의 것들의 설정을 여기서 하게 된다.
[Option 종류]
AllowOverride는 어떻게 접근을 허락할 것인가에 대한 설정입니다.
특정 디렉토리에 대한 방문자들의 접근방식을 어떤방식으로 인증하여 허용할 것인가를 정의하는 경우에 사용합니다.
AllowOverride에서 설정하는 값들은 중복해서 설정될 수 있으며 그때마다 가장 최근에 설정된 값이 항상 우선 적용됩니다.
[AllowOverride 종류]
위에있는 표를 참고하여 아래와 같이 해당하는 경로에 따라서 옵션을 지정할 수 있습니다.
기존에 있는 설정은 아래와 같습니다. 루트폴더와 /var/www, /var/www/html, /var/www/cgi-bin 폴더에 대한 옵션이 정의되어있습니다.
Apache 웹서버를 통해서 다른 폴더로도 접근을 원한다면, Directory 태그를 추가로 정의해서 사용하실 수 있습니다.
<Directory />
AllowOverride none
Require all granted
</Directory>
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
# 추가를 원한다면 ?
<Directory "/???/???">
AllowOverride None
Require all granted
</Directory>
<IfModule>
모듈을 로드하기 위해서는 LoadModule 모듈명 파일경로 형식으로 *.conf 파일에 추가합니다.
기존에는 /etc/httpd/conf.modules.d 폴더 안에 여러가지의 conf 파일들이 있고, 그 파일의 내용에는 각각 이름에 맞도록 모듈이 로딩되어있습니다. 또한, httpd.conf 파일에서는 모듈을 로딩하는 파일들을 Include conf.modules.d/*.conf 라고 상단에 정의하여 필요한 모듈을 전부 로딩하고있습니다.
이렇게 모듈을 로딩하도록 설정을 했지만, 이 모듈을 사용하기 위해서는 모듈이 필요로하는 속성값을 넣어주어야 합니다. 이런 경우에 사용하는 옵션이 <IfModule> 태그입니다.
아래의 예시를 보면 모듈별로 다양한 속성을 필요로하고 있다는 것을 알 수 있습니다.
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkLogFile logs/mod_jk.log
JkLogLevel info
JkShmFile run/mod_jk.shm
JkMount /* worker1
</IfModule>
Files
특정 확장자로 이루어진 파일에 별도의 제한을 걸어둘 수 있는 옵션입니다.
접근권한에 대한 정보를 담고있는 .htaccess 파일과 .htpasswd 파일은 보안이 중요하기 때문에 접근할 수 없도록 설정되어있습니다.
<Files ".ht*">
Require all denied
</Files>
'Web Server > Apache' 카테고리의 다른 글
○ Apache 가이드 - 로드밸런싱 설정하기 (0) | 2020.07.06 |
---|---|
○ Apache 가이드 - Apache Tomcat과 연동하기 (1) | 2020.07.05 |
○ Apache 가이드 - 설치부터 HTTPS 적용까지 (3) | 2020.07.05 |