728x90

Aapche 서버를 3Tier 로 구성할 때 Apache + PHP-FPM 설정한 WAS 서버 환경 옵션을 제대로 처리를 못해서 이 문제 해결하는데 엄청 시간을 허비했다.

이 자료를 오픈할까 말까 엄청 고민했다.

아래 예시는 무료 인증서를 설치한 것 기준으로 작성된 Apache httpd.conf 와 관련 파일이다.

 

httpd.conf 설정사항

 

DocumentRoot "/home/httpd/test/www/htdocs"
 
# Further relax access to the default document root:
<Directory "/home/httpd/test/www/htdocs">
    Options +FollowSymLinks -Indexes
    AllowOverride All
    Require all granted
    <LimitExcept GET POST>
      Order deny,allow
      Deny from all
    </LimitExcept>
</Directory>
 
<IfModule dir_module>
    DirectoryIndex index.php index.html 
</IfModule>
 
<IfModule mime_module>
    TypesConfig /etc/mime.types
    #AddType application/x-gzip .tgz
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php .html .do
    AddType application/x-httpd-php-source .phps
    AddType text/css .css
    AddType text/javascript .js
    #AddHandler cgi-script .cgi
    #AddHandler type-map var
    #AddOutputFilter INCLUDES .shtml
</IfModule>
 

 

default.conf

<VirtualHost *:80> 
       DocumentRoot "/home/httpd/test/www/htdocs"
       ServerName test.abc.com
       ServerAlias test.abc.com
 
       ErrorLog /var/log/httpd/test-error.log
       CustomLog /var/log/httpd/test-access.log combined
 
RewriteEngine on
RewriteCond %{SERVER_NAME} =test.abc.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

 

 

default-le-ssl.conf

 

<IfModule mod_ssl.c>
<VirtualHost *:443> 
       DocumentRoot "/home/httpd/test/www/htdocs"
       ServerName test.abc.com
       ServerAlias test.abc.com
 
       ErrorLog /var/log/httpd/test-error.log
       CustomLog /var/log/httpd/test-access.log combined
 
SSLCertificateFile /etc/letsencrypt/live/test.abc.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.abc.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/test.abc.com/chain.pem
</VirtualHost>
</IfModule>
 

 

.htaccess

 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{THE_REQUEST} !^(POST|GET)\ /.*\ HTTP/1\.1$
RewriteRule .* - [R=405,L]
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ error.html?/$1 [QSA,PT,L]
</IfModule>

 

.htaccess 에서 error.html 대신에 index.php 로 하면 없는 파일을 검색 시 로그인 화면으로 이동하도록 처리하는 것도 좋은 방법인 거 같다.

'리눅스' 카테고리의 다른 글

일반사용자 root 권한 부여  (0) 2021.04.10
yum update 시 에러 Berkeley DB library error  (0) 2021.03.24
CentOS7 PHP-FPM 제거시  (0) 2021.02.16
CentOS7 nginx + PHP 7.3 설치  (0) 2020.12.28
CentOS7 기반 phpMyAdmin 설치  (0) 2020.12.18
블로그 이미지

Link2Me

,
728x90

PHP-FPM 환경설정 테스트를 위해 PHP-FPM 설정 옵션을 제거하고 나서

Apache 서버에서 접속하니까 아래와 같은 메시지가 나온다.

 

Warning: require_once(): open_basedir restriction in effect. File(/var/www/config.php) is not within the allowed path(s): (/var/www/html) in /var/www/html/loginView.php on line 11

Warning: require_once(/var/www/config.php): failed to open stream: Operation not permitted in /var/www/html/loginView.php on line 11

Fatal error: require_once(): Failed opening required '.././config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/loginView.php on line 11

 

3Tier 구조에서 PHP-FPM 설치 옵션을 제거하면 3Tier 로 동작되는지 여부를 확인하기 위해서 해봤다.

반드시 PHP-FPM 을 설치해줘야만 3 Tier 구조로 동작이 된다는 것을 확인했다.

블로그 이미지

Link2Me

,
728x90

Apache 대신에 Nginx 서버를 설치하고, PHP-FPM 7.3 을 설치하는 과정을 테스트하고 적어둔다.

 

테스트 환경 : Virtual Box 6.1을 이용하여 Windows10 기반에서 CentOS 7.4 설치 후 아래 설정 작업

##########################################################
# Step 1. 커널을 제외한 업그레이드
vi /etc/yum.conf
# 첫줄 [main] 다음 라인에 추가하고 저장한다.
exclude=kernel*

 

# 아래 명령어 수행하면 커널은 업데이트되지 않고 다른 것만 업데이트된다.
yum -y update

#########################################################
#Step 2. – Prerequsitis
yum -y install epel-release

# yum 외부 저장소 추가 (이 과정은 생략해도 된다)
cd /etc/yum.repos.d/
vi nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

:wq 저장하고 나온다.

#Step 3. Nginx 설치
yum -y install nginx

# Apache를 설치한 경우에는 아파치 동작 중지
systemctl stop httpd

#Step 4. Nginx 데몬 실행
systemctl start nginx
systemctl enable nginx
systemctl status nginx

# 기존에 설치된 php가 있다면 제거 (필요하면 사용하라)
yum remove -y 'yum list installed | cut -d " " -f 1  | grep php'

### PHP 설치 ####
#Step 5. Repository 설치
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

#Step 6. yum Utilities Package 설치
yum -y install yum-utils

#Step 7. – Install PHP and PHP-FPM
# Disable repo for PHP 5.4
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php73

yum -y install --enablerepo=remi-php73 mod_ssl php php-zip php-fpm php-common php-opcache php-curl php-devel php-gd
yum -y install --enablerepo=remi-php73 php-imap php-ldap php-mysql php-mysqlnd php-pdo php-odbc php-pear php-xml php-xmlrpc php-pecl-apc   
yum -y install --enablerepo=remi-php73 php-mbstring php-mcrypt php-soap php-tidy curl curl-devel php-libwww-perl ImageMagick libxml2 libmxl2-devel    
yum -y install --enablerepo=remi-php73 mod_fcgid php-cli httpd-devel php-intl php-pspell php-openssl      
yum -y install --enablerepo=remi-php73 unzip mc git bind-utils wget

# 시만텍 서버백신 라이브러리 설치
yum -y install gcc glibc.i686 libX11.i686 libX11.x86_64

