본문 바로가기

컴퓨터/노트북/인터넷

IT 컴퓨터 기기를 좋아하는 사람들의 모임방

단축키

Prev이전 문서

Next다음 문서

수정 삭제

단축키

Prev이전 문서

Next다음 문서

수정 삭제
Extra Form

전제 조건

이 자습서에서는 두 개의 서버를 사용하여 세션 처리를 구성합니다. 따라하려면 다음이 필요합니다.

  • Ubuntu 16.04 에서 LAMP 또는 LEMP 를 실행하는 PHP 웹 서버 이 서버를 웹이라고 합니다.
  • Redis가 설치 될 두 번째 깨끗한 Ubuntu 16.04 서버. 이 서버를 redis라고 합니다.

sudo이러한 각 서버에 구성된 권한이있는 루트가 아닌 사용자가 있어야 합니다. 또한 각 서버에 기본 방화벽이 실행되고 있다고 가정합니다. 두 서버에서 Ubuntu 16.04 초기 서버 설정 가이드 에 따라 이러한 요구 사항을 모두 설정할 수 있습니다 .

 

1 단계 : Redis 서버 및 클라이언트 소프트웨어 설치

첫 번째 단계는 두 컴퓨터 모두에 필요한 소프트웨어를 설치하는 것입니다. 우리의 redis 머신에는 Redis 서버가 필요합니다. 우리에  기계, 우리는 세션 처리 및 테스트하기위한 레디 스 명령 행 클라이언트에 대한 레디 스 PHP 확장을 설치합니다.

Redis 서버 설치

가장 먼저해야 할 일은 Redis 시스템 에서 Redis 서버를 실행하는 것 입니다.

Chris Lea가 제공하는 신뢰할 수있는 PPA 저장소와 함께 일반 Ubuntu 패키지 관리자를 사용할 것입니다. 이것은 Redis의 최신 안정 버전을 확보하는 데 필요합니다.

참고 : 일반적인 보안 조언으로 신뢰할 수있는 소스의 PPA 만 사용해야합니다.

먼저 다음을 실행하여 PPA 저장소를 추가합니다.

  • sudo apt-add-repository ppa:chris-lea/redis-server
 

ENTER확인하려면 누릅니다 .

다음으로 패키지 색인을 업데이트하고 다음을 입력하여 Redis 서버를 설치합니다.

  • sudo apt-get update 
  • sudo apt-get install redis-server

이제 Redis가 서버에 설치되고 실행되어야합니다. 다음을 입력하여 서비스가 실행 중이고 연결을 수락하는지 테스트합니다.

redis-cli ping 
 
Redis server output

PONG

포트 6379의 localhost 에서 실행중인 Redis 인스턴스에 연결됩니다 응답으로 PONG 을 받아야합니다 .

Redis 클라이언트 및 PHP 확장 설치

그런 다음  서버 에 Redis 명령 줄 클라이언트와 Redis PHP 확장을 설치 합니다. 연결 및 인증을 쉽게 테스트하기 위해 명령 줄 클라이언트를 사용할 것입니다. 세션 데이터를 저장하기 위해 PHP 확장을 사용할 것입니다.

다음을 입력하여 로컬 패키지 색인을 업데이트하고  서버에 소프트웨어를 설치합니다 .

  • sudo apt-get update 
  • sudo apt-get install redis-tools php-redis
 

이제 redis-cli테스트 할 서버에 대한 액세스 권한이 아직 없지만 도구에 대한 액세스 권한이 있어야합니다.

2 단계 : 외부 연결을 허용하도록 Redis 구성

기본적으로 Redis는에서의 연결 만 허용하므로 localhost기본적으로 Redis가 설치된 서버 내부에서만 액세스 할 수 있습니다. 다른 서버에서 오는 연결을 허용하려면이 구성을 변경해야합니다.

Redis는 기본 암호화 옵션을 제공하지 않으며 신뢰할 수있는 피어의 격리 된 네트워크에 배포되었다고 가정합니다. 즉, 외부 연결을 안전하게 허용하려면 두 서버가 모두 격리 된 네트워크에 있어야하거나 다른 방식으로 두 서버 간의 트래픽을 보호해야합니다.

Redis가 격리 된 네트워크에 배포 된 경우…

