찾다
운영 및 유지보수엔진스Nginx 정적 파일 서비스를 구성하고 최적화하는 방법

루트 디렉터리 및 인덱스 파일

루트 지시문은 파일을 검색하는 데 사용할 루트 디렉터리를 지정합니다. 요청된 파일의 경로를 얻기 위해 nginx는 루트 지시문에 지정된 경로에 요청 URI를 추가합니다. 이 지시어는 http {}, server {} 또는 location {} 컨텍스트 내의 모든 수준에 배치될 수 있습니다. 다음 예에서는 가상 서버에 대해 root 지시문이 정의됩니다. 루트를 명시적으로 재정의하는 루트 지시문이 포함되지 않은 모든 위치 {} 블록에 대해 작동합니다.

server {
  root /www/data;

  location / {
  }

  location /images/ {
  }

  location ~ \.(mp3|mp4) {
    root /www/media;
  }
}

여기에서 /images/로 시작하는 uris용 nginx는 파일 시스템의 /www/ data/images/ 디렉터리에서 검색합니다. 해당 문서. URI가 .mp3 또는 .mp4 확장자로 끝나는 경우 nginx는 일치하는 위치 블록에 정의되어 있으므로 /www/media/ 디렉터리에서 파일을 검색합니다.

요청이 /로 끝나면 nginx는 이를 디렉터리에 대한 요청으로 처리하고 디렉터리에서 인덱스 파일을 찾으려고 시도합니다. index 지시문은 인덱스 파일의 이름을 정의합니다(기본값은 index.html). 예제를 계속하려면 요청 uri가 /images/some/path/ 인 경우 nginx는 /www/data/images/some/path/index.html 파일이 있으면 반환합니다. 그렇지 않은 경우 nginx는 기본적으로 http 404 오류(찾을 수 없음)를 반환합니다. 자동으로 생성된 디렉터리 목록을 반환하도록 nginx를 구성하려면 autoindex 지시문에 on 매개 변수를 포함하세요.

location /images/ {
  autoindex on;
}

index 지시문에 여러 파일 이름을 나열할 수 있습니다. nginx는 지정된 순서로 파일을 검색하고 찾은 첫 번째 파일을 반환합니다.

location / {
  index index.$geo.html index.htm index.html;
}

여기서 사용된 $geo 변수는 geo 지시어를 통해 설정된 맞춤 변수입니다. 변수 값은 클라이언트의 IP 주소에 따라 달라집니다.

인덱스 파일을 반환하기 위해 nginx는 파일이 존재하는지 확인한 다음 인덱스 파일 이름을 기본 URI에 추가하여 얻은 새 URI로 내부 리디렉션을 수행합니다. 내부 리디렉션으로 인해 해당 위치에 대한 새로운 검색이 발생하고 다음 예와 같이 다른 위치로 끝날 수 있습니다.

location / {
  root /data;
  index index.html index.php;
}

location ~ \.php {
  fastcgi_pass localhost:8000;
  #...

}

여기에서 요청의 uri가 /path/이고 /data/path/index.html이 검색된 경우 존재하지 않지만 /data/path/index.php가 존재하면 /path/index.php에 대한 내부 리디렉션이 두 번째 위치에 매핑됩니다. 결과적으로 요청이 프록시됩니다.

몇 가지 옵션을 시도해 보세요.

try_files 지시어는 지정된 파일이나 디렉터리가 존재하는지 확인하는 데 사용할 수 있습니다. nginx는 내부 리디렉션을 수행하고 그렇지 않은 경우 지정된 상태 코드를 반환합니다. 예를 들어 요청 uri에 해당하는 파일이 존재하는지 확인하려면 다음과 같이 try_files 지시문과 $uri 변수를 사용합니다.

server {
  root /www/data;

  location /images/ {
    try_files $uri /images/default.gif;
  }
}

파일은 현재 위치 또는 컨텍스트에 설정된 루트를 사용하여 uri로 지정됩니다. 처리를 위한 가상 서버 또는 별칭 지침. 이 경우 원본 uri에 해당하는 파일이 존재하지 않으면 nginx는 마지막 매개변수에 지정된 uri로 내부적으로 리디렉션하고 /www/data/images/default.gif 를 반환합니다.

마지막 매개변수는 상태 코드(등호로 직접 시작) 또는 위치 이름일 수도 있습니다. 다음 예에서는 try_files 지시문에 대한 인수가 기존 파일이나 디렉터리로 확인되지 않으면 404 오류가 반환됩니다.

