전용 가상 웹 서버 조정
웹 사이트를 실행하기 위해 전용 가상 서버를 사용하면 모든 사람들을 위해 구성되었으며 웹 사이트 실행을위한 성능을 극대화하도록 사용자 정의하지 않은 것이 좋습니다..
내용[숨는 장소]
|
개요
성능을 극대화하고자하는 문제 영역이 많이 있습니다.
- Linux 구성
일반적으로 더 이상 연결을 위해 사용될 수있는 메모리를 낭비하지 않는 서비스가 실행되고 있습니다.. - MySQL 구성
기본 설정은 소규모 서버를 기반으로하는 경우가 많습니다. 몇 가지 주요 변경 사항을 추가하여 성능을 크게 높일 수 있습니다. - 아파치 설정
기본적으로 대부분의 호스팅 제공 업체는 거의 모든 모듈이 설치된 상태에서 아파치를 설치합니다. 모듈을 사용하지 않을 경우 모듈을로드 할 이유가 없습니다.. - PHP 구성
기본 PHP 설정은 비슷하게 부풀어 오른다. 보통 불필요한 추가 모듈이 설치되어있다.. - PHP Opcode 캐시
PHP가 매번 스크립트를 다시 컴파일하는 대신, opcode 캐시는 컴파일 된 스크립트를 거대한 성능 향상을 위해 메모리에 캐시합니다. - 백업
호스팅 제공 업체가 자동 백업을 설정하지 않아도되므로 자동 백업을 설정해야합니다.. - 보안
물론 Linux는 기본적으로 충분히 안전하지만 몇 가지 빠른 설정으로 해결할 수있는 눈부신 보안 문제가 있습니다..
리눅스 설정
할 수있는 개조가 많이 있습니다. 사용하는 서버에 따라 약간 다를 수 있습니다. 이러한 조정은 CentOS를 실행하는 서버에 대한 것이지만 대다수의 DV 서버에서 작동해야합니다..
DNS 사용 안 함
호스팅 제공 업체가 도메인의 DNS를 처리하는 경우 (가능하면) DNS 서비스를 실행 중지 할 수 있습니다.
dns 비활성화 /etc/init.d/named chmod stop 644 /etc/init.d/named
chmod 명령은 스크립트에서 실행 권한을 제거하여 시작시 실행을 중지합니다..
SpamAssassain 사용 중지
서버 자체에서 전자 메일 계정을 사용하지 않는 경우 스팸 방지 도구를 실행하지 않아도됩니다. (또한 Google Apps, 더 나은 이메일 솔루션을 확인해야합니다)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
xinetd 사용 안함
xinetd 프로세스는 다수의 다른 프로세스를 포함하고 있으며, 일반적인 웹 서버에는 유용하지 않습니다.
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Plesk 메모리 사용 제한
plesk 패널을 사용하는 경우 옵션 파일을 추가하여 메모리를 적게 사용하도록 설정할 수 있습니다.
vi /usr/local/psa/admin/conf/httpsd.custom.include
파일에 다음 행을 추가하십시오.
MinSpareServers 1 MaxSpareServers 1 시작 서버 1 MaxClients 5
이 옵션은 MediaTemple DV 서버에서 작동하는 것으로 알려져 있지만 다른 옵션에서는 확인되지 않았습니다. (참고 문헌 참조)
Plesk 사용 중지 또는 사용 중지 (선택 사항)
Plesk를 1 년에 한 번만 사용하는 경우 Plesk를 전혀 사용하지 않는 이유가 거의 없습니다. 이 단계는 완전히 선택 사항이며 약간 더 고급입니다..
plesk를 끄려면 다음 명령을 실행하십시오.
/etc/init.d/psa stop
다음 명령을 실행하여 시작시 실행되지 않도록 설정할 수 있습니다.
chmod 644 /etc/init.d/psa
이 옵션을 비활성화하면 파일 사용 권한을 다시 변경하지 않고 수동으로 시작할 수 없습니다 (chmod u + x).
MySQL 구성
쿼리 캐시 사용
/etc/my.cnf 파일을 열고 [mysqld] 섹션에 다음과 같은 라인을 추가하십시오 :
[mysqld] query-cache-type = 1 query-cache-size = 8M
원하는 경우 쿼리 캐시에 메모리를 추가 할 수 있지만 너무 많이 사용하지 마십시오..
TCP / IP 사용 안 함
놀라운 수의 호스트가 기본적으로 TCP / IP에서 MySQL에 액세스 할 수 있습니다. 이는 웹 사이트에 아무런 의미가 없습니다. 다음 명령을 실행하여 mysql이 TCP / IP에서 수신 대기 중인지 알아낼 수있다.
netstat -an | grep 3306
비활성화하려면 /etc/my.cnf 파일에 다음 줄을 추가하십시오.
스킵 네트워킹
아파치 설정
자주 /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의 메모리를 추가하면 40MB의 아파치 스레드에서 10MB의 메모리를 낭비하게됩니다..
불필요한 PHP 모듈 제거
일반적으로 /etc/php.ini에있는 php.ini 파일을 찾아야합니다 (일부 배포판에서는 .ini 파일이 여러 개있는 /etc/php.d/ 디렉토리가 있으며, 각 모듈 당 하나.
다음 모듈을 사용하여로드 모듈을 주석 처리하십시오.
- ODBC
- SNMP
- Pdo
- ODBC Pdo
- mysqli
- 이온 큐브 - 로더
- json
- 잠잠하다
- LDAP
- ncurses
Todo : 여기에 자세한 정보를 추가하십시오..
PHP Opcode 캐시
APC, eAccelerator 및 Xcache를 비롯하여 사용할 수있는 opcode 캐시가 여러 개 있습니다. 마지막으로 안정성 때문에 개인적인 선호가 있습니다..
xcache를 다운로드하여 디렉토리에 추출한 다음 xcache 소스 디렉토리에서 다음 명령을 실행하십시오.
phpize ./configure --enable-xcache make make make
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 = Off xcache.readonly_protection = xcache.mmap_path = "/ tmp / xcache"에서 xcache.coredump_directory = ""xcache.cacher = On xcache.stat = On xcache.optimizer = Off
Todo : 참조를 xcache로 조금 확장하고 링크해야합니다..
백업
웹 사이트의 백업을 자동화하는 것보다 더 중요한 것은 없습니다. 호스팅 제공 업체로부터 스냅 샷 백업을 얻을 수도 있지만 매우 유용하지만 자동 백업도 선호합니다..
자동화 된 백업 스크립트 만들기
나는 보통 / backups 디렉토리를 만들고 그 아래에 / backups / files 디렉토리를 만들어 시작한다. 원하는 경우이 경로를 조정할 수 있습니다..
mkdir -p / backups / files
이제 backups 디렉토리에 backup.sh 스크립트를 작성하십시오.
vi /backups/backup.sh
필요에 따라 경로와 mysqldump 비밀번호를 조정하여 다음을 파일에 추가하십시오.
mysqldump -uadmin -pPASSWORD DATABASENAME> /backups/files/dbbackup$THEDATE.bak tar -cf / backups / files / sitebackup $ THEDATE = "날짜 + % d % m % y % H % M" .tar / var / www / vhosts / my-website-path / httpdocs gzip /backups/files/sitebackup$THEDATE.tar 찾기 / 백업 / 파일 / 사이트 * -mtime +5 -exec rm \; / backups / files / db를 찾으십시오. -mtime +5 -exec rm \;
스크립트는 먼저 날짜 변수를 생성하여 모든 파일의 이름이 단일 백업에 대해 동일하게 지정되고 데이터베이스를 덤프하고 웹 파일을 tars 한 다음 gzip으로 압축합니다. find 명령은 드라이브 공간 부족을 원하지 않기 때문에 5 일이 지난 파일을 제거하는 데 사용됩니다.
다음 명령을 실행하여 스크립트를 실행 가능하게 만드십시오.
chmod u + x /backups/backup.sh
다음으로 cron에 의해 자동으로 실행되도록 지정해야합니다. 백업 디렉토리에 액세스 할 수있는 계정을 사용해야합니다..
crontab -e
crontab에 다음 행을 추가하십시오.
1 1 * * * /backups/backup.sh
사용자 계정에 로그온 한 상태에서 스크립트를 실행하여 미리 테스트 할 수 있습니다. (나는 보통 루트로서 백업을 실행한다)
Rsync를 사용하여 사이트 외부에서 백업 동기화
이제 서버의 자동 백업을 실행 했으므로 rsync 유틸리티를 사용하여 다른 곳에 동기화 할 수 있습니다. 자동 로그인을 위해 ssh 키를 설정하는 방법에 대한이 기사를 읽으십시오. 단일 명령으로 원격 서버에 공용 SSH 키 추가
이 명령을 다른 위치에있는 리눅스 또는 맥 컴퓨터에서 실행하여 테스트해볼 수 있습니다 (저는 리눅스 서버를 집에서 가지고 있습니다.
rsync -a [email protected] : / backups / files / * / offsitebackups /
처음 실행하는 데는 꽤 시간이 걸리지 만 결국 로컬 컴퓨터에는 / offsitebackups / 디렉토리에 files 디렉토리의 복사본이 있어야합니다. 스크립트를 실행하기 전에 해당 디렉토리를 만들어야합니다.
crontab 행에 추가하여이 작업을 예약 할 수 있습니다.
crontab -e
45 분에 rsync를 매 시간마다 실행하는 다음 행을 추가하십시오. 여기서 rsync에 대한 전체 경로를 사용한다는 것을 알 수 있습니다..
45 * * * * / usr / bin / rsync -a [email protected] : / backups / files / * / offsitebackups /
다른 시간에 실행되도록 예약하거나 하루에 한 번만 실행하도록 예약 할 수 있습니다. 그건 너에게 달렸어..
ssh 또는 ftp를 통해 동기화 할 수있는 유틸리티가 많이 있습니다. rsync를 사용할 필요가 없습니다..
보안
가장 먼저 할 일은 ssh를 통해 사용할 일반 사용자 계정이 있는지 확인하고 su를 사용하여 root로 전환 할 수 있는지 확인하는 것입니다. ssh를 통한 root의 직접 로그인을 허용하는 것은 매우 나쁜 생각입니다..
SSH를 통한 루트 로그인 비활성화
/ etc / ssh / sshd_config 파일을 편집하고 다음 줄을 찾습니다.
#PermitRootLogin yes
해당 줄을 다음과 같이 변경하십시오.
PermitRootLogin 아니요
이 변경을하기 전에 일반 사용자 계정이 있는지 확인하고 루트로 su를 할 수 있습니다. 그렇지 않으면 자신을 잠글 수 있습니다.
SSH 버전 1 사용 중지
이전 버전보다 안전하기 때문에 SSH 버전 2 이외의 다른 것을 사용할 이유가 없습니다. / etc / ssh / sshd_config 파일을 편집하고 다음 절을 찾으십시오.
#Protocol 2,1 프로토콜 2
표시된대로 프로토콜 2 만 사용하고 있는지 확인하십시오.
SSH 서버 다시 시작
이제 SSH 서버를 다시 시작해야 효과가 나타납니다..
/etc/init.d/sshd restart
열린 포트 확인
다음 명령을 사용하여 서버가 수신 대기중인 포트를 확인할 수 있습니다.
netstat -an | grep LISTEN
plesk에는 포트 22, 80, 8443 이외의 것을 듣지 않아야합니다..
방화벽 설정
주요 기사 : 리눅스에서 iptables 사용하기
선택적으로 iptables 방화벽을 설정하여 더 많은 연결을 차단할 수 있습니다. 예를 들어, 나는 보통 직장 네트워크가 아닌 다른 포트에 대한 액세스를 차단합니다. 유동 IP 주소를 사용하는 경우 해당 옵션을 피하기를 원할 것입니다.
지금까지이 가이드의 모든 단계를 이미 수행 한 적이 있다면 믹스에 방화벽을 추가 할 필요는 없습니다.하지만 옵션을 이해하는 것이 좋습니다..
참고 사항
- 리눅스에서 iptables 사용하기
참고 문헌
- DV 서버 최적화 (mediatemple.net)
- XCache