서버가 격리 된 네트워크에서 작동하는 경우 격리 된 네트워크 IP 주소에 바인딩하도록 Redis의 구성 파일을 조정하기 만하면됩니다.

는에 레디 스 서버, 백업을하고, 레디 스 구성 파일을 엽니 다

  • sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
  •  sudo nano /etc/redis/redis.conf
 

bind줄을 찾아 Redis 서버의 격리 된 네트워크 IP 주소를 추가합니다.

/etc/redis/redis.conf
bind 127.0.0.1 isolated_IP_address
 

파일을 저장하고 닫습니다. 다음을 입력하여 서비스를 다시 시작합니다.

sudo systemctl restart redis-server.service 
 

Redis 포트에 대한 액세스를 엽니 다.

sudo ufw allow 6379 
 

이제 Redis는 격리 된 네트워크에서 연결을 수락 할 수 있습니다.

Redis가 격리 된 네트워크에 배포되지 않은 경우…

격리되지 않았거나 제어 할 수없는 네트워크의 경우 다른 수단을 통해 트래픽을 보호해야합니다. 다음을 포함하여 Redis 서버에 대한 트래픽을 보호하는 많은 옵션이 있습니다.

  • stunnel을 사용한 터널링 : redis 서버 에 들어오는 터널을 설정 하고  서버 에 나가는 터널을 설정해야 합니다. 웹 서버는 원격 Redis 서비스와 통신하기 위해 로컬 포트에 연결됩니다.
  • 스 파이핑 된 터널링 :  서버가 spiped클라이언트 시스템으로 작동해야합니다 각 서버에 systemd 단위 파일을 만들어야합니다. 웹 서버는 원격 Redis 서비스와 통신하기 위해 로컬 포트에 연결됩니다.
  • PeerVPN으로 VPN 설정 : 두 서버 모두 VPN에서 액세스 할 수 있어야합니다.  서버에 액세스 할 수 레디 스의 의 VPN IP 주소를 사용하여 서버를.

위의 방법 중 하나를 사용하여  서버에서 redis 서버 로의 보안 액세스를 구성 하십시오  머신이 원격 머신의 Redis 서비스에 연결하는 데 사용할 IP 주소와 포트를 알아야합니다 .

이 시점에서 웹 서버에서 Redis 서버에 안전하게 액세스 할 수 있어야합니다.

3 단계 : Redis 서버에 대한 암호 설정

Redis 설치에 추가 보안 계층을 추가하려면 서버 데이터에 액세스하기위한 암호를 설정하는 것이 좋습니다. Redis 구성 파일은 /etc/redis/redis.conf다음 위치 에서 편집합니다 .

sudo nano /etc/redis/redis.conf 
 

requirepass지시문을 찾아 강력한 암호로 설정하십시오. Redis 트래픽은 외부 당사자로부터 안전해야하지만 이는 Redis 자체에 대한 인증을 제공합니다. Redis는 빠르고 암호 시도를 제한하지 않으므로 무차별 대입 시도로부터 보호하기 위해 강력하고 복잡한 암호를 선택합니다.

/etc/redis/redis.conf
requirepass yourverycomplexpasswordhere
 

완료되면 파일을 저장하고 닫습니다.

Redis 서비스를 다시 시작하여 변경 사항을 구현합니다.

sudo systemctl restart redis-server.service 
 

이제 Redis 서버가 인증되지 않은 요청을 거부해야합니다.

4 단계 : Redis 연결 및 인증 테스트

변경 사항이 예상대로 작동하는지 테스트하려면  머신 에서 Redis 서비스에 연결하십시오 .

기본적으로 Redis 서버는 로컬 인터페이스에서 6379를 수신하지만 위에서 다룬 각 네트워크 보안 옵션은 외부 당사자를 위해 어떤 방식 으로든 기본값을 수정합니다. IP 주소 를 지정하는 옵션 과 원격 서비스에 연결하는 데 필요한 포트를 지정하는 옵션 과 redis-cli함께 클라이언트를 사용할 수 있습니다 기본 옵션 (각각 127.0.0.1 및 6379)을 사용하는 경우 둘 중 하나를 생략 할 수 있습니다.-h-p