# CentOS 7.4 버전용 kernel-devel rpm 다운로드
cd /root
wget https://vault.centos.org/7.4.1708/os/x86_64/Packages/kernel-devel-3.10.0-693.el7.x86_64.rpm
rpm -ivh kernel-devel-3.10.0-693.el7.x86_64.rpm

# PHP 설치버전 확인
php -v

# 설치된 PHP Package 확인
rpm -qa | grep php

#Step 8. PHP-FPM 설정 파일 수정
# www.conf 설정파일을 아래와 같이 수정
vi /etc/php-fpm.d/www.conf
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock

user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

listen.acl_users = nginx

; shift + G 를 눌러서 마지막 라인으로 이동한 후 아래 줄 주석 제거
php_value[opcache.file_cache] = /var/lib/php/opcache  ; 주석만 제거

#Step 9. 환경파일 수정
vi /etc/nginx/nginx.conf
    access_log  /var/log/nginx/access.log  combined;

    default_type        application/octet-stream;

    #Prevent system info explosure
    server_tokens off;

    #Prevent Diectory Search
    autoindex off;

    server {
        listen 80;
        server_name  localhost;
        root  /var/www/html;

        location / {
            index index.php index.html index.htm;
        }

        location ~ \.php$ {
            # /var/run/php-fpm/php-fpm.sock 경로에 파일이 있는지 확인
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

# 저장하고 나온다.

CodeIgniter 를 이용하기 위한 세부 설정은 https://hbesthee.tistory.com/1632 참조해서 수정하면 좋을 듯...

 

# Step 10 : Configure PHP-FPM
vi /etc/php.ini
cgi.fix_pathinfo=0
short_open_tag = On
post_max_size = 30M  ;// 8M 으로 되어 있었음.
upload_max_filesize = 30M ;// 기본 2M 으로 되어 있었음

date.timezone ="Asia/Seoul"
expose_php=Off

;PHP에서 세션은 일단 생성 된 뒤에, 가비지 콜렉터 관리로직에 의해 소멸된다.
session.gc_divisor = 1
;이값이 100이면 1/100 즉 1%의 확률로 가비지콜렉션이 실행된다.
;1이면 정확하게 유효기간이 넘은 데이타가 삭제될 것이다.

# 저장하고 나온다.

#Step 11. 서비스 재시작
systemctl restart php-fpm
systemctl restart nginx
 
#Step 12. 서비스 자동시작 등록
systemctl enable php-fpm

### 시간 동기화
yum -y install rdate

crontab -e
00 00  * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w

### phpMyAdmin 설치 #####
chcon -R -t httpd_sys_rw_content_t /var/lib/php/session
chmod -R 777 /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session

cd /var/www/html
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip
unzip phpMyAdmin-5.0.4-all-languages.zip
chown -R nginx:nginx phpMyAdmin-5.0.4-all-languages
mv phpMyAdmin-5.0.4-all-languages pma
cd pma
cp -rp config.sample.inc.php  config.inc.php
vi config.inc.php
$cfg['blowfish_secret'] = 'qtdRoGmbc9{8IZr]0s)r$9b_JUnb{~Xz';
$cfg['Servers'][$i]['host'] = 'mysql DB 서버IP or localhost';
$cfg['Servers'][$i]['compress'] = true;
$cfg['TempDir'] = '/tmp';

 

기존 Apache 환경 구축을 Nginx 로 변경하는 걸 고려하기 위해서 테스트한 것인데, Virtual Host 설정 부분 등을 더 테스트해봐야 할 것 같다.

블로그 이미지

Link2Me

,
728x90

Web 기반 MySQL 관리 툴인 phpMyAdmin 낮은 버전이 CentOS 7 환경에서 동작되지 않아서 높은 버전을 받아서 설치했다.

 

설치 경로는 Web root 폴더에 설치했다. (5.1.0 버전으로 업데이트)

cd /var/www/html

wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.zip

unzip phpMyAdmin-5.1.0-all-languages.zip

chown -R apache:apache phpMyAdmin-5.1.0-all-languages

mv phpMyAdmin-5.1.0-all-languages pma

cd pma
cp -rp config.sample.inc.php  config.inc.php

 

# 환경 설정

vi config.inc.php

$cfg['blowfish_secret'] = 'qtdRoGmbcr]0s)r$9b_JUnb{~Xz'; // 임의의 값 설정
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['compress'] = true;
$cfg['TempDir'] = '/tmp';

 

MySQL 설치된 서버와 PHP가 설치된 서버가 다른 경우에는

$cfg['Servers'][$i]['host'] = '172.16.100.253'; // mysql DB 서버IP

 

 

 

한가지 더 해줘야 할 사항은 phpMyAdmin 으로 해킹을 시도하는 경우가 많기 때문에 특정 IP 주소에서만 접속하도록 설정하는 것이 좋다.

<?php
$remote_ip=$_SERVER['REMOTE_ADDR'];
$access_ip = array("192.168.1.14", "100.10.10.145");

if(!in_array($remote_ip,$access_ip)){
    echo $_SERVER['REMOTE_ADDR']; // 허용된 IP주소만 접속하기 위한 목적
    exit;
}
?>
 

 

index.php 파일 수정사항

* 5.1.0 버전의 index.php 파일 내용이 약간 달라졌으므로 그 부분만 고려해서 설정하면 된다.

 

위와 같이 ipFiltering.php 파일을 포함해서 허용된 IP주소외에는 접속할 수 없도록 하는 것이 안전하다.

 

'리눅스' 카테고리의 다른 글

CentOS7 PHP-FPM 제거시  (0) 2021.02.16
CentOS7 nginx + PHP 7.3 설치  (0) 2020.12.28
CentOS 7 glibc.i686 설치  (0) 2020.12.18
CentOS 7 kernel 확인 및 GRUB2 부팅순서 변경  (0) 2020.12.11
CentOS7 무료 SSL 인증서 설치  (0) 2020.11.24
블로그 이미지

Link2Me

,
728x90

yum install glibc.i686




yum 설치를 한 경우에는 아래 파일 다운로드해서 설치해도 설치가 안되더라.

의존성 관련 라이브러리 들이 같이 설치되어서....


# glibc.i686 rmp 다운로드
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/glibc-2.17-317.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/glibc-2.17-317.el7.i686.rpm
wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/nss-softokn-freebl-3.53.1-6.el7_9.x86_64.rpm

wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/nss-softokn-freebl-3.53.1-6.el7_9.i686.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/glibc-common-2.17-317.el7.x86_64.rpm


# rpm 설치
rpm -Uvh packagename.rpm

# rpm 삭제
rpm -e packagename.rpm

# 이미 설치된 패키지 질의
rpm -qa packagename.rpm

'리눅스' 카테고리의 다른 글

CentOS7 nginx + PHP 7.3 설치  (0) 2020.12.28
CentOS7 기반 phpMyAdmin 설치  (0) 2020.12.18
CentOS 7 kernel 확인 및 GRUB2 부팅순서 변경  (0) 2020.12.11
CentOS7 무료 SSL 인증서 설치  (0) 2020.11.24
PHP-FPM VirtualHost 설정  (0) 2020.11.03
블로그 이미지

Link2Me

,
728x90

CentOS 7 kernel 확인


# 설치된 커널 확인
sudo rpm -qa kernel
yum list kernel --show-duplicates
yum list all | grep kernel





#yum update할 때 kernel은 업데이트되지 않게 하기
vi /etc/yum.conf
exclude=kernel* centos-release* redhat-release*


kernel 은 업데이트되지 않게 설정하고 나서 yum -y update 로 업데이트 하고 나서 재부팅을 했다.


재부팅후에도 커널은 업데이트 안된 것을 확인했다.


현재 커널버전 확인

uname -r


# 현재 적용된 부팅 1순위 확인 (위의 커널버전과 다른 이유는 다른 리눅스에서 명령어 수행 : 테스트용 서버)
grub2-editenv list



# 부팅 가능 커널 리스트 확인
grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2


# 적용하고 싶은 커널 버전 적용
grub2-set-default "CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)"


시스템 재부팅 reboot 를 하고 나서 현재 커널 버전을 확인해보자.

uname -r


grub2-editenv list


#커널별 엔트리 및 인덱스 넘버 확인

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg


부팅 순서를 보면 0 순위가 1160 으로 나온다.

실제 커널을 확인하면 1127 버전으로 부팅된 것을 확인할 수 있는데도...


#커널 삭제

커널 삭제는 굳이 할 필요는 없다. 삭제되는 걸 테스트 삼아 해본 것 뿐이다.

커널명 확인 명령어 : rpm -qa kernel


커널 삭제 명령어 :  yum -y remove kernel-3.10.0-1127.el7.x86_64



'리눅스' 카테고리의 다른 글

CentOS7 기반 phpMyAdmin 설치  (0) 2020.12.18
CentOS 7 glibc.i686 설치  (0) 2020.12.18
CentOS7 무료 SSL 인증서 설치  (0) 2020.11.24
PHP-FPM VirtualHost 설정  (0) 2020.11.03
CentOS 원격서버로 파일 전송하기  (0) 2020.10.27
블로그 이미지

Link2Me

,
728x90

무료 인증서 설치하는 방법을 적어둔다.


Redirecting vhost in /etc/httpd/conf.d/default.conf to ssl vhost in /etc/httpd/conf.d/default-le-ssl.conf

자동으로 default.conf 에 설정한 VirtualHost 정보를 읽어서 default-le-ssl.conf 에 추가를 해주더라.



# 저장소 추가
yum -y install epel-release

yum -y install certbot

# 설치 : 웹서버가 Apache 인 경우
yum -y install python2-certbot-apache mod_ssl


# 설치하면
cd /etc/letsencrypt
cd /etc/httpd/conf.d/
default-le-ssl.conf
파일이 자동 생성된다.


cd /var/log/letsencrypt
에 로그가 쌓인다.



인증서 발급
# 자동으로 Redirecting vhost in /etc/httpd/conf.d/default.conf to ssl vhost in /etc/httpd/conf.d/default-le-ssl.conf
# VirtualHost 정보를 읽어서 설정을 해주더라.

# vi /etc/httpd/conf.d/default.conf 에 먼저 Virtual Host를 추가 등록해줘야 한다.

# 추가하면 자동으로 /etc/httpd/conf.d/default-le-ssl.conf 에 자동으로 추가된다.


# IP 주소가 변경된 곳에서 설치를 했더니 인증서가 유효하지 않다고 나온다.


certbot --apache -d abc.com
certbot --apache -d food.abc.com


# 재시작
systemctl restart httpd

systemctl status httpd

# ssl.conf 편집
cd /etc/httpd/conf.d/
vi /etc/httpd/conf.d/ssl.conf


#인증서 갱신
certbot renew

# 현재설치된 certbot 확인
certbot certificates

crontab -e

## 두달에 한번씩 인증서가 갱신되도록 작업 추가
0 0 2 * * /bin/bash -l -c 'certbot renew --quiet'

### 인증서 해지(Revoking certificates)
certbot revoke --cert-path /etc/letsencrypt/archive/${YOUR_DOMAIN}/cert1.pem

블로그 이미지

Link2Me

,
728x90

PHP-FPM 서버에서 VirtualHost 설정하는 예제이다.


vi /etc/httpd/conf/httpd.conf
# 여기서 할 것은 없다.

vi /etc/httpd/conf.d/default.conf
<VirtualHost *:80>
       DocumentRoot "/home/httpd/test/www/htdocs"
       ServerName abc.com
       ServerAlias test.abc.com

       <Directory "/home/httpd/test/www/htdocs">
        AllowOverride None
        Require all granted
       </Directory>

       ErrorLog /var/log/httpd/test-error.log
       CustomLog /var/log/httpd/test-access.log combined

       SuexecUserGroup apache apache

       <Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
               ProxySet disablereuse=off
        </Proxy>

       <FilesMatch \.php$>
               SetHandler proxy:fcgi://php-fpm
       </FilesMatch>
</VirtualHost>

<VirtualHost *:80>
       DocumentRoot "/home/httpd/food/www/htdocs"
       ServerName abc.com
       ServerAlias food.abc.com

       <Directory "/home/httpd/food/www/htdocs">
        AllowOverride None
        Require all granted
       </Directory>

       ErrorLog /var/log/httpd/food-error.log
       CustomLog /var/log/httpd/food-access.log combined

       SuexecUserGroup apache apache

       <Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
               ProxySet disablereuse=off
        </Proxy>

       <FilesMatch \.php$>
               SetHandler proxy:fcgi://php-fpm
       </FilesMatch>
</VirtualHost>
 


블로그 이미지

Link2Me

,
728x90

CentOS 원격 서버로 파일 전송하기


# 원격 서버 SSH 접속포트가 1922인 경우
scp -p 1922  root@10.10.122.135:/root/backup/


# 원격 서버 SSH 접속포트가 22인 경우

scp qrcode.tar.gz root@10.10.122.133:/var/www/



블로그 이미지

Link2Me

,
728x90

원하는 Server-Side 언어가 PHP, JSP, node.js 에 따라서 설치하는 사항이 조금씩 다르다.

CentOS7 에서 Apache Web서버와 PHP 7.3 을 설치하는 방법이다.

 

# 설치 확인
rpm -qa | grep httpd
rpm -qa | grep php
rpm -qa | grep MariaDB
rpm -qa | mysql

 

# PHP 설치여부 확인
rpm -qa | grep php
yum list installed | grep php

 

## 설치된 것 한꺼번에 지우기 (잘못 설치한 경우)
rpm -qa | grep httpd >list
rpm -qa | grep php >list

# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '' <list)

 

PHP 설치

#Step 1 – Prerequsitis
yum -y install epel-release

#Step 2 - Repository 설치
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm


#Step 3 - yum Utilities Package 설치
yum -y install yum-utils

#Step 4 – Install PHP and PHP-FPM
# Disable repo for PHP 5.4
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php73

yum -y install --enablerepo=remi-php73 httpd mod_ssl php php-zip php-fpm php-common php-opcache php-curl
yum -y install --enablerepo=remi-php73 php-devel php-gd php-imap php-ldap php-mysql php-mysqlnd php-pdo
yum -y install --enablerepo=remi-php73 php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring   
yum -y install --enablerepo=remi-php73 php-mcrypt php-soap php-tidy curl curl-devel php-libwww-perl
yum -y install --enablerepo=remi-php73 ImageMagick libxml2 libmxl2-devel mod_fcgid php-cli httpd-devel    
yum -y install --enablerepo=remi-php73 php-intl php-pspell wget php-openssl unzip mc git     

# PHP 설치버전 확인
php -v

 

# 설치된 PHP Package 확인
rpm -qa | grep php

 

## 보안설정
sudo chmod 640 /etc/httpd/conf/httpd.conf
sudo chown root:root /etc/httpd/conf/httpd.conf
sudo chmod 640 /etc/php.ini
sudo chown root:root /etc/php.ini

sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html

 

#Step 4 httpd.conf 파일 수정

vi /etc/httpd/conf/httpd.conf
ServerName localhost

# 불필요한 Methods 차단 설정 : method 허용은 GET, POST 만 허용
# Directory 태그를 사용하면 Directory 별로 모두 제한을 걸어줘야 하므로
# URL pattern 을 이용하여 일괄적으로 제한하는 방법
<Location />
   <LimitExcept GET POST>
       Order deny,allow
       Deny from all
   </LimitExcept>
</Location>

<Directory "/var/www/html">
    Options +FollowSymLinks -Indexes
    AllowOverride All
    Require all granted
    <LimitExcept GET POST>
      Order deny,allow
      Deny from all
    </LimitExcept>
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

# 서버 정보 노출 방지
ServerTokens Prod
ServerSignature Off 

# Trace Method 처리
TraceEnable off

ErrorDocument 400 /error.html
ErrorDocument 401 /error.html
ErrorDocument 402 /error.html
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 405 /error.html
ErrorDocument 408 /error.html
ErrorDocument 500 /error.html
ErrorDocument 501 /error.html
ErrorDocument 502 /error.html
ErrorDocument 503 /error.html

저장하고 나온다.

# Apache HTTPOXY 취약점 방지
echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf

 

# Step 5 : Configure PHP-FPM

vi /etc/php.ini
cgi.fix_pathinfo=0
short_open_tag = On
post_max_size = 60M  ;// 8M 으로 되어 있었음.
upload_max_filesize = 50M ;// 기본 2M 으로 되어 있었음

;PHP 버전정보 노출 방지
expose_php=Off

date.timezone ="Asia/Seoul"

;PHP에서 세션은 일단 생성 된 뒤에, 가비지 콜렉터 관리로직에 의해 소멸된다.
session.gc_probability = 1
session.gc_divisor = 1
;이값이 100이면 1/100 즉 1%의 확률로 가비지콜렉션이 실행된다.
;1이면 정확하게 유효기간이 넘은 데이타가 삭제될 것이다.
session.gc_maxlifetime = 3600

;세션과 쿠키를 동시에 사용
session.use_cookies = 1

;PHP 시작과 동시에 세션 사용(1), 사용하지 않음(0)
session.auto_start = 0

# 저장하고 나온다.
# 반드시 추가구현해야 문제없이 동작한다.
cd /var/www/html/
vi .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{THE_REQUEST} !^(POST|GET)\ /.*\ HTTP/1\.1$
RewriteRule .* - [R=405,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ error.html?/$1 [QSA,PT,L]
</IfModule>

 

### 시간 동기화
yum -y install rdate

crontab -e
00 00  * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w

#크론탭 재시작
service crond restart

 

#crontab 설치 여부 확인
ps -ef | grep cron

# 서비스 활성화
systemctl enable httpd

# 서비스 시작
systemctl start httpd

systemctl stop httpd
systemctl restart httpd
systemctl status httpd

 

위 설치 스크립트에서 추가 설정을 하면 PHP-FPM 설정이 가능하다. 그 내용은 생략한다.

이것으로 윈도우10 에서 CentOS7 을 Virtual Box로 설치하여 Web서버를 운영하는 방법에 대한 설명을 마친다.

블로그 이미지

Link2Me

,
728x90

CentOS7 환경에서 MariaDB 를 yum 설치하는 방법이다.

root 권한에서 설치하는 것이라서 복사하여 그대로 붙여넣기 편하게 만들었다.

 

################################
##### MariaDB 10.3 버전 설치 #####
################################
 
vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
 
 
# 위 사항을 그대로 붙여넣기하고 저장하고 나온다.
 
# MariaDB Sever & Client 설치
yum -y install MariaDB-server MariaDB-client
 
# 서버 부팅시 자동 실행 설정
systemctl enable mariadb
 
# mariadb 시작 (둘 중 하나 실행)
systemctl start mariadb
service mariadb start
 
# mariadb 상태 확인(둘 중 하나 실행)
systemctl status mariadb
service mariadb status
 
# Maria DB 보안 설정하기
mysql_secure_installation
 
아무것도 입력하지 않고 엔터
Root 비밀번호 설정 : Y 입력 후 엔터
Root 비밀번호 입력
Anonymous User 삭제 : Y 입력후 엔터
원격 root 로그인 불가 설정 : Y 입력후 엔터
Test DB 삭제 : Y 입력후 엔터
변경사항 반영 : Y 입력 후 엔터
 
# MariaDB 버전 확인
mysql -uroot -p
use mysql
select version();
 
# 서버 설정 파일 변경
vi /etc/my.cnf.d/server.cnf
[mysqld]
init_connect="SET collation_connection = utf8_general_ci"  
init_connect="SET NAMES utf8"  
character-set-server = utf8
collation-server = utf8_general_ci
 
# Dump 파일에도 동일한 Character Set 적용
vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
 
# MariaDB 실행
systemctl restart mariadb
systemctl status mariadb
mysql -u root -p
status
quit 

 

 

# mariadb 상태 확인

 

 

# Maria DB 보안 설정하기
mysql_secure_installation

 

# 서버 설정 파일 변경
vi /etc/my.cnf.d/server.cnf

 

 

# Dump 파일에도 동일한 Character Set 적용
vi /etc/my.cnf.d/mysql-clients.cnf

 

 

 

 

설정확인

mysql -uroot -p
패스워드 입력

 

show variables like 'c%';

 

 

 

Apache 와 PHP 를 설치 방법 https://link2me.tistory.com/1890 참조

블로그 이미지

Link2Me

,
728x90

CentOS7 설치가 끝났으면 이제 Network 환경 설정을 static으로 변경해보자.


준비물

1. kitty 프로그램(SSH 접속 프로그램)

2. IP TIME 공유기

    - 공유기 없이 직접 초고속 인터넷에 접속된 경우에는 불필요.

    - 공유기는 Private IP 주소를 Public IP 주소로 변환하는 장치(NAT:Network Address Translation)


kitty 프로그램 다운로드

https://www.fosshub.com/KiTTY.html 에서 portable 버전 파일을 다운로드 한다.



다운로드 받은 포터블 파일을 적당한 위치에 복사/이동해서 실행시킨다.



글꼴 크기를 적절하게 조정하기 위해 8번을 클릭해서 처리한다.




자동 접속을 위해 root 비밀번호를 설정한다.






먼저 ip addr 를 실행한다.



vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 를 하고 내용을 확인하면

DHCP 로 설정된 것을 확인할 수 있다.

DHCP 라는 것은 접속할 때마다 IP주소가 변경될 수 있다는 의미다.

IP주소가 변경되지 않도록 하려면 static으로 변경해야 한다.

공유기 뒷단의 Private IP address 부분이 변경되지 않도록 하기 위함이지, 초고속 인터넷 IP주소가 변경되지 않도록 한다는 의미가 아니다.

IP TIME 공유기를 상시 물려두면 거의 Public IP address가 변경되지 않을 수도 있다.



아래와 같이 BOOTPROTO=none 으로 변경하고 IP주소, Gateway 추가, DNS 를 추가하고 저장한다.

IPADDR=192.168.1.20
PREFIX=24
GATEWAY=192.168.1.100
DNS1=168.126.63.1
DNS2=168.126.63.2


# network 재시작
systemctl restart network


네트워크를 고정(static) IP주소로 변경했다.


이제 외부에서도 홈페이지 접속 및 SSH 접속을 위한 IP TIME 공유기를 설정하자.

IP TIME 공유기 URL 은 위에서 자동으로 설정한 Gateway IP 주소다.

admin 과 비밀번호를 입력하고 나면 아래 화면이 보일 것이다. 관리도구를 클릭한다.

포트포워딩 설정을 해준다.

홈페이지 접속을 위해서 http가 사용하는 포트 80 인데, 외부에서 접속할 때에는 8080 으로 접속하도록 포트를 지정했다. 기존에 사용하던 리눅스 전용서버가 있기 때문에 윈도우10에 설치한 CentOS 기반 Web서버 접속은 이렇게 하도록 설정했다.

외부에서 SSH 접속을 위한 포트번호도 추가했다.



SSH에 사용하는 root 패스워드는 강력하게 15자리 이상으로 하는 게 좋다.

보통 패스워드를 10자리 또는 8자리로 설정하는데 15자리 이상으로 설정하면 패스워드 알아내는 건 거의 어렵다고 볼 수 있기 때문이다.


방화벽 설정

기본 방화벽 설정은 SSH, HTTP(80), HTTPS(443), MariaDB(3306) 만 추가해주면 된다.

# 방화벽 설치
yum -y install firewalld

# 방화벽 확인
firewall-cmd --list-all

# http/https 및 port 방화벽 오픈
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-port=3306/tcp

# 방화벽 적용 및 확인
firewall-cmd --reload
firewall-cmd --list-all




MariaDB 설치 방법 : https://link2me.tistory.com/1889 참조

블로그 이미지

Link2Me

,
728x90

윈도우 10에 Virtual Box를 설치하고 CentOS7 설치를 위한 준비가 끝났으면 이제 CentOS7 을 설치해보자.

 

 

 

 

 

 

 

※ 어댑터에 브리지 : Windows10 PC가 1개의 IP주소를 가지고, VirtualBox 도 1개의 IP주소를 별도로 갖는 방식

NAT : Windows 10 이 1개의 IP주소를 가지고 그 IP주소에 별도의 사설 IP주소를 할당하여 사용

https://link2me.tistory.com/2061 를 참조하면 NAT 방식으로 사용할 시 설정 방법이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

재부팅을 하고 나면 재시작을 하고 나서 다음과 같이 로그인 창이 나온다.

 

 

 

yum -y update 를 해주면 아래와 같이 실행되면 네트워크가 정상동작된다는 걸 확인할 수 있다.

 

 

여기까지가 CentOS7 기본 설치를 마친 단계이다.

 

Windows 10 에 CentOS7 네트워크 설정 - 4 https://link2me.tistory.com/1888

 

블로그 이미지

Link2Me

,
728x90

Virual Box 실행화면에서 몇가지 기본적인 사항을 설정하고 나서 CentOS7 설치를 위한 준비 단계를 살펴보자.


환경설정 → 일반 → 가상머신 폴더를 지정한다. 즉 CentOS7 설치할 폴더를 지정한다.


호스트 키 조합을 설정하는 것은 윈도우와 리눅스에서 마우스를 전환하기 위한 키라고 보면 된다.



이제 CentOS7 설치를 해보자.







공간 크기는 16GB로 설정했다. 8GB를 자동으로 잡아주더라.



여기까지 하고 나면 CentOS7 설치 파일을 지정하고 설치를 시작할 준비단계를 마친 것이다.


Windows 10 에 CentOS7 설치 하기 - 3 https://link2me.tistory.com/1887

블로그 이미지

Link2Me

,
728x90

윈도우10이 설치된 PC/노트북에 CentOS7 을 설치하는 방법이다.


준비물

1. CentOS7 ISO 파일

2. Virtual Box 파일

3. 설치공간 16GB : default 8GB 로 설정해도 된다.

4. IP TIME 공유기 : 사설 IP 여러개를 사용하면서 공인(Public) IP 로 변환하는 장치

    공유기가 있으면 Port Forwarding 기능을 이용하여 외부 접속이 가능하다.

    https://link2me.tistory.com/1449 참조



CentOS7 설치파일 다운로드 안내

1. CentOS7 ISO 파일 : https://www.centos.org/download/ 에서 파일을 다운로드 한다.

2번을 누르면 http://mirror.kakao.com/centos/7.8.2003/isos/x86_64/ 와 같은 파일 다운로드 경로로 변경된다.

토렌토 파일을 받아서 토렌토를 이용하여 파일 다운로드를 하거나 직접 다운로드를 한다.


다운받은 파일을 적당한 폴더에 이동시킨다.


Virtual Box 다운로드 및 설치

1. https://www.virtualbox.org/wiki/Downloads 에서 파일을 다운로드 한다.



2. 다운로드 받은 파일을 실행한다.


3. Virtual Box 설치 과정



적당한 폴더를 선택하고 설치해도 되고 ProgramFiles 에 default 설치를 해도 된다.






여기까지 하면 Virtual Box 설치는 완료되었다.


설치후 Virtual Box 실행화면



Windows 10 에 CentOS7 설치 환경 만들기 - 2  https://link2me.tistory.com/1886

'리눅스' 카테고리의 다른 글

Windows 10 에 CentOS7 설치 하기 - 3  (0) 2020.10.03
Windows 10 에 CentOS7 설치 환경 만들기 - 2  (0) 2020.10.03
CentOS7 SSH 포트 변경  (0) 2020.09.28
CentOS7 PHP-FPM yum 설치  (0) 2020.09.16
MariaDB 깨졌을 때 복구 및 백업  (0) 2020.09.02
블로그 이미지

Link2Me

,
728x90

SSH 포트 변경을 했더니 잘 안된다.

아래와 같이 하면 100% 될 것이다.


# 방화벽 확인
firewall-cmd --list-all

# 방화벽 포트 추가
firewall-cmd --permanent --zone=public --add-port=1922/tcp
firewall-cmd --permanent --zone=public --add-service=ssh

# SELINUX는 ssh에 포트 22 만 허용하므로 아래 한줄을 실행한다.
yum -y install policycoreutils-python
semanage port -a -t ssh_port_t -p tcp 1922

# SSH 포트 변경
vi /etc//ssh/sshd_config
Port 1922

# 방화벽 포트 제거
firewall-cmd --permanent --remove-port=1922/tcp

# 방화벽 재실행
firewall-cmd --reload

# Restart SSHD service
systemctl restart sshd.service

# 포트 확인
ss -tnlp|grep ssh


# 에러 로그 확인
cat /var/log/secure

블로그 이미지

Link2Me

,
728x90

내 마음대로 지우고 나서 재설치를 하려니까 제대로 설치가 안된다.

그래서 조금이나마 개념 이해하려고 적어둔다.

 

 

 

설치하기 전 상태 확인을 위해서

cd /etc/yum.repos.d

 

 

 

#Step 1 – Prerequsitis
yum -y install epel-release

 

 

#Step 2 Repository 설치
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

 

 

#Step 3 yum Utilities Package 설치
yum -y install yum-utils

 

#Step 4 – Disable repo for PHP 5.4
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php73

 

#Step 5 – Install PHP and PHP-FPM
yum -y install --enablerepo=remi-php73 httpd mod_ssl php php-zip php-fpm php-common php-opcache php-curl php-devel php-gd
yum -y install --enablerepo=remi-php73 php-imap php-ldap php-mysql php-mysqlnd php-pdo php-odbc php-pear php-xml php-xmlrpc php-pecl-apc   
yum -y install --enablerepo=remi-php73 php-mbstring php-mcrypt php-soap php-tidy curl curl-devel php-libwww-perl ImageMagick libxml2 libmxl2-devel    
yum -y install --enablerepo=remi-php73 mod_fcgid php-cli httpd-devel php-intl php-imagick php-pspell wget php-openssl    
yum -y install --enablerepo=remi-php73 unzip git mc

 

# PHP 설치버전 확인
php -v

 

# 설치된 PHP Package 확인
rpm -qa | grep php

 

#Step 6 PHP-FPM 설정
# PHP-FPM 설정을 위하여 2개의 디렉토리 생성
mkdir /etc/php-fpm.d/sites-enabled
mkdir /etc/php-fpm.d/sites-available

#Step 7
PHP-FPM 설정 파일 아래와 같이 수정
vi /etc/php-fpm.conf
;include=/etc/php-fpm.d/*.conf
include=/etc/php-fpm.d/sites-enabled/*.conf

#Step 8
PHP-FPM 기본 웹 설정 파일 이동
mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/sites-available

#Step 9
sites-enabled 폴더에 www.conf 링크 생성
ln -s /etc/php-fpm.d/sites-available/www.conf /etc/php-fpm.d/sites-enabled/www.conf

#Step 10
PHP-FPM 소켓 통신을 위한 폴더 생성
mkdir /var/run/php-fpm

#Step 11
www.conf 설정파일을 아래와 같이 수정
vi /etc/php-fpm.d/sites-available/www.conf
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/default.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660
php_value[opcache.file_cache] = /var/lib/php/opcache  ; 주석만 제거

#Step 12 – Apache VirtualHost 구성
vi /etc/httpd/conf.d/default.conf
# 아래 붙여넣기 한다.
<VirtualHost _default_:80>
       DocumentRoot "/var/www/html"

       ErrorLog logs/default-error_log
       LogLevel warn
       TransferLog logs/default-access_log
       CustomLog logs/default-request_log "%t %h %x %x \"%r\" %b"

       SuexecUserGroup apache apache

       <Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
               ProxySet disablereuse=off
        </Proxy>

       <FilesMatch \.php$>
               SetHandler proxy:fcgi://php-fpm
       </FilesMatch>
</VirtualHost>

 

 

#Step 13 Apache SSL 설정 파일(ssl.conf) 수정
vi /etc/httpd/conf.d/ssl.conf
# shift + g 눌러서 파일의 맨 아래로 이동한다.
# 설정파일의 맨 끝 </VirtualHost> 앞에 아래 내용 추가
       SuexecUserGroup apache apache

       <Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
               ProxySet disablereuse=off
        </Proxy>

       <FilesMatch \.php$>
               SetHandler proxy:fcgi://php-fpm
       </FilesMatch>

 

 

#Step 14 보안설정
sudo chmod 640 /etc/httpd/conf/httpd.conf
sudo chown root:root /etc/httpd/conf/httpd.conf
sudo chmod 640 /etc/php.ini
sudo chown root:root /etc/php.ini

sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html

 

#Step 15 httpd.conf 파일 수정
vi /etc/httpd/conf/httpd.conf
ServerName localhost
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

<Directory "/var/www/html">
    Options +FollowSymLinks -Indexes
    AllowOverride All
    Require all granted
    <LimitExcept GET POST>
      Order deny,allow
      Deny from all
    </LimitExcept>
</Directory>

#Step 16
Apache HTTPOXY 취약점 방지
echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf

 

# Step 17 Configure PHP-FPM
vi /etc/php.ini
cgi.fix_pathinfo=0
short_open_tag = On
post_max_size = 60M  ; // 8M 으로 되어 있었음.
memory_limit = 128M
upload_max_filesize = 50M ; // 기본 2M 으로 되어 있었음
allow_url_fopen = On
;PHP Excel Libray 설치가 안되는 현상이 있어서 On으로 변경함.
date.timezone ="Asia/Seoul"

 

;PHP 버전정보 노출 방지
expose_php=Off


;PHP에서 세션은 일단 생성 된 뒤에, 가비지 콜렉터 관리로직에 의해 소멸된다.
session.gc_probability = 1
session.gc_divisor = 1
;이값이 100이면 1/100 즉 1%의 확률로 가비지콜렉션이 실행된다.
;1이면 정확하게 유효기간이 넘은 데이타가 삭제될 것이다.
session.gc_maxlifetime = 3600

 

 

만약 session 폴더를 다르게 지정했다면....

session.save_path = /tmp/phpsession

mkdir /tmp/phpsession
chown apache.apache /tmp/phpsession
chmod 750 /tmp/phpsession

 

#Step 18 Verify PHP-FPM version
/usr/sbin/php-fpm -version

 

 

#Step 19 시스템 부팅시 자동실행 설정
systemctl enable php-fpm
systemctl enable httpd

#Step 20
설치된 PHP-FPM 실행/종료
systemctl start php-fpm
systemctl start httpd

systemctl stop php-fpm
systemctl stop httpd

systemctl restart php-fpm
systemctl restart httpd

systemctl status php-fpm
systemctl status httpd

 

 

############################
##### CentOS7 방화벽 설정 #####
############################
# 방화벽 설치
yum -y install firewalld

# 기본 설정은 /usr/lib/firewalld/ 에 위치
# 방화벽 데몬 시작
systemctl start firewalld

# 서버 부팅 시 firewalld 데몬 자동 시작 설정
systemctl enable firewalld


# 방화벽 상태(실행여부) 확인
systemctl status firewalld
firewall-cmd --state

# 방화벽 확인
firewall-cmd --list-all

# 서비스 추가
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=mysql

# 서비스 제거
firewall-cmd --permanent --remove-service=http
firewall-cmd --permanent --remove-service=http

# 포트 등록
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=2222/tcp

# 포트 삭제
firewall-cmd --permanent --remove-port=9000/tcp
firewall-cmd --permanent --remove-port=8080/tcp

# 방화벽 적용 및 확인
firewall-cmd --reload
firewall-cmd --list-all

 

#### PHP Excel Library 설치를 위한 Composer 설치 #####

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer -V
export COMPOSER_ALLOW_SUPERUSER=1
composer -V
echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc
cat ~/.bashrc | grep export

cd /var/www/html/
composer require phpoffice/phpspreadsheet

 

wget https://sourceforge.net/projects/tcpdf/files/tcpdf_6_3_2.zip

 

###### TCPDF 설치 ############
cd /usr/share/php
wget https://sourceforge.net/projects/tcpdf/files/tcpdf_6_3_2.zip
unzip tcpdf_6_3_2.zip

# 나눔폰트 설치 방법
cd /usr/share/fonts/
wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip

unzip NanumFont_TTF_ALL.zip -d NanumFont
cd /usr/share/php/tcpdf/tools/
ls /usr/share/fonts/NanumFont/*
ls /usr/share/fonts/NanumFont/* | xargs -I TTF php tcpdf_addfont.php -i TTF
ll /usr/share/php/tcpdf/fonts/ | grep nanum

블로그 이미지

Link2Me

,
728x90

원인을 정확하게 모르겠는데 MariaDB 테이블이 깨진 증상으로 인해서 평소 백업 스크립트를 잘 만들어둬야겠다는 생각이 들었다.


### DB 콜드 백업
# which mysql 을 하면 mariadb가 설치된 경로를 반환한다.
cd /var/lib
tar cvf mysqldb_20200902.tar ./mysql

# 콜드 백업 복구
rm -rf mysql/
tar xvf mysqldb_20200902.tar
systemctl restart mariadb

# Mysql DB 가 깨졌을때 복구 방법
mysql -uroot -p
check table 테이블명;
analyze table 테이블명;
repair table 테이블명;
check table 테이블명;


# 위 방법으로 해결이 안될 경우
각 테이블 하나에 3개의 파일이 생성되어 해당 테이블의 데이터가 실제로 저장
*.MYD : 실제 데이터가 저장되는 데이터파일
*.MYI : 테이블의 인덱스 정보를 저장하는 인덱스 파일
*.frm : 테이블의 구조가 저장되는 스키마파일

systemctl stop mariadb
또는
ps -ef | grep mysqld
kill -9 프로세스번호

cd /var/lib/mysql/
# 테이블 파일이 있는 디렉토리까지 이동하면 *.MYI 된 파일이 보인다.
# 이상유무 점검 방법
myisamchk -s 테이블명.MYI
myisamchk -v 테이블명.MYI
myisamchk -i 테이블명.MYI

# 테이블 상태 점검
myisamchk -ev 테이블명.MYI
# 안전모드로 복구
myisamchk -o 테이블명.MYI
# 테이블 파일 복구
myisamchk -r 테이블명.MYI



블로그 이미지

Link2Me

,
728x90

CentOS 7 에서 Apache 와 PHP 7.3 yum 설치하고 MariaDB 10.3 을 yum 설치하는 스크립트를 적어둔다.


################################
##### MariaDB 10.3 버전 설치 #####
################################

vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.3 CentOS repository list - created 2019-01-13 00:47 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

yum -y install MariaDB-server MariaDB-client

# mariadb 부팅 시 자동 시작 설정
systemctl enable mariadb

# mariadb 시작 (둘 중 하나 실행)
systemctl start mariadb
service mariadb start

# mariadb 상태 확인
service mariadb status

# Maria DB 보안 설정하기
mysql_secure_installation
비밀번호 설정

vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8
collation-server     = utf8_general_ci

service mariadb restart
mysql -u root -p
status
quit

############################
### root 패스워드 분실 복구 ####
############################
# 서비스 정지
systemctl stop mariadb

# mariadb 안전모드 실행
sudo /usr/bin/mysqld_safe --skip-grant &

# 패스워드 변경
mysql -uroot mysql
update user set password=password('변경할비밀번호') where user='root';
flush privileges;
exit;

# 접속 테스트
mysql -uroot -p
비밀번호 입력

# 서비스 재시작
systemctl restart mariadb 

#############################################
######### CentOS 7 버전 확인 ##################
#############################################
cat /etc/redhat-release

## 현재 설치된 PHP 버전 확인
yum list php

yum install expat-devel

## 설치확인
yum list installed | grep httpd
yum list installed | grep php
yum list installed | grep MariaDB

# 설치 확인
rpm -qa | grep httpd
rpm -qa | grep php
rpm -qa | grep MariaDB

## 설치된 것 한꺼번에 지우기
rpm -qa | grep php >list

# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '{print $1}' <list)

# 삭제 방법 : yum autoremove [package_name]
yum remove -y vsftpd


# Remi 저장소를 설치하고 활성화한다.
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

# yum 저장소와 패키지를 관리
yum -y install epel-release yum-utils

# Disable repo for PHP 5.4
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php73

# Install PHP 7.3 on CentOS 7
yum install -y --enablerepo=remi-php73 httpd php php-cli php-common php-devel php-ldap php-mbstring php-mcrypt php-mysqlnd
yum install -y --enablerepo=remi-php73 php-pdo php-pgsql php-sqlite php-process php-snmp php-soap php-libxml php-xml php-pear php-gd
yum install -y --enablerepo=remi-php73 php-fpm php-dom php-simplexml php-ssh2 php-xmlreader php-curl php-date php-exif php-filter
yum install -y --enablerepo=remi-php73 php-ftp php-hash php-iconv php-imagick php-json php-openssl php-pcre php-posix php-sockets
yum install -y --enablerepo=remi-php73 php-spl php-tokenizer php-zlib php-gmp php-Icinga php-intl
yum install -y --enablerepo=remi-php73 php-pecl-zip zip unzip php-zip

# PHP 버전 확인
php -v

# Apache 버전 확인
httpd -v

# 서비스 활성화
systemctl enable httpd

# 서비스 시작
systemctl start httpd

systemctl stop httpd
systemctl restart httpd
systemctl status httpd

# openssl 버전 확인
openssl version

## httpd.conf 파일 수정
vi /etc/httpd/conf/httpd.conf
ServerName localhost
User nobody
Group nobody
<IfModule dir_module>
    DirectoryIndex index.html index.php index.jsp
</IfModule>

<Directory "/var/www/html">
    Options IncludesNoExec
    AllowOverride None
    Require all granted
</Directory>


vi /etc/php.ini
short_open_tag = On
post_max_size = 60M  ;// 8M 으로 되어 있었음.
memory_limit = 128M
upload_max_filesize = 50M ;// 기본 2M 으로 되어 있었음

## 보안설정
sudo chmod 640 /etc/httpd/conf/httpd.conf
sudo chown root:root /etc/httpd/conf/httpd.conf
sudo chmod 640 /etc/php.ini
sudo chown root:root /etc/php.ini

sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html

# 포트 활성화 여부 확인
iptables -L

# 열린포트 확인
netstat -tnlp

### 시간 동기화
yum -y install rdate

crontab -e
00 00  * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w

# mc 설치
yum -y install mc
 


블로그 이미지

Link2Me

,
728x90


이번에 구성해 본 건 위 그림의 1번 설정 내역이다.

Apache 서버에서 Reverse Proxy를 설정하여 사설망 PHP-FPM이 설정된 서버로 포워딩을 해서 처리한다.

포트를 9000 번으로 변경해서 테스트를 해보고 싶은데 PHP-FPM 설정 방법을 완벽하게 이해하지 못했다.

설정을 제대로 이해하고 한 것인지는 모르겠는데 동작은 이상없이 잘 된다는 건 확인했다.


#####################################
### [Apache] Reverse Proxy 설정 ###
#####################################

# 설치 확인
rpm -qa | grep httpd

## 설치된 것 한꺼번에 지우기
rpm -qa | grep httpd >list

# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
sudo yum -y remove $(awk '{print $1}' <list)

#Step 1 – Install Apache2
yum -y install httpd

#Step 2 httpd.conf 파일 수정
vi /etc/httpd/conf/httpd.conf
ServerName localhost
User nobody
Group nobody
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

<Directory "/var/www/html">
    Options IncludesNoExec
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>


#Step 3 Virtual Host 설정

# Reverse Proxy : 외부에서 접속했을 때 내부서버나 다른 곳으로 연결해 주는 방법
vi /etc/httpd/conf.d/default-site.conf
<VirtualHost *:80>
    ProxyPreserveHost On

    ProxyPass / http://172.16.100.252:80/
    ProxyPassReverse / http://172.16.100.252:80/
</VirtualHost>

## 보안설정
chmod 640 /etc/httpd/conf/httpd.conf
chown root:root /etc/httpd/conf/httpd.conf

# 포트 활성화 여부 확인
iptables -L

# Apache 서버의 로그 위치
cat /var/log/httpd/error_log

# 서비스 활성화
systemctl enable httpd

# 서비스 시작
systemctl start httpd

systemctl stop httpd
systemctl restart httpd
systemctl status httpd



인터넷망에서 사용할 수 없는 IP 대역이

10.X.X.X

172.16.X.X

192.168.X.X

이다.

사설망 접속은 NAT(Network Address Translation) 처리를 해주는 장치가 있어야 한다.

IP Time 공유기, Router, Switch, 방화벽 등이 이런 기능을 수행한다.



블로그 이미지

Link2Me

,