웹 사이트를 실행하기위한 전용 가상 서버가 있다면, 웹 사이트 실행을위한 성능을 극대화하도록 맞춤 설정되지 않고 모든 사람을 위해 구성되어있을 가능성이 높습니다.
내용[ 숨는 장소 ]
|
개요
성능을 극대화하려는 여러 문제 영역이 있습니다.
-
Linux 구성
일반적으로 더 많은 연결에 사용할 수있는 메모리를 낭비하는 서비스가 실행 중일 필요가 없습니다. -
MySQL 구성
종종 기본 설정은 소규모 서버를 기반으로하며 몇 가지 주요 변경 사항을 추가하여 성능을 크게 높일 수 있습니다. -
Apache 구성
기본적으로 대부분의 호스팅 제공 업체는 거의 모든 모듈이 설치된 아파치를 설치합니다. 모듈을 사용하지 않을 경우로드 할 이유가 없습니다. -
PHP 구성
기본 PHP 구성은 비슷하게 부풀어 있으며 일반적으로 불필요한 추가 모듈이 많이 설치되어 있습니다. -
PHP Opcode 캐시
PHP가 매번 스크립트를 다시 컴파일하도록 허용하는 대신 opcode 캐시가 컴파일 된 스크립트를 메모리에 캐시하여 성능을 크게 향상시킵니다. -
백업
호스팅 제공 업체가 자동으로 백업하지 않기 때문에 일부 자동 백업을 설정해야합니다. -
보안
물론 Linux는 기본적으로 충분히 안전하지만 일반적으로 몇 가지 빠른 설정으로 해결할 수있는 눈에 띄는 보안 문제가 있습니다.
Linux 구성
수행 할 수있는 조정 작업은 상당히 많으며 사용중인 서버에 따라 약간 씩 다릅니다. 이러한 조정은 CentOS를 실행하는 서버를위한 것이지만 대부분의 DV 서버에서 작동합니다.
DNS 비활성화
호스팅 제공 업체가 도메인의 DNS를 처리하는 경우 (가능성이 높음) DNS 서비스 실행을 비활성화 할 수 있습니다.
DNS 비활성화 /etc/init.d/named stop chmod 644 /etc/init.d/ 이름 지정
chmod 명령은 스크립트에서 실행 권한을 제거하여 시작시 실행을 중지합니다.
SpamAssassin 비활성화
서버 자체에서 이메일 계정을 사용하지 않는 경우 스팸 방지 도구를 실행하지 않아야합니다. (또한 훨씬 더 나은 이메일 솔루션 인 Google Apps를 확인해야합니다.)
/etc/init.d/psa-spamassassin 중지 chmod 644 /etc/init.d/psa-spamassassin
xinetd 비활성화
xinetd 프로세스에는 여러 다른 프로세스가 포함되어 있지만 일반적인 웹 서버에는 유용하지 않습니다.
/etc/init.d/xinetd 중지 chmod 644 /etc/init.d/xinetd
Plesk 메모리 사용량 제한
plesk 패널을 사용하는 경우 옵션 파일을 추가하여 메모리를 덜 사용하도록 강제 할 수 있습니다.
vi /usr/local/psa/admin/conf/httpsd.custom.include
파일에 다음 행을 추가하십시오.
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
이 옵션은 MediaTemple DV 서버에서 작동하는 것으로 알려져 있지만 다른 서버에서는 확인되지 않았습니다. (보다 참고 문헌 )
Plesk 비활성화 또는 끄기 (선택 사항)
1 년에 한 번만 Plesk를 사용하는 경우 실행 상태로 둘 이유가 거의 없습니다. 이 단계는 완전히 선택 사항이며 약간 더 고급입니다.
다음 명령을 실행하여 plesk를 해제하십시오.
/etc/init.d/psa 중지
다음 명령을 실행하여 시작시 실행되지 않도록 비활성화 할 수 있습니다.
chmod 644 /etc/init.d/psa
비활성화하면 파일 권한을 다시 변경하지 않고 수동으로 시작할 수 없습니다 (chmod u + x).
MySQL 구성
쿼리 캐시 활성화
/etc/my.cnf 파일을 열고 다음과 같이 [mysqld] 섹션에 다음 행을 추가하십시오.
[mysqld] 쿼리 캐시 유형 = 1 쿼리 캐시 크기 = 8M
원하는 경우 쿼리 캐시에 메모리를 더 추가 할 수 있지만 너무 많이 사용하지 마십시오.
TCP / IP 비활성화
놀라운 수의 호스트가 기본적으로 TCP / IP에서 MySQL에 액세스 할 수있게하는데, 이는 웹 사이트에는 의미가 없습니다. 다음 명령을 실행하여 mysql이 TCP / IP에서 수신 대기하는지 확인할 수 있습니다.
netstat -an | 그렙 3306
비활성화하려면 /etc/my.cnf 파일에 다음 행을 추가하십시오.
스킵 네트워킹
Apache 구성
종종 /etc/httpd/conf/httpd.conf에있는 httpd.conf 파일을 엽니 다.
다음과 같은 줄을 찾습니다.
시간 초과 120
그리고 이것을 다음과 같이 변경하십시오.
타임 아웃 20
이제 다음 줄이 포함 된 섹션을 찾아 비슷한 것으로 조정합니다.
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
PHP 구성
PHP 플랫폼에서 서버를 조정할 때 염두에 두어야 할 사항 중 하나는 모든 단일 아파치 스레드가 메모리의 별도 위치에 PHP를로드한다는 것입니다. 즉, 사용하지 않는 모듈이 PHP에 256k의 메모리를 추가하면 40 개의 아파치 스레드에서 10MB의 메모리를 낭비하게됩니다.
불필요한 PHP 모듈 제거
일반적으로 /etc/php.ini에있는 php.ini 파일을 찾아야합니다 (일부 배포판에는 여러 .ini 파일이있는 /etc/php.d/ 디렉토리가 있습니다. 각 모듈에 대해 하나씩.
다음 모듈로 loadmodule 행을 주석 처리하십시오.
- odbc
- snmp
- pdo
- odbc pdo
- mysqli
- ioncube 로더
- json
- imap
- LDAP
- ncurses
Todo : 여기에 더 많은 정보를 추가하세요.
PHP Opcode 캐시
APC, eAccelerator 및 Xcache를 포함하여 사용할 수있는 opcode 캐시가 많이 있습니다. 마지막 하나는 안정성 때문에 개인적으로 선호하는 것입니다.
xcache를 다운로드하여 디렉토리에 압축을 푼 후 xcache 소스 디렉토리에서 다음 명령을 실행하십시오.
phpize ./configure --enable-xcache 하다 설치하다
php.ini 파일을 열고 xcache에 대한 새 섹션을 추가하십시오. PHP 모듈이 다른 곳에서로드 된 경우 경로를 조정해야합니다.
vi /etc/php.ini
파일에 다음 섹션을 추가하십시오.
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusername" xcache.admin.pass = "putanmd5hashhere" [xcache] ; xcache.size를 변경하여 opcode 캐시의 크기를 조정하십시오. xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0 ; xcache.var_size를 변경하여 변수 캐시의 크기를 조정하십시오. xcache.var_size = 1M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = 끄기 xcache.readonly_protection = 켜짐 xcache.mmap_path = "/ tmp / xcache" xcache.coredump_directory = "" xcache.cacher = 켜기 xcache.stat = 켜기 xcache.optimizer = 끄기
Todo : 이것을 약간 확장하고 참조에서 xcache에 연결해야합니다.
백업
웹 사이트를 자동으로 백업하는 것보다 더 중요한 것은 없습니다. 호스팅 제공 업체로부터 스냅 샷 백업을받을 수도 있는데, 이는 매우 유용하지만 자동 백업도 선호합니다.
자동 백업 스크립트 생성
나는 보통 / backups 디렉토리를 만들고 그 아래에 / backups / files 디렉토리를 만드는 것으로 시작합니다. 원하는 경우 이러한 경로를 조정할 수 있습니다.
mkdir -p / 백업 / 파일
이제 backups 디렉토리에 backup.sh 스크립트를 작성하십시오.
vi /backups/backup.sh
파일에 다음을 추가하고 필요에 따라 경로와 mysqldump 비밀번호를 조정합니다.
#! / bin / sh
THEDATE =`날짜 + % d % m % y % H % M`
mysqldump -uadmin -pPASSWORD DATABASENAME> /backups/files/dbbackup$THEDATE.bak
tar -cf /backups/files/sitebackup$THEDATE.tar / var / www / vhosts / my-website-path / httpdocs
gzip /backups/files/sitebackup$THEDATE.tar
/ backups / files / site * 찾기 -mtime +5 -exec rm {} \;
/ backups / files / db * 찾기 -mtime +5 -exec rm {} \;
스크립트는 먼저 날짜 변수를 생성하여 모든 파일의 이름이 단일 백업에 대해 동일하게 지정되도록 한 다음 데이터베이스를 덤프하고 웹 파일을 tars하고 gzip합니다. 드라이브 공간이 부족해지지 않도록하려면 찾기 명령을 사용하여 5 일이 지난 파일을 제거합니다.
다음 명령을 실행하여 스크립트를 실행 가능하게 만드십시오.
chmod u + x /backups/backup.sh
다음으로 크론에 의해 자동으로 실행되도록 할당해야합니다. 백업 디렉토리에 대한 액세스 권한이있는 계정을 사용하고 있는지 확인하십시오.
crontab -e
crontab에 다음 행을 추가하십시오.
1 1 * * * /backups/backup.sh
사용자 계정에 로그온 한 상태에서 스크립트를 실행하여 미리 스크립트를 테스트 할 수 있습니다. (보통 루트로 백업을 실행합니다)
Rsync를 사용하여 오프 사이트 백업 동기화
실행중인 서버의 자동 백업이 완료되었으므로 rsync 유틸리티를 사용하여 다른 위치에 동기화 할 수 있습니다. 자동 로그인을 위해 ssh 키를 설정하는 방법에 대한이 문서를 읽으십시오. 단일 명령으로 원격 서버에 공개 SSH 키 추가
이 명령을 다른 위치의 Linux 또는 Mac 컴퓨터에서 실행하여 테스트 할 수 있습니다 (집에 Linux 서버가 있으며 여기에서 실행합니다).
rsync -a [email protected] : / backups / files / * / offsitebackups /
처음 실행하는 데는 꽤 오랜 시간이 걸리지 만 마지막에 로컬 컴퓨터에는 / offsitebackups / 디렉터리에 파일 디렉터리의 복사본이 있어야합니다. (스크립트를 실행하기 전에 해당 디렉토리를 만들어야합니다)
crontab 행에 추가하여이를 예약 할 수 있습니다.
crontab -e
45 분에 매시간 rsync를 실행할 다음 줄을 추가합니다. 여기서 rsync에 전체 경로를 사용하는 것을 알 수 있습니다.
45 * * * * / usr / bin / rsync -a [email protected] : / backups / files / * / offsitebackups /
다른 시간에 실행하거나 하루에 한 번만 실행하도록 예약 할 수 있습니다. 그것은 당신에게 달려 있습니다.
ssh 또는 ftp를 통해 동기화 할 수있는 유틸리티가 많이 있습니다. rsync를 사용할 필요가 없습니다.
보안
가장 먼저 할 일은 ssh를 통해 사용할 일반 사용자 계정이 있는지 확인하고 su를 사용하여 루트로 전환 할 수 있는지 확인하는 것입니다. ssh를 통해 루트에 대한 직접 로그인을 허용하는 것은 매우 나쁜 생각입니다.
SSH를 통한 루트 로그인 비활성화
/ etc / ssh / sshd_config 파일을 편집하고 다음 줄을 찾습니다.
#PermitRootLogin yes
해당 줄을 다음과 같이 변경하십시오.
PermitRootLogin 번호
이 변경을 수행하기 전에 일반 사용자 계정이 있고 root로 su 할 수 있는지 확인하십시오. 그렇지 않으면 스스로 잠글 수 있습니다.
SSH 버전 1 비활성화
이전 버전보다 더 안전하기 때문에 SSH 버전 2 이외의 다른 것을 사용할 이유가 없습니다. / etc / ssh / sshd_config 파일을 편집하고 다음 섹션을 찾습니다.
# 프로토콜 2,1 프로토콜 2
표시된대로 프로토콜 2 만 사용하고 있는지 확인하십시오.
SSH 서버 다시 시작
이제이를 적용하려면 SSH 서버를 다시 시작해야합니다.
/etc/init.d/sshd 재시작
열린 포트 확인
다음 명령을 사용하여 서버가 수신하는 포트를 확인할 수 있습니다.
netstat -an | grep 듣기
plesk를 위해 포트 22, 80 및 가능하면 8443 이외의 다른 항목을 수신하면 안됩니다.
방화벽 설정
더 많은 연결을 차단하기 위해 선택적으로 iptables 방화벽을 설정할 수 있습니다. 예를 들어, 저는 일반적으로 회사 네트워크 이외의 다른 포트에 대한 액세스를 차단합니다. 동적 IP 주소가있는 경우이 옵션을 사용하지 않는 것이 좋습니다.
지금까지이 가이드의 모든 단계를 이미 따랐다면 방화벽도 추가 할 필요는 없지만 옵션을 이해하는 것이 좋습니다.
또한보십시오
- Linux에서 Iptables 사용