install
아파치 설치
[root@localhost conf]# yum install httpd
[root@localhost conf]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Apr 24 2019 13:45:48
방화벽 오픈
[root@localhost conf]# firewall-cmd --permanent --add-service=http
[root@localhost conf]# firewall-cmd --permanent --add-service=https
[root@localhost conf]# firewall-cmd --reload
상시 서비스 등록
[root@localhost conf]# systemctl enable httpd
[root@localhost conf]# systemctl start httpd
서비스 restart
systemctl restart httpd
servier 정상 확인
브라우저
http://<
path 구조
[root@localhost httpd]# ls -al
합계 16
drwxr-xr-x. 5 root root 92 7월 8 23:03 .
drwxr-xr-x. 151 root root 12288 7월 9 09:26 ..
drwxr-xr-x. 2 root root 55 7월 9 17:18 conf
drwxr-xr-x. 2 root root 100 7월 9 11:16 conf.d
drwxr-xr-x. 2 root root 146 7월 9 10:21 conf.modules.d
lrwxrwxrwx. 1 root root 19 7월 8 23:03 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root 29 7월 8 23:03 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root 10 7월 8 23:03 run -> /run/httpd
- 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 />
AllowOverride none
Require all granted
</Directory>
예를 들자면 로컬 서버의 디렉토리 중 /var/www
디렉토리는 httpd가 접근 가능하게 모든 권한을 준다.
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
모듈 로드를 확인한다. 만약에 dir_module이 있으면 디렉토리상 인덱스는 index.html 이다.
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
2개의 url에 서로 다른 index.html 나타나게 하기
http.conf 수정
####파일 마지막에 넣음######
<Directory "/data/">
AllowOverride None
Require all granted
</Directory>
Include /etc/httpd/conf/vhost.conf
/data/
디렉토리 이하를 접근 하겠음
vhost.conf
컨피그를 포함 하겠음 ( 해당 파일 만들지 않고 파일내에 있는 내용을 이곳에 직접 타이핑 해도 동일 작동함 )
vhost.conf 생성 및 수정
[root@localhost conf]# vi vhost.conf
[root@localhost conf]# pwd
/root/httpd/conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/data/test1"
ServerName test.com
ServerAlias www.test.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/test2"
ServerName sub.test.com
</VirtualHost>
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 /
[root@localhost /]# mkdir data
[root@localhost data]# mkdir test1 test2
[root@localhost data]# ls
test1 test2
test1과 test2디렉토리로 들어가서 다음과 같은 index.html을 만들어 준다.
[root@localhost test1]#vi index.html
test1
[root@localhost test2]#vi index.html
test2
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
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 data
상위와 같이 권한이 처리 되면 된다.
subdomain을 활용한 타 web서비스 실행
sub.test.com
으로 들어오면 내부적으로 test.com:8888
번 서비스로 자동 포워딩 되는 내용이다.
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/data/test1"
ServerName test.com
ServerAlias www.test.com
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ServerName sub.test.com
proxyPass / http://test.com:8888/
proxyPassReverse / http://test.com:8888/
</VirtualHost>
일반적으로 상위처럼 수정후 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
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
semanage port -a -p tcp -t http_port_t 8888
명령어를 실행 후 다시 확인 해보자.
[root@localhost logs]# semanage port -l | grep http_port_t
http_port_t tcp 8888, 80, 81, 443, 488, 8008, 8009, 8443, 9000
상위와 같이 나오면 된다.
오류를 잡다보면 퍼미션 관련 로그가 나오는 경우가 많은데, 아파치 오류만으로는 분석 하기 어려운 경우가 많다
이 경우는 다음 파일을 확인 하면 된다.
/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
us_cli_port_t tcp 8082, 8888
us_cli_port_t udp 8082, 8888
[root@localhost logs]# semanage port -a -p tcp -t http_port_t 8083
ValueError: 포트 tcp/8083가 이미 지정되어 있습니다
[root@localhost logs]# semanage port -d -p tcp -t htus_cli_port_t 8083
ValueError: 포트 tcp/8083가 정책에 지정되어 있습니다, 삭제할 수 없습니다
[root@localhost logs]# semanage port -m -t http_port_t -p tcp 8083
[root@localhost logs]# semanage port -l | grep 8083
http_port_t tcp 8888, 9888, 9999, 8888, 80, 81, 443
us_cli_port_t tcp 8888, 8083
us_cli_port_t udp 8888, 8083
'OS' 카테고리의 다른 글
Windows Network Driver CMD로 접근하기 (0) | 2020.09.13 |
---|---|
Hyper V Ubuntu File share (samba) (0) | 2020.09.13 |
Virtual Box And Vagrant Install on Centos (0) | 2020.03.27 |
Nexus install on Centos7 with docker (0) | 2020.03.27 |
Network setup CentOS7 on Virtual Box (0) | 2020.03.27 |