고 유량 사이트 에 NGINX 와 PHP - fpm 설정 최적화
7489 단어 nginx
다음은 바로 이 방면 의 제시 와 건의 이다.
1. TCP 를 UNIX 도 메 인 소켓 으로 전환
UNIX 도 메 인 소켓 은 TCP 소켓 보다 loopback 인터페이스 에서 더 좋 은 성능 을 제공 합 니 다 (더 적은 데이터 복사 와 컨 텍스트 전환).
그러나 한 가지 명심 해 야 할 것 이 있 습 니 다. 같은 서버 에서 실행 되 는 프로그램 만 UNIX 도 메 인 소켓 에 접근 할 수 있 습 니 다. (네트워크 지원 이 없 는 것 이 분명 합 니 다.)
upstream backend
{
# UNIX domain sockets
server unix:/var/run/fastcgi.sock;
# TCP sockets
# server 127.0.0.1:8080;
}
2. 작업 프로 세 스 수 조정
현대 컴퓨터 하드웨어 는 다 중 프로세서 로 NGINX 는 다 중 물리 나 가상 프로 세 서 를 이용 할 수 있다.
대부분의 경우 웹 서버 는 다양한 작업 (예 를 들 어 웹 서버 로 서 서 비 스 를 제공 하 는 동시에 인쇄 서버) 을 처리 하기 위해 설정 되 지 않 습 니 다. NGINX 는 사용 가능 한 모든 프로 세 서 를 사용 하도록 설정 할 수 있 습 니 다. NGINX 작업 프로 세 스 는 다 중 스 레 드 가 아 닙 니 다.
다음 명령 을 실행 하면 기계 에 프로세서 가 몇 개 있 는 지 알 수 있 습 니 다.
Linux 에서 -
cat /proc/cpuinfo | grep processor
FreeBSD 에서 -
sysctl dev .cpu | grep location
nginx. conf 파일 에서 workprocesses 의 값 은 기계 의 프로세서 핵 수로 설정 되 어 있 습 니 다.
동시에, 증대 workerconnections (프로세서 의 핵심 마다 몇 개의 연결 을 처리 할 수 있 습 니까?) 의 값 과 "multi accept" 를 ON 으로 설정 합 니 다. Linux 를 사용한다 면 "epoll" 도 사용 합 니 다.
# We have 16 cores
worker_processes 16;
# connections per worker
events
{
worker_connections 4096;
multi_accept on;
}
3. upstream 부하 균형 설정
우리 의 경험 으로 볼 때 같은 기계 에 여러 개의 upstream 백 엔 드 가 하나의 upstream 백 엔 드 보다 더 높 은 스루풋 을 가 져 올 수 있다.
예 를 들 어 최대 1000 개의 PHP - fpm 하위 프로 세 스 (children) 를 지원 하려 면 이 숫자 를 두 개의 upstream 백 엔 드 에 평균 할당 하여 각각 500 개의 PHP - fpm 하위 프로 세 스 를 처리 할 수 있 습 니 다.
upstream backend {
server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5;
server unix:/var/run/php5-fpm.sock2 weight=100 max_fails=5 fail_timeout=5;
}
다음은 php - fpm. conf 에서 온 두 개의 프로 세 스 풀 입 니 다.
www1
/var/run/php5-fpm.sock1
-1
0666
www
www
static
500
50000
0
20s
/var/log/php-slow.log
no
5000
127.0.0.1
$HOSTNAME
/usr/local/bin:/usr/bin:/bin
/usr/tmp
/usr/tmp
/usr/tmp
$OSTYPE
$MACHTYPE
2
www2
/var/run/php5-fpm.sock2
-1
0666
www
www
static
500
50000
0
20s
/var/log/php-slow.log
no
5000
127.0.0.1
$HOSTNAME
/usr/local/bin:/usr/bin:/bin
/usr/tmp
/usr/tmp
/usr/tmp
$OSTYPE
$MACHTYPE
2
4. 로그 파일 에 접근 하지 않 기
이 점 은 고 유량 사이트 의 로그 파일 이 모든 스 레 드 간 에 동기 화 되 어야 하 는 IO 작업 과 관련 되 기 때문에 큰 영향 을 미친다.
access_log off;
log_not_found off;
error_log /var/log/nginx-error.log warn;
접근 로그 파일 을 닫 을 수 없다 면 버퍼 를 사용 해 야 합 니 다:
access_log /var/log/nginx/access.log main buffer=16k;
5. GZip 사용 하기
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
6. 자주 방문 하 는 파일 에 대한 캐 시 정보
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
7. 클 라 이언 트 시간 초과 조정
client_max_body_size 500M;
client_body_buffer_size 1m;
client_body_timeout 15;
client_header_timeout 15;
keepalive_timeout 2 2;
send_timeout 15;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
8. 출력 버퍼 크기 조정
fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_connect_timeout 3s;
fastcgi_send_timeout 120s;
fastcgi_read_timeout 120s;
reset_timedout_connection on;
server_names_hash_bucket_size 100;
9. / etc / sysctl. conf 변조
# Recycle Zombie connections
net.inet.tcp.fast_finwait2_recycle=1
net.inet.tcp.maxtcptw=200000
# Increase number of files
kern.maxfiles=65535
kern.maxfilesperproc=16384
# Increase page share factor per process
vm.pmap.pv_entry_max=54272521
vm.pmap.shpgperproc=20000
# Increase number of connections
vfs.vmiodirenable=1
kern.ipc.somaxconn=3240000
net.inet.tcp.rfc1323=1
net.inet.tcp.delayed_ack=0
net.inet.tcp.restrict_rst=1
kern.ipc.maxsockbuf=2097152
kern.ipc.shmmax=268435456
# Host cache
net.inet.tcp.hostcache.hashsize=4096
net.inet.tcp.hostcache.cachelimit=131072
net.inet.tcp.hostcache.bucketlimit=120
# Increase number of ports
net.inet.ip.portrange.first=2000
net.inet.ip.portrange.last=100000
net.inet.ip.portrange.hifirst=2000
net.inet.ip.portrange.hilast=100000
kern.ipc.semvmx=131068
# Disable Ping-flood attacks
net.inet.tcp.msl=2000
net.inet.icmp.bmcastecho=1
net.inet.icmp.icmplim=1
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
10. 모니터링
연결 을 여 는 수량, 남 은 메모리, 대기 상태 스 레 드 의 수 를 지속 적 으로 감시 합 니 다.
경 보 를 설정 하여 한도 값 을 초과 할 때 알려 드 립 니 다.이 경 보 를 직접 구축 하거나 ServerDensity 와 같은 것 을 사용 할 수 있 습 니 다.
NGINX 가 설 치 된 stub 확인status 모듈.이 모듈 은 기본적으로 NGINX 에 컴 파일 되 지 않 기 때문에 NGINX 를 다시 컴 파일 해 야 할 수도 있 습 니 다 -
./configure --with-http_ssl_module --with-http_stub_status_module --without-mail_pop3_module
--without-mail_imap_module --without-mail_smtp_module
make install BATCH=yes
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.