centos 7.0 상에서 아파치(httpd)를 설치하고 포트 맵핑 하는 내용을 정리 합니다.
install
아파치 설치
[root@localhost conf]# yum install httpd |
방화벽 오픈
[root@localhost conf]# firewall-cmd --permanent --add-service=http |
상시 서비스 등록
[root@localhost conf]# systemctl enable httpd |
서비스 restart
systemctl restart httpd
servier 정상 확인
브라우저
http://<
path 구조
[root@localhost httpd]# ls -al |
- conf : 기본 설정파일
- conf.d : conf에 추가 설정 정보 (Include로 추가 설정을 이곳에서 처리한다)
- conf.modules.d : module에 대한 로드 정보가 이곳에 있다
- logs : 아파치 로그를 확인 가능하다
https.conf 구조
급하게 필요 한것만 보고 처리 해서 사실 잘 알지는 못한다 일단 이해 된것 같은것만 대략적으로 쓴다.
httpd 관련 설정 정보 및 로그가 있는 루트 디렉토리
ServerRoot "/etc/httpd" |
80포트를 상시 모니터링 하겠음
(8080 포트 모니터링 하겠음은
Listen 8080)
Listen 80 |
conf.moules.d 이하의 설정 파일을 읽어서 모듈을 로드해라(모듈을 로드해라는 해당 .conf에 있음)
Include conf.modules.d/*.conf |
본 아파치 서버가 작동하는 디렉토리에 대한 접근 권한을 설정한다
<Directory /> |
예를 들자면 로컬 서버의 디렉토리 중 /var/www 디렉토리는 httpd가 접근 가능하게 모든 권한을 준다.
<Directory "/var/www"> |
모듈 로드를 확인한다. 만약에 dir_module이 있으면 디렉토리상 인덱스는 index.html 이다.
<IfModule dir_module> |
2개의 url에 서로 다른 index.html 나타나게 하기
http.conf 수정
####파일 마지막에 넣음###### |
/data/ 디렉토리 이하를 접근 하겠음
vhost.conf 컨피그를 포함 하겠음 ( 해당 파일 만들지 않고 파일내에 있는 내용을 이곳에 직접 타이핑 해도 동일 작동함 )
vhost.conf 생성 및 수정
[root@localhost conf]# vi vhost.conf |
NameVirtualHost *:80 |
NameVirtualHost *:80: 80 포트 대상으로 이름 별 분리를 처리할 것임<VirtualHost *:80>: 80으로 들어오는 내용을 본다ServerName test.com: 요청들어온 url이 test.com이거나 www.test.com 이면,DocumentRoot "/data/test1": 의 index.html을 보여라
상위는 test.com이라는 DNS를 사용자가 취득 했고 DNS를 통해서 해당 서버에 접근 가능하다는 것이 전제 사항이다. 해당 관련 내용은 DNS Server관련 영역임으로 다루지 않으려고 한다.
해당 내용과 상관없이 hosts를 수정해서 테스트를 많이 하던데… 저는 pass
[root@localhost conf]# cd / |
test1과 test2디렉토리로 들어가서 다음과 같은 index.html을 만들어 준다.
[root@localhost test1]#vi index.html |
permission denied
[core:error] [pid 24938] (13)Permission denied: [client 222.222.222.222:53283] AH00035: access to /index.html denied (filesystem path '/data/test1/index.html') because search permissions are missing on a component of the path |
상위와 같은 오류가 난다면 다음과 같은 명령어를 사용해서 data디렉토리 이하에 아파치에서 접근이 가능하도록 해줘야 한다.
SELinus의 접근 권한 처리 때문에 생기는 문제이다.
chcon -R -t httpd_sys_content_t data/ |
[root@localhost /]# ls -alZ | grep data |
상위와 같이 권한이 처리 되면 된다.
subdomain을 활용한 타 web서비스 실행
sub.test.com으로 들어오면 내부적으로 test.com:8888번 서비스로 자동 포워딩 되는 내용이다.
NameVirtualHost *:80 |
일반적으로 상위처럼 수정후 sub.test.com을 실행하면 8888포트의 서비스가 브라우저에 표시 되게 된다.
그러나 SELinus로 인해 다음과 같은 오류가 날 수 있다.
[proxy:error] [pid 17800] (13)Permission denied: AH00957: HTTP: attempt to connect to 222.222.222.222:8888 (test.com) failed |
아파치는 http_port_t에 등록된 포트만 프록시 패스가 가능하다. 해서 해당 포트를 등록 해줘야 한다
[root@localhost logs]# semanage port -l | grep http_port_t |
semanage port -a -p tcp -t http_port_t 8888 명령어를 실행 후 다시 확인 해보자.
[root@localhost logs]# semanage port -l | grep http_port_t |
상위와 같이 나오면 된다.
오류를 잡다보면 퍼미션 관련 로그가 나오는 경우가 많은데, 아파치 오류만으로는 분석 하기 어려운 경우가 많다
이 경우는 다음 파일을 확인 하면 된다.
/var/log/audit만약에 8888 포트가 다른 서비스에 이미 맵핑 되어 있다면 다음과 같이 명령어를 사용하면 된다.
semanage port
-m-p tcp -t http_port_t 8888
만약에 포트에 따라서 사용자가 변경 할 수 없는 포트는 아래와 같이 처리 해주면 된다.
semanage port -m -t http_port_t -p tcp 8888
[root@localhost logs]# semanage port -l | grep 8888 |