728x90

 

실습 개요


 

Webserver
- http / https 프로토콜을 이용
- 정적인 페이지 + 동적인 페이지를 제공 (컨텐츠)
- 구성방식 : Apache , Nginx , IIS ...
- 페이지 : html , css , php , python ...

-> LAMP ( Linux + Apache + MariaDB + PHP )


WEB Server


Apache 기본 구성


패키지 설치 및 서비스 시작

# WEB 서버
yum install -y httpd      
systemctl enable --now httpd       
firewall-cmd --add-service=http --permanent    
firewall-cmd --add-service=http
echo "test web page" > /var/www/html/index.html

# 다른 가상 머신에서 접속 확인
[root@storage ~]# curl 10.0.2.40
test web page

 


PHP 구성


추가 패키지 설치

php, php-mbstring, php-pear, php-fpm, php-mysql(DB 연동)

yum install -y php php-mbstring.x86_64 php-fpm php-mysql php-pear

 

 

언어를 위한 설정 파일 수정 (DB 연동)

/etc/httpd/conf.d/php.conf

vi /etc/httpd/conf.d/php.conf
      4 <FilesMatch \.php$>
      5         SetHandler "proxy:fcgi://127.0.0.1:9000"

 

 

서비스 재시작 및 활성화

httpd (재시작), php-fpm (활성화)

systemctl restart httpd php-fpm

 

 

서비스를 제공할 스크립트 작성

1. /var/www/html/info.php

 

# /var/www/html/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/info.php

systemctl restart httpd php-fpm

 

 

웹 브라우저에서 접속하여 php 기본 페이지 확인: Web 서버 IP/php 설정 파일 이름

 

 

여기까지 작업이 완료되었다면 HTTP + PHP 서비스가 정상적으로 작동되고 있음

 

 

2. /var/www/html/db.php

1) 사전 작업: DB 서버에 데이터가 저장된 테이블과 사용자 설정 필요

[root@master ~]# mysql -u root -p

MariaDB [(none)]> GRANT select ON *.* TO remote@'%' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> SELECT user,host FROM mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| remote  | %         |
| replica | %         |
| root    | %         |
| root    | 127.0.0.1 |
| root    | ::1       |
| root    | localhost |
+---------+-----------+

MariaDB [(none)]> SELECT * FROM examdb.test_tab;
+------+------+--------+
| id   | name | locate |
+------+------+--------+
|    1 | kim  | seoul  |
+------+------+--------+
1 row in set (0.00 sec)

 

2) db.php 파일 생성

vi /var/www/html/db.php

<?php
$conn = mysqli_connect('10.0.2.10', 'remote', '123', 'examdb');

$sql = "SELECT * FROM test_tab";
$result = mysqli_query($conn, $sql);
  while($row = mysqli_fetch_array($result)){
    echo $row['id'].' '.$row['name'].' '.$row['locate'].'<br>';
  }
?>

 

* DB 연결 에러: WEB 서버의 SELinux 설정이 원인

 

방화벽 확인 (문제 없음)

firewall-cmd --list-services
dhcpv6-client mysql ssh

 

포트 설정 확인 (문제 없음)

semanage port -l | grep 3306
mysqld_port_t                  tcp      1186, 3306, 63132-63164

 

파일 컨텍스트 확인 (문제 없음)

ls -Z /var/lib/mysql
...
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 examdb
...

 

부울 컨텍스트 확인 (문제: off > on)

# WEB 서버에서 작업 필요

semanage boolean -l | grep httpd_can_network_connect_db
httpd_can_network_connect_db   (off  ,  off)  Allow httpd to can network connect db

semanage boolean -m httpd_can_network_connect_db --on

semanage boolean -l | grep httpd_can_network_connect_db
httpd_can_network_connect_db   (on   ,   on)  Allow httpd to can network connect db

 

 

웹 브라우저에서 접속: WEB 서버의 IP/db.php

 

728x90

+ Recent posts