사용하는 값은 네트워크 트래픽을 보호하는 데 사용한 방법에 따라 다릅니다.

  • 격리 된 네트워크 : Redis 서버의 격리 된 네트워크 IP 주소를 사용합니다. 기본 Redis 포트 (6379)가 사용되므로 언급 할 필요가 없습니다.redis-cli -h redis_isolated_IP
  • stunnel 또는 spiped : 원격 Redis 서비스로 터널링하는 로컬 포트를 사용합니다.redis-cli -p 8000
  • PeerVPN : Redis 서버의 VPN IP 주소 사용 :redis-cli -h 10.8.0.1

일반적인 형식은 다음과 같습니다.

redis-cli -h ip_to_contact_redis -p port_to_contact_redis
 

 서버 에서 원격 Redis 인스턴스에 연결할 수 있어야 합니다.

암호를 정의하고 이제 데이터에 액세스하려고하면 AUTH 오류가 발생해야합니다.

127.0.0.1:6379 > keys * 
 
(error) NOAUTH Authentication required.
Web server output

(error) NOAUTH Authentication required.

인증하려면 파일에 AUTH정의한 것과 동일한 비밀번호를 제공하여 명령 을 실행하기 만하면 /etc/redis/redis.conf됩니다.

127.0.0.1:6379 > AUTH yourverycomplexpasswordhere
  • AUTH yourverycomplexpasswordhere
 

자격 증명이 수락되었다는 응답 으로 OK 를 받아야합니다 .

Web server output OK
Web server output

OK

다음으로 Redis에 설정된 키를 나열합니다.

127.0.0.1:6379 > keys *
  • keys *
 

이것이 새로운 Redis 서버 인 경우 출력은 다음과 유사해야합니다.

(empty list or set)
Web server output

(empty list or set)

이 출력은 Redis 서버가 비어 있음을 의미합니다.  서버는 아직 세션 핸들러로이 레디 스 서버를 사용하도록 구성되어 있지 않습니다.

다음을 입력하여 명령 셸로 돌아갑니다.

127.0.0.1:6379 > exit
  • exit
 

인증으로 성공적으로 연결할 수 있는지 확인 했으므로 이제 Redis를 기본 세션 처리기로 만들 수 있습니다.

5 단계 : 웹 서버에서 Redis를 기본 세션 처리기로 설정

이제  서버 의 php.ini파일 을 편집하여 PHP의 기본 세션 핸들러를 변경해야합니다. 이 파일의 위치는 현재 스택에 따라 다릅니다.

기본 리포지토리에서 설치된 Ubuntu 16.04 의 LAMP 스택의 경우 일반적으로 /etc/php/7.0/apache2/php.iniUbuntu 16.04 의 LEMP 스택의 경우 경로는 일반적으로 /etc/php/7.0/fpm/php.ini이러한 위치 중 하나가 올바른지 확인한 경우 다음 섹션을 건너 뛰어도됩니다.

(선택 사항) 올바른 php.ini 파일 찾기

주 php.ini파일 의 위치가 확실하지 않은 경우 phpinfo()기능 을 사용하여 찾을 수 있습니다 문서 루트에서 라는  서버 에서 파일을 엽니 다.이 파일은 info.php기본적으로 /var/www/htmlLAMP 및 LEMP 용입니다.

sudo nano /var/www/html/info.php
  • sudo nano /var/www/html/info.php
 

파일에 다음 코드를 넣으십시오.

/var/www/html/info.php
<?php
phpinfo();
 

브라우저에서  서버의 도메인 이름 또는 IP 주소를 방문한 후 다음을 수행하십시오 /info.php.

http://web_server_domain_or_IP/info.php

“Loaded Configuration File”이 포함 된 행을 찾으면 php.ini로드 된 메인의 정확한 위치를 찾아야합니다 .

작업이 끝나면 파일을 제거합니다. 그러면 환경에 대한 중요한 정보가 표시됩니다.

sudo rm /var/www/html/info.php
  • sudo rm /var/www/html/info.php
 

이제 파일의 위치를 ​​알았으므로 편집으로 이동할 수 있습니다.

구성 수정

php.ini편집 할 파일을 엽니 다 .

기본 구성에서 LAMP 스택을 사용하는 경우 필요한 명령은 다음과 같습니다.

sudo nano /etc/php/7.0/apache2/php.ini
  • sudo nano /etc/php/7.0/apache2/php.ini
 

기본 구성에서 LEMP 스택을 사용하는 경우 필요한 명령은 다음과 같습니다.