location / {
  try_files $uri $uri/ $uri.html =404;
}

다음 예에서는 원래 uri와 뒤에 슬래시가 추가된 uri가 모두 기존 파일이나 디렉터리로 확인되지 않으면 요청이 지정된 위치로 리디렉션되고 프록시 서버로 전달됩니다.

location / {
  try_files $uri $uri/ @backend;
}

location @backend {
  proxy_pass http://backend.example.com;
}

제공되는 콘텐츠의 성능을 최적화하세요

로드 속도는 모든 콘텐츠를 전달하는 핵심 요소입니다. nginx 구성을 약간만 최적화하면 생산성이 향상되고 최적의 성능을 달성하는 데 도움이 될 수 있습니다.

Enable sendfile

기본적으로 nginx는 파일 전송 자체를 처리하고 전송하기 전에 파일을 버퍼에 복사합니다. sendfile 지시문을 활성화하면 데이터를 버퍼에 복사하는 단계가 제거되고 데이터를 한 파일 설명자에서 다른 파일 설명자로 직접 복사할 수 있습니다. 또는 하나의 빠른 연결이 작업자 프로세스를 완전히 점유하지 않도록 하려면 sendfile_max_chunk 지시어를 사용하여 단일 sendfile() 호출에서 전송되는 데이터 양을 제한할 수 있습니다(이 경우 1MB):

location /mp3 {
  sendfile      on;
  sendfile_max_chunk 1m;
  #...

}

Enable tcp_nopush

tcp_nopush 지시문을 sendfile on 지시문과 함께 사용합니다. 이를 통해 nginx는 sendfile()이 데이터 덩어리를 얻은 직후 패킷에 http 응답 헤더를 보낼 수 있습니다.

location /mp3 {
  sendfile  on;
  tcp_nopush on;
  #...

}

Enable tcp_nodelay

tcp_nodelay 지시문을 사용하면 원래 느린 네트워크에서 작은 패킷 문제를 해결하기 위해 설계된 nagle 알고리즘을 재정의할 수 있습니다. 이 알고리즘은 여러 개의 작은 패킷을 하나의 큰 패킷으로 결합하고 200밀리초의 지연을 두고 패킷을 보냅니다. 오늘날에는 대용량 정적 파일을 제공할 때 패킷 크기에 관계없이 데이터를 즉시 전송할 수 있습니다. 지연 시간은 온라인 애플리케이션(Ssh, 온라인 게임, 온라인 거래 등)에도 영향을 미칩니다. 기본적으로 tcp_nodelay 지시문은 on으로 설정되어 있으며 이는 nagle의 알고리즘이 비활성화됨을 의미합니다. 이 지시어는 keepalive 연결에만 사용됩니다:

location /mp3 {
  tcp_nodelay    on;
  keepalive_timeout 65;
  #...
  
}

Optimize backlog queue

其中一个重要因素是 nginx 可以多快地处理传入连接。一般规则是在建立连接时,将其放入侦听套接字的 "listen" (监听)队列中。在正常负载下,队列很小或根本没有队列。但是在高负载下,队列会急剧增长,导致性能不均匀,连接中断,延迟增加。

显示积压队列使用命令 netstat -lan 来显示当前监听队列。输出可能如下所示,它显示在端口 80上的监听队列中,有 10 个未接受的连接,这些连接针对配置的最多 128 个排队连接。这种情况很正常。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
10/0/128    *.80    
0/0/128    *.8080

相反,在以下命令中,未接受的连接数(192)超过了 128 的限制。当网站流量很大时,这种情况很常见。要获得最佳性能,需要在操作系统和 nginx 配置中增加可以排队等待 nginx 接受的最大连接数。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
192/0/128    *.80    
0/0/128    *.8080

调整操作系统

将 net.core.somaxconn 内核参数的值从其默认值(128)增加到足以容纳大量流量的值。在这个例子中,它增加到 4096。

  • freebsd 的命令为 sudo sysctl kern.ipc.somaxconn=4096

  • linux 的命令为 1. sudo sysctl -w net.core.somaxconn=4096 2. 将 net.core.somaxconn = 4096 加入到 /etc/sysctl.conf 文件中。

调整 nginx

如果将 somaxconn 内核参数设置为大于 512 的值,请将 backlog 参数增加在 nginx listen 指令以匹配修改:

