이 글은 높은 동시성에서 더 나은 구성 방법(코드 분석)을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
1. 여기서 최적화는 주로 nginx의 구성 최적화를 의미합니다. 일반적으로 nginx 구성 파일의 다음 항목이 최적화에 더 효과적입니다.
nginx 프로세스 수는 개수에 따라 지정하는 것이 좋습니다. CPU, 일반적으로 CPU 코어 수는 동일하거나 그 배수입니다.
worker_processes 8;
각 프로세스에 CPU 할당 위의 예에서는 8개의 프로세스가 8개의 CPU에 할당됩니다. 물론 여러 CPU에 하나의 프로세스를 할당할 수도 있습니다.
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
다음 명령은 nginx 프로세스에서 열린 최대 파일 설명자 수를 나타냅니다. 이론적 값은 시스템에서 열린 최대 파일 수(ulimit-n)를 nginx 프로세스 수로 나눈 값이어야 하지만 nginx 할당은 다음과 같습니다. 요청은 균일하지 않으므로 ulimit -n 값과 일관성을 유지하는 것이 가장 좋습니다.
worker_rlimit_nofile 65535;
epoll의 I/O 모델을 사용하여 비동기 이벤트를 효율적으로 처리하세요.
use epoll;
프로세스당 허용되는 최대 연결 수 이론적으로 nginx 서버당 최대 연결 수는 Worker_processes*worker_connections입니다.
worker_connections 65535;
http 연결 시간 초과, 기본값은 60초입니다. 이 기능은 서버에 대한 후속 요청이 발생할 때 클라이언트에서 서버로의 연결이 계속 유효하도록 하는 기능입니다. 연결을 설정합니다. 이 매개변수는 너무 크게 설정할 수 없다는 점을 기억하세요! 그렇지 않으면 많은 유효하지 않은 http 연결이 nginx 연결 수를 차지하게 되고 결국 nginx가 충돌하게 됩니다!
keepalive_timeout 60;
클라이언트 요청 헤더의 버퍼 크기는 시스템 페이징 크기에 따라 설정될 수 있습니다. 일반적으로 요청의 헤더 크기는 1k를 초과하지 않습니다. 그러나 일반 시스템 페이징은 1k보다 큽니다. 여기에서 페이지 크기로 설정하세요. 페이징 크기는 getconf PAGESIZE 명령을 사용하여 얻을 수 있습니다.
client_header_buffer_size 4k;
다음 매개변수는 열린 파일에 대한 캐시를 지정합니다. 기본적으로 활성화되지 않습니다. max는 열린 파일 수와 일치하는 것이 좋습니다. 캐시가 삭제되기 전에 요청되었습니다.
open_file_cache max=102400 inactive=20s;
다음은 캐시된 유효한 정보를 얼마나 자주 확인하는지를 나타냅니다.
open_file_cache_valid 30s;
open_file_cache 지시문의 비활성 매개변수 동안 파일이 사용되는 최소 횟수입니다. 이 숫자를 초과하면 파일이 사용되지 않은 경우 위의 예와 같이 파일 설명자가 항상 캐시에서 열립니다. 비활성 시간 내에 일단 제거됩니다.
open_file_cache_min_uses 1;
응답 헤더에 운영 체제 및 웹 서버(Nginx) 버전 번호에 대한 정보를 숨기면 보안에 좋습니다.
server_tokens off;
는 sendfile()을 작동시킬 수 있습니다. sendfile()은 디스크와 TCP 소켓 간에 데이터(또는 두 개의 파일 설명자)를 복사할 수 있습니다. Pre-sendfile은 데이터를 전송하기 전에 사용자 공간에 데이터 버퍼를 적용하는 것입니다. 그런 다음 read()를 사용하여 파일의 데이터를 이 버퍼에 복사하고 write()를 사용하여 버퍼 데이터를 네트워크에 씁니다. sendfile()은 즉시 디스크의 데이터를 OS 캐시로 읽습니다. 이 복사는 커널에서 수행되기 때문에 sendfile()은 read()와 write()를 결합하고 폐기 버퍼를 켜고 끄는 것보다 더 효율적입니다(sendfile에 대한 자세한 내용).
sendfile on;
는 nginx에게 모든 헤더 파일을 차례로 보내는 대신 하나의 패킷으로 보내도록 지시합니다. 즉, 데이터 패킷이 즉시 전송되지 않고 데이터 패킷이 가장 큰 경우 한꺼번에 전송되므로 네트워크 정체를 해결하는 데 도움이 됩니다.
tcp_nopush on;
nginx에게 데이터를 캐시하지 말고 하나씩 보내라고 지시하세요. 데이터를 적시에 전송해야 하는 경우 이 속성을 애플리케이션에 설정해야 합니다. 그러면 작은 데이터 정보 조각을 보낼 때 반환 즉시 가치를 얻을 수 없습니다.
tcp_nodelay on;
예:
http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; ...... }
클라이언트 요청 헤더의 버퍼 크기입니다. 이는 시스템 페이징 크기에 따라 설정될 수 있습니다. 그러나 일반적으로 요청 헤더의 크기는 1k를 초과하지 않습니다. 1k보다 크므로 여기에서는 페이지 크기로 설정합니다.
client_header_buffer_size 4k;
클라이언트 요청 헤더의 버퍼 크기는 시스템 페이징 크기에 따라 설정될 수 있습니다. 일반적으로 요청 헤더의 크기는 1k를 초과하지 않습니다. 그러나 일반 시스템 페이징은 1k보다 크므로 페이징은 다음과 같습니다. 크기는 여기에서 설정됩니다. 페이징 크기는 getconf PAGESIZE 명령을 사용하여 얻을 수 있습니다.
[root@test-huanqiu ~]# getconf PAGESIZE 4096
하지만 client_header_buffer_size가 4k를 초과하는 경우도 있는데, client_header_buffer_size 값을 "시스템 페이징 크기"의 정수배로 설정해야 합니다.
열린 파일에 대한 캐시를 지정합니다. 최대는 캐시 수를 지정하는 것이 좋습니다. 비활성은 파일이 삭제된 후 캐시가 삭제되는 기간을 나타냅니다. 요청되지 않았습니다.
open_file_cache max=65535 inactive=60s;
open_file_cache 명령의 비활성 매개변수 시간 내 파일의 최소 사용 횟수입니다. 이 숫자를 초과하면 파일이 사용되지 않은 경우 위의 예와 같이 파일 설명자가 항상 캐시에 열립니다. 비활성 시간 내에 일단 제거됩니다.
open_file_cache_min_uses 1;
캐시된 유효한 정보를 확인하는 빈도를 지정하세요.
open_file_cache_valid 80s;
다음은 사용된 간단한 nginx 구성 파일입니다.
[root@dev-huanqiu ~]# cat /usr/local/nginx/conf/nginx.conf user www www; worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000; error_log /www/log/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 2k; large_client_header_buffers 4 4k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 16k; fastcgi_buffers 16 16k; fastcgi_busy_buffers_size 16k; fastcgi_temp_file_write_size 16k; fastcgi_cache TEST; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; open_file_cache max=204800 inactive=20s; open_file_cache_min_uses 1; open_file_cache_valid 30s; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 8080; server_name huan.wangshibo.com; index index.php index.htm; root /www/html/; location /status { stub_status on; } location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /www/log/access.log access; } }
2. FastCGI에 대한 여러 지침
이 지침은 FastCGI 캐시 시간에 대한 경로, 디렉터리 구조 수준, 키워드 영역 저장 시간 및 비활성 삭제를 지정합니다.
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
백엔드 FastCGI에 연결하기 위한 시간 초과를 지정합니다.
fastcgi_connect_timeout 300;
向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_send_timeout 300;
接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_read_timeout 300;
指定读取FastCGI应答第一部分 需要用多大的缓冲区,这里可以设置为fastcgi_buffers指令指定的缓冲区大小,上面的指令指定它将使用1个 16k的缓冲区去读取应答的第一部分,即应答头,其实这个应答头一般情况下都很小(不会超过1k),但是你如果在fastcgi_buffers指令中指 定了缓冲区的大小,那么它也会分配一个fastcgi_buffers指定的缓冲区大小去缓存。
fastcgi_buffer_size 16k;
指定本地需要用多少和多大的缓冲区来 缓冲FastCGI的应答,如上所示,如果一个php脚本所产生的页面大小为256k,则会为其分配16个16k的缓冲区来缓存,如果大于256k,增大 于256k的部分会缓存到fastcgi_temp指定的路径中, 当然这对服务器负载来说是不明智的方案,因为内存中处理数据速度要快于硬盘,通常这个值 的设置应该选择一个你的站点中的php脚本所产生的页面大小的中间值,比如你的站点大部分脚本所产生的页面大小为 256k就可以把这个值设置为16 16k,或者4 64k 或者64 4k,但很显然,后两种并不是好的设置方法,因为如果产生的页面只有32k,如果用4 64k它会分配1个64k的缓冲区去缓存,而如果使用64 4k它会分配8个4k的缓冲区去缓存,而如果使用16 16k则它会分配2个16k去缓存页面,这样看起来似乎更加合理。
fastcgi_buffers 16 16k;
这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers的两倍。
fastcgi_busy_buffers_size 32k;
在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size 32k;
开启FastCGI缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU负载,并且防止502错误。但是这个缓存会引起很多问题,因为它缓存的是动态页面。具体使用还需根据自己的需求。
fastcgi_cache TEST
为指定的应答代码指定缓存时间,如上例中将200,302应答缓存一小时,301应答缓存1天,其他为1分钟。
fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m;
缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数,如上例,如果在5分钟内某文件1次也没有被使用,那么这个文件将被移除。
fastcgi_cache_min_uses 1;
不知道这个参数的作用,猜想应该是让nginx知道哪些类型的缓存是没用的。
fastcgi_cache_use_stale error timeout invalid_header http_500;
相关推荐:
위 내용은 높은 동시성에서 더 나은 nginx 구성 방법 소개(코드 분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

phpsession 실패 이유에는 구성 오류, 쿠키 문제 및 세션 만료가 포함됩니다. 1. 구성 오류 : 올바른 세션을 확인하고 설정합니다. 2. 쿠키 문제 : 쿠키가 올바르게 설정되어 있는지 확인하십시오. 3. 세션 만료 : 세션 시간을 연장하기 위해 세션을 조정합니다 .GC_MAXLIFETIME 값을 조정하십시오.

PHP에서 세션 문제를 디버그하는 방법 : 1. 세션이 올바르게 시작되었는지 확인하십시오. 2. 세션 ID의 전달을 확인하십시오. 3. 세션 데이터의 저장 및 읽기를 확인하십시오. 4. 서버 구성을 확인하십시오. 세션 ID 및 데이터를 출력, 세션 파일 컨텐츠보기 등을 통해 세션 관련 문제를 효과적으로 진단하고 해결할 수 있습니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

SESSION.GC_MAXLIFETIME 및 SESSION.COOKIE_LIFETIME을 설정하여 PHP에서 세션 수명을 구성 할 수 있습니다. 1) SESSION.GC_MAXLIFETIME 서버 측 세션 데이터의 생존 시간을 제어합니다. 2) 세션 .Cookie_Lifetime 클라이언트 쿠키의 수명주기를 제어합니다. 0으로 설정하면 브라우저가 닫히면 쿠키가 만료됩니다.

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