sudo nano /etc/php/7.0/fpm/php.ini
  • sudo nano /etc/php/7.0/fpm/php.ini
 

phpinfo()위에 설명 된 방법을 사용하여 다른 경로를 찾은 경우 대신 여기에서 해당 경로로 대체하십시오.

php.ini파일 내에서 session.save_handler기본값은 files입니다. redisRedis PHP 확장을 사용하려면 이를로 변경하십시오 .

php.ini
session.save_handler = redis
 

다음으로 session.save_path주석 처리를 제거하고 Redis 연결 문자열을 포함하도록 값을 변경해야합니다.

연결 문자열은 다음 형식을 사용하여 모두 한 줄로 구성 할 수 있습니다.

tcp://IP_address:port?auth=redis_password

다시 말하지만, 적절한 값은 선택한 보안 네트워킹 전략에 따라 달라집니다. redis-cli이전 에 명령에 제공 한 것과 동일한 값을 사용하십시오 사용 된 예를 들어, stunnel또는 spiped의는 session.save_path것 같이 보일 것입니다 :

php.ini
session.save_path = "tcp://127.0.0.1:8000?auth=yourverycomplexpasswordhere"
 

완료되면 파일을 저장하고 닫습니다. 다음으로 PHP 서비스를 다시 시작하여 변경 사항을 구현하십시오.

에서 램프 환경, 입력 :

sudo systemctl restart apache2
  • sudo systemctl restart apache2
 

에서 LEMP의 환경, 입력 :

sudo systemctl restart php7.0-fpm
  • sudo systemctl restart php7.0-fpm
 

이제 세션 핸들러로 Redis를 사용하도록 PHP를 구성해야합니다.

6 단계 : Redis 세션 처리 테스트

세션이 이제 Redis에서 처리되는지 확인하려면 세션에 정보를 저장하는 PHP 스크립트 또는 애플리케이션이 필요합니다. 카운터를 구현하는 간단한 스크립트를 사용할 것입니다. 페이지를 다시로드 할 때마다 인쇄 된 번호가 증가합니다.

문서 루트 폴더 내에  서버 test.php에 이름이 지정된 파일을 만듭니다 .

sudo nano /var/www/html/test.php
  • sudo nano /var/www/html/test.php
 

내부에 다음 코드를 붙여 넣습니다.

/var/www/html/test.php
<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;

echo $count;

$_SESSION['count'] = ++$count;
 

파일을 저장하고 닫습니다.

스크립트에 액세스하려면 브라우저에  서버의 공용 IP 주소를 지정 /test.php하십시오.

http://web_server_public_IP/test.php

페이지를 다시로드 할 때마다 표시되는 숫자가 증가해야합니다.

이제 redis 컴퓨터 에서을 사용 redis-cli하여 세션을 엽니 다. 로컬 인스턴스에 연결하므로 IP 주소 나 포트를 제공 할 필요가 없습니다.

http://web_server_public_IP/test.php
  • redis-cli
 

Redis 비밀번호를 사용하여 인증 :

127.0.0.1:6379 > AUTH yourverycomplexpasswordhere
  • AUTH yourverycomplexpasswordhere
 
Redis server output

OK

 

 

이제 기존 키를 확인하십시오.

127.0.0.1:6379 >  keys *
  • keys *
 

PHP 세션에 대한 새 항목이 표시되어야합니다.

"PHPREDIS_SESSION:2ofnvhhr6gdvp88u0c4e7kb800"
Redis server output

1) "PHPREDIS_SESSION:2ofnvhhr6gdvp88u0c4e7kb800"

키 값을 요청하면 현재 카운터 값을 볼 수 있습니다.

 127.0.0.1:6379 > get PHPREDIS_SESSION:2ofnvhhr6gdvp88u0c4e7kb800
  • get PHPREDIS_SESSION:2ofnvhhr6gdvp88u0c4e7kb800
 

Redis server output

"count|i:6;"
 

이것은 세션 정보가 Redis 서버에 저장되고 있음을 나타냅니다. 중앙 집중식 세션 관리를 위해 추가 웹 서버를 Redis 서버에 연결할 수 있습니다.

결론

Redis는 PHP 용 세션 핸들러로도 사용할 수있는 강력하고 빠른 키-값 저장소 서비스로, 세션 저장소를위한 분산 시스템을 제공하여 확장 가능한 PHP 환경을 구현합니다. PHP 애플리케이션 확장에 대한 자세한 내용은 PHP 애플리케이션 수평 확장 문서를 참조하세요 .


