Rocky Linux 설치하여, Rocky와 Centos7 두 개의 서버 이용.
1. Apache + PHP + MariaDB 환경 구성
DNS Server ┌─ 방화벽Firewall ↕ │ (httpd) (php) (php-mysql) WEB │ ↔ WEB ↔ PHP ↔ DBMS Client Server Engine MariaDB |
- web server는 프로그래밍 능력이 없으므로, PHP Engine이 WAS의 역할을 함
- 도메인을 사용했을 때 web server -> web client -> dns server를 거침
2. Apache + Tomcat + Oracle 환경
DNS Server ┌─Firewall JSP ↕ │ (httpd) (tomcat) (oracle) WEB │ ↔ WEB ↔ Tomcat ↔ DBMS Client Server WAS Oracle XE |
(* https 443/tcp, http 80/tcp, php-mysql 3306/tcp, oracle 1521/tcp)
최근에는 https처럼 전체 암호화 활용. 네트워크 속도, 컴퓨팅 속도가 빨라졌기 때문.
웹 애플리케이션의 기술들
- HTML : 태그를 이용
- CSS : HTML의 스타일과 레이아웃 정의
- Javascript : 클라이언트(프론트엔드) 사이드 스크립트. HTML을 동적으로 변환
- PHP : 서버(백엔드) 사이드 스크립트 (Window, Unix, Linux)
- JSP : 서버(백엔드) 사이드 스크립트 (Window, Unix, Linux)
- ASP : 서버(백엔드) 사이드 스크립트 (Window)
서버 환경
APM + Tomcat : Apache + PHP + MySQL or MariaDB + Oracle + Java + Apache Tomcat
LAMP : Linux + Apache + MySQL or MariaDB + PHP (램프)
LEMP : Linux + Enginx + MySQL or MariaDB + PHP
보안설정
1. root로 접속하는 것을 금지한다.
일반유저로 접속한 후, root로 변경하여 사용한다.
/etc/ssh/sshd_config 파일의 PermitRootLogin No로 설정한 후,
systemctl reload sshd로 sshd 설정을 다시 읽어 적용.
이후부터 root 로그인이 금지된다.
( systemctl restart sshd : sshd 서버 프로그램 데몬을 중지한 후 다시 시작 )
2. 관리자용 사용자를 생성한다.
useradd -g wheel linuxadmin
(관리자는 wheel 그룹에 들어가야 한다)
3. PAM 모듈 설정에 의한 명령어의 권한 제한
su - : 영구적으로 관리자 권한으로 변경
└ su : root로 변경하지만 일시적
└ su - : root로 변경하면서 root의 환경변수도 변경된다
sudo : 명령어를 한 번 관리자 권한으로 실행해준다
/etc/pam.d/su 파일에서
auth required pam_wheel.so use_uid
해당 라인의 주석을 풀거나 추가하여,
wheel 그룹 사용자만 su 명령어를 쓸 수 있게 한다
설치
yum -y install httpd php php-mysql mariadb mariadb-server
=> httpd는 apahe를 의미함. php와 maraidb를 연결해주는 것이 php-mysql이다.
방화벽 설정
: 아웃바운드 패킷이 웹서버로 들어올 수 있게 서비스를 오픈한다
firewall-cmd --list-services
=> 현재 열려져 있는 서비스 확인
firewall-cmd --permanent --remove-service=dhcpv6-client
=> 쓸모없는 서비스는 삭제
firewall-cmd --permanent --add-service={http,https} (공백 넣으면 오류남!)
또는 firewall-cmd --permanent --add-service=http (단일서비스 지정시)
=> http와 https 추가
firewall-cmd --reload
=> 방화벽 재시작
firewall-cmd --list-services
=> 다시 리스트 조회 후 추가된 것 확인
(permanent는 임시적인 것이므로 reload를 해야한다)
systemctl enable --now httpd
=> 웹서버를 영구적으로 실행. 재부팅시 자동으로 실행됨. enable 후 --now 지금 httpd 실행해달라는 명령어
웹서버 enable 실행시
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
이런 안내가 출력된다.
ll /etc/systemd/system/multi-user.target.wants/
...
lrwxrwxrwx. 1 root root 37 4월 6 11:04 httpd.service -> /usr/lib/systemd/system/httpd.service
폴더를 확인해보면 httpd.service가 생성된 것을 확인할 수 있다.
systemctl stop httpd
systemctl disable httpd
서비스를 중지 시킨 뒤
ll /etc/systemd/system/multi-user.target.wants/
다시 폴더를 확인하면 httpd.service가 사라진 것을 확인할 수 있다.
(start 후 enable httpd 해주면 다시 생김)
systemctl status httpd
=> 웹서버 서비스의 현재 상태 조회
httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since 토 2024-04-06 11:11:26 KST; 1min 45s ago |
/multi-user.target.wants/에 service가 있는 의미?
=> 해당 폴더에 있는 서비스들은 부팅시 자동으로 실행된다. (단, 심볼릭 링크를 직접 생성한다고 해서 systemctl status의 disabled가 enabled로 변경되지는 않는다. 이는 명령어를 통해 변경된다)
yum -y install tree
트리구조로 보기위해 설치
tree -F /etc/httpd/
/etc/httpd/ <- 최상위 디렉터리 ├── conf/ <- 설정파일 │ ├── httpd.conf <- 메인설정파일 │ └── magic ├── conf.d/ <- 설정파일 보조 디렉터리 │ ├── README │ ├── autoindex.conf │ ├── php.conf <- php 설정 파일 │ ├── userdir.conf │ └── welcome.conf ├── conf.modules.d/ <- 모듈 디렉터리 │ ├── 00-base.conf │ ├── 00-dav.conf │ ├── 00-lua.conf │ ├── 00-mpm.conf │ ├── 00-proxy.conf │ ├── 00-systemd.conf │ ├── 01-cgi.conf │ └── 10-php.conf ├── logs -> ../../var/log/httpd/ <- 웹서버 로그 디렉터리. 심볼릭링크. ├── modules -> ../../usr/lib64/httpd/modules/ <- 동적모듈 디렉터리. 심볼릭링크 └── run -> /run/httpd/ |
ss -nlt | grep 80
LISTEN 0 128 [::]:80 [::]:*
=> 80 port가 LISTEN 상태로 열려있다.
(LISTEN : 데몬 입장에서의 상태. Port가 오픈되어, 웹서버 데몬은 들을 준비가 되어 있다.)
* ss 명령어 = netstat 명령어를 대체한다
(netstat를 사용하려면 yum -y install net-tools 설치하여 netstat -nlt 로 사용)
netstat -nlt | grep 80
tcp6 0 0 :::80 :::* LISTEN
=> 비슷하지만 약간 다르게 표기됨
옵션
n : 숫자로 표기
l : listen 포트만 표기
t : tcp를 의미
cd /var/www/html
=> 아파치 웹서버의 루트 디렉터리로 이동
(Document Root 디렉터리 : 웹문서의 최상위 디렉터리. 설정을 통해 변경 가능.)
http://192.168.100.3/ 로 접속하면 index.html 파일이 없어도 디폴트 페이지를 보여준다
(본인의 ifconfig 등으로 확인하고 본인 ip로 접속해야함)
이 경로에 index.html 파일을 만들면, 해당 페이지가 보이게 된다.
html만 있으면 내용이 변치 않는 정적인 웹페이지이고,
php 등의 서버 사이드 스크립트(또는 클라이언트 사이드 스크립트)가 들어가면 동적인 웹페이지가 된다.
vi /etc/httpd/conf.d/php.conf
<FilesMatch \.php$> → <FilesMatch \.(php|html)$>
=> php.conf 파일을 열어서, html도 php로 인식하도록 수정한다.
vi /etc/php.ini
=> php 설정파일.
808 data.timezone = Asia/Seoul ← 시간설정
211 short_open_tag = On ← <?php 를 <?로 사용
478 display_errors = On ← 에러를 출력하는 옵션 (개발:On, 운영: Off)
(vi 라인수로 이동하기 478G 이런식으로 숫자+shift+g 입력하면됨. : 콜론은 필요없음)
수정하고 systemctl restart httpd 서버를 재시작하여 적용
(reload는 설정파일만 다시 읽는데, php 설정 파일은 reload로는 적용이 안되므로 restart 한다)
httpd 아파치 웹서버 데몬(웹서버 프로그램) 재시작
- 아파치 설정 파일을 수정했을 경우
- php 설정파일을 수정했을 경우
=> web server는 apache 설정파일과 php 설정파일을 읽어 메모리를 할당받아 web server 데몬 서비스를 시작한다
=> 시작할 때 읽기 때문에, 설정파일을 변경해도 실시간으로 적용되지 않으므로 재시작해야 한다
httpd -t
=> syntax(구문) 체크. 에러가 나지 않으면 그 때 systemctl restart httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message |
=> 서버이름ServerName이 없어서 나는 에러. /etc/httpd/conf/httpd.conf 에서 serverName을 설정해주면 된다
동적인 페이지 예시
http://192.168.100.3/?count=3
변수를 받아서 php로 count 개수만큼 특정 구문을 반복함
<?
if(!isset($_GET['count'])) {
echo "Centos7 으로 구축한 웹 서버!";
} else {
$count = $_GET['count'];
$i = 1;
while($i <= $count){
echo "Centos7 으로 구축한 웹 서버!<br>";
$i++;
}
}
?> ;원래 <php? php?> 인데 설정으로 단축한 상태
(복습
vi 단축키
복사 : 한줄복사는 yy 특정라인수만큼 복사는 ny (ex 3y 5y ... )
커서뒤에 붙여넣기 : p (커서앞은 P)
삭제 : 한줄삭제 dd
되돌리기 : u )
mariadb는 yum으로 설치하면 낮은 버전이 설치되므로, 다른 방법을 이용한다
mariadb-server : 서버 패키지
mariadb : 클라이언트 패키지
/var/lib/mysql : 리눅스용 mariadb db 파일 위치 (기본값)
/etc/my.cnf : 설정파일
vi /etc/my.cnf
설정파일에
collation-server=utf8_general_ci
character-set-server=utf8
skip-character-set-client-handshake
bind-address=127.0.0.1
해당 설정을 추가해야 한글이 깨지지 않는다
systemctl enable --now mariadb
systemctl status mariadb
ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 50 127.0.0.1:3306 *:* |
=> 127.0.0.1 설정을 해주어서, 외부에 오픈하지 않게 되어 있다.
mysql : mariadb 클라이언트 명령어
mysql입력 후 \s 로 characterset이 utf8로 되어있는지 확인한다
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
mariadb를 생성하면 mariadb 내 root계정이 생기는데, 시스템의 root 계정과는 다르므로 구분할 것
mysqladmin -p
=> 비밀번호를 설정한 후, mysql 입력하여 접속.
(root로 접속한 경우, 비밀번호를 설정해도 시스템 계정 root와 mysql root 계정명이 일치하여 비밀번호를 묻지 않고 접속된다)
비밀번호를 잊어버렸을 때 복구하는 법
systemctl stop mariadb
=> 데몬 중지
mysqld_safe --skip-grant-tables &
mysql mysql
=> 권한 없이 들어가서
SELECT host,user,password from user;
=> 데이터 확인
update set pasasword=password('값') where user='root' and host='localhost';
=> 비밀번호 업데이트
pkill -9 mysqld
=> 프로세스를 죽인 다음
systemctl start mariadb
=> 재시작
DBMS 자동 접속하기
vi .my.cnf 에
[client] password = 값 (암호화되지 않은) |
이런식으로 셋팅해주면 된다
'리눅스' 카테고리의 다른 글
소스 복사 붙여넣기 (0) | 2024.04.07 |
---|---|
리눅스 수업 2 2차시 (0) | 2024.04.07 |
리눅스 수업 8차시 (0) | 2024.03.17 |
리눅스 수업 7차시 (0) | 2024.03.16 |
리눅스 수업 6차시 (셀프실습) (0) | 2024.03.14 |