server {
  listen 80 backlog=4096;
  # ...

}

위 내용은 Nginx 정적 파일 서비스를 구성하고 최적화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
nginx와 apache 사이의 선택 : 필요에 맞는 적합nginx와 apache 사이의 선택 : 필요에 맞는 적합Apr 15, 2025 am 12:04 AM

Nginx와 Apache는 고유 한 장점과 단점이 있으며 다른 시나리오에 적합합니다. 1.NGINX는 높은 동시성 및 낮은 자원 소비 시나리오에 적합합니다. 2. Apache는 복잡한 구성 및 풍부한 모듈이 필요한 시나리오에 적합합니다. 핵심 기능, 성능 차이 및 모범 사례를 비교하면 요구에 가장 적합한 서버 소프트웨어를 선택할 수 있습니다.

nginx를 시작하는 방법nginx를 시작하는 방법Apr 14, 2025 pm 01:06 PM

질문 : nginx를 시작하는 방법? 답변 : nginx 스타트 업 설치 nginx verification nginx is nginx 시작 다른 시작 옵션을 자동으로 시작합니다.

nginx가 시작되었는지 확인하는 방법nginx가 시작되었는지 확인하는 방법Apr 14, 2025 pm 01:03 PM

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

nginx를 닫는 방법nginx를 닫는 방법Apr 14, 2025 pm 01:00 PM

Nginx 서비스를 종료하려면 다음 단계를 따르려면 다음 단계를 결정합니다. Red Hat/Centos (SystemCTL 상태 NGINX) 또는 Debian/Ubuntu (서비스 NGINX 상태) 서비스 중지 : Red Hat/Centos (SystemCTL STOP NGINX) 또는 DEBIAN/UBUNTU (서비스 NGINX STOP) DIA AUTAL STARTUP (옵션) : RED HAT/CENTOS (SystemCTLED) 또는 DEBIAN/UBUNT (SystemCTLED). (Syst

Windows에서 nginx를 구성하는 방법Windows에서 nginx를 구성하는 방법Apr 14, 2025 pm 12:57 PM

Windows에서 Nginx를 구성하는 방법은 무엇입니까? nginx를 설치하고 가상 호스트 구성을 만듭니다. 기본 구성 파일을 수정하고 가상 호스트 구성을 포함하십시오. 시작 또는 새로 고침 Nginx. 구성을 테스트하고 웹 사이트를보십시오. SSL을 선택적으로 활성화하고 SSL 인증서를 구성하십시오. 포트 80 및 443 트래픽을 허용하도록 방화벽을 선택적으로 설정하십시오.

nginx403 오류를 해결하는 방법nginx403 오류를 해결하는 방법Apr 14, 2025 pm 12:54 PM

서버는 요청 된 리소스에 액세스 할 수있는 권한이 없으므로 Nginx 403 오류가 발생합니다. 솔루션에는 다음이 포함됩니다. 파일 권한 확인 권한을 확인하십시오. .htaccess 구성을 확인하십시오. nginx 구성을 확인하십시오. Selinux 권한을 구성하십시오. 방화벽 규칙을 확인하십시오. 브라우저 문제, 서버 장애 또는 기타 가능한 오류와 같은 다른 원인을 해결하십시오.

Linux에서 Nginx를 시작하는 방법Linux에서 Nginx를 시작하는 방법Apr 14, 2025 pm 12:51 PM

Linux에서 Nginx를 시작하는 단계 : Nginx가 설치되어 있는지 확인하십시오. systemctl start nginx를 사용하여 nginx 서비스를 시작하십시오. SystemCTL을 사용하여 NGINX를 사용하여 시스템 시작시 NGINX의 자동 시작을 활성화하십시오. SystemCTL 상태 nginx를 사용하여 시작이 성공했는지 확인하십시오. 기본 환영 페이지를 보려면 웹 브라우저의 http : // localhost를 방문하십시오.

nginx가 시작되었는지 확인하는 방법은 무엇입니까?nginx가 시작되었는지 확인하는 방법은 무엇입니까?Apr 14, 2025 pm 12:48 PM

Linux에서는 다음 명령을 사용하여 nginx가 시작되었는지 확인하십시오. SystemCTL 상태 Nginx 판사 명령 출력에 따라 : "active : running"이 표시되면 Nginx가 시작됩니다. "Active : 비활성 (죽음)"이 표시되면 Nginx가 중지됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구