컴퓨터/노트북/인터넷

IT 컴퓨터 기기를 좋아하는 사람들의 모임방

List of Articles
번호 분류 제목 조회 수 날짜
공지 뉴스 구글 최신 뉴스 file 1384 2024.12.12
공지 사랑LOVE 포인트 만렙! 도전 4590 2025.03.19
공지 🚨(뉴비필독) 전체공지 & 포인트안내 2 25843 2024.11.04
공지 URL만 붙여넣으면 끝! 임베드 기능 20425 2025.01.21
10639 일반 저렴한 중국산 외장 SSD의 실체 file 247 2025.05.17
10638 일반 인텔 애로우레이크의 CPU 내부 다이 모습 file 599 2025.05.10
10637 일반 스카이프, 오늘 서비스 종료 file 601 2025.05.10
10636 일반 SKT "보상 시 고객도 입증책임" file 630 2025.05.10
10635 정보 KISA, 신규 악성코드 위협 공지...SKT 내부 서버에서 ‘BPF도어’ 악성코드 변종 8종 추가 발견 575 2025.05.10
10634 일반 “SK하이닉스 내부자에 뚫렸다” 中이직 앞두고 1만여건 기술 유출 file 572 2025.05.10
10633 일반 기가바이트, 12년만에 메인보드에 새로운 기능을 추가 file 588 2025.05.10
10632 일반 SKT “위약금 면제 시 수백만명 해지… 분위기 휩쓸려 시장 대혼란” file 594 2025.05.10
10631 일반 CUDA 툴킷, 맥스웰, 파스칼, 볼타 지원 중단 595 2025.05.10
10630 일반 그래픽카드를 활용한 암호 해독 벤치마크 file 598 2025.05.10
10629 일반 애즈락 X870 스틸 레전드 메인보드에서 라이젠 9 9950X CPU가 사망 file 584 2025.05.10
10628 일반 코어 울트라 200 메인보드, PCIe 5.0 M.2 성능 제한이 있음 file 561 2025.05.10
10627 일반 시게이트, 2030년까지 100TB 하드디스크 출시 file 581 2025.05.10
10626 정보 MS가 인텔 18A 공정 계약을 체결? 1 file 596 2025.05.10
10625 정보 블루투스 6.1 발표. 전력 효율과 보안 향상 file 615 2025.05.10
10624 정보 중국 Hygon, 128코어 512스레드의 서버 프로세서 로드맵 공개 file 576 2025.05.10
10623 정보 인텔, 컴퓨텍스에서 아크 프로 B60 24GB를 발표? file 614 2025.05.10
10622 일반 지포스 RTX 5060의 리뷰용 드라이버가 없음 file 624 2025.05.10
10621 일반 젠슨황이 사인한 리바 TNT 엔지니어링 프로토타입 키트, 도시락 상자 file 565 2025.05.10
10620 일반 SSD랑 HDD 가격 요즘 진짜 헬이다… 업체들 때문에 미쳐버릴 듯 4 4656 2025.04.18
10619 일반 컴퓨터 메인보드용 ddr6 메모리는 언제나올지 찾아봤는데 593 2025.04.08
10618 일반 갤럭시탭 S10 FE 4월 3일 출시했습니다. 혜택 나쁘지 않네요 841 2025.04.05
10617 수리/AS 절대 공개하지 않는 메인보드 AS센터의 전설의 기술 1 file 924 2025.03.30
10616 수리/AS 메인보드 수리방법 가감없이 공유합니다! #shorts file 862 2025.03.30
10615 일반 라이카와 협업한 샤오미 15 울트라 실버 크롬 언박싱 969 2025.03.29
10614 일반 어도비 비정품 알림 Adobe 앱 라이선스 관련 알림창 없애기 599 2025.03.28
10613 일반 윈도우 12, 과연 등장할까? (예상 및 루머 정리) 897 2025.03.21
10612 일반 메인보드중에 고장률이 가장 낮은 회사 680 2025.03.19
10611 일반 벽 콘센트 꼽는거 구멍 위치가 정해져있었네 file 1438 2025.03.14
10610 일반 듀얼 오리 질문 !! 7044 2025.03.10
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 355 Next
/ 355