> 백엔드 개발 > PHP 튜토리얼 > Nginx 공통 응용 프로그램 기술 가이드 [Nginx 팁] 제2판

Nginx 공통 응용 프로그램 기술 가이드 [Nginx 팁] 제2판

WBOY
풀어 주다: 2016-07-30 13:29:32
원래의
1338명이 탐색했습니다.
저자: NetSeek http://www.linuxtone.org (IT Operation and Maintenance Expert Network | Cluster Architecture | Performance Tuning)
재인쇄를 환영합니다. 꼭 해주세요. 따라서 재인쇄할 때는 기사의 원본 출처, 저자 정보 및 이 내용을 하이퍼링크 형태로 반드시 표시하시기 바랍니다.
초판일: 2008-11-25 업데이트: 2009-1-14
내용
1. Nginx 기본 지식
2. 🎜>
3. Nginx 다시 작성
4. Nginx 리디렉션
5. Nginx 디렉토리는 자동으로 슬래시를 추가합니다:
6. Nginx 위치
7. >8. Nginx 안티 핫링크
9. Nginx 접근 제어
10. Nginx 로그 처리
11. Nginx 캐시
12. >
13. Nginx 단순 최적화
                                                           5. Nginx 서비스 모니터링16. 일반적인 문제 및 오류 처리17. 관련 리소스 다운로드
[서문]:
이 기술 가이드는 중국에서 NGINX 사용을 대중화하기 위해 작성되었습니다. 모든 사람이 NGINX 스킬의 일부 사용법을 이해하고 숙달할 수 있도록 보다 편리하게 돕습니다. 이 가이드에 있는 많은 팁은 인터넷에서, 직장에서 또는 인터넷에서 친구들이 나에게 묻는 질문에서 나온 것입니다. 기꺼이 공유해 준 인터넷상의 친구들에게 감사와 존경을 표하고 싶습니다. 이 기술 가이드를 더욱 풍부하게 하고 더 나은 제안을 하는 데 동참해 주신 모든 분들을 환영합니다! 친구 여러분, http://www.linuxtone.org 기술 공유 커뮤니티에 주목하십시오! 서로 배우고 함께 발전하고 싶다!1. Nginx 기본지식
1. 소개
Nginx (" 엔진 x")는 고성능 HTTP 및 역방향 프록시 서버이자 IMAP/POP3/SMTP 프록시 서버이기도 합니다. Nginx는 러시아에서 두 번째로 방문객이 많은 Rambler.ru 사이트를 위해 Igor Sysoev에 의해 개발되었으며, 이 사이트는 2년 반 이상 운영되었습니다. Igor는 BSD와 유사한 라이센스에 따라 소스 코드를 릴리스합니다. 아직 베타 버전이지만 Nginx는 안정성, 풍부한 기능 세트, 샘플 구성 파일 및 낮은 시스템 리소스 소비로 이미 알려져 있습니다. 자세한 내용은 공식 위키를 참조하세요: http://wiki.codemongers.com/
2. Nginx의 장점
HTTP 서버로서 nginx에는 다음과 같은 기본 기능이 있습니다.
1) 정적 파일, 인덱스 파일 및 자동 인덱싱을 처리합니다.
2) 캐시 없는 역방향 프록시 가속, 간단한 로드 밸런싱 및 내결함성.
3) FastCGI, 간단한 로드 밸런싱 및 내결함성.
4) 모듈형 구조. gzipping, 바이트 범위, 청크 응답 및 SSI 필터와 같은 필터를 포함합니다. 단일 페이지에 존재하는 여러 SSI가 FastCGI 또는 다른 프록시 서버에서 처리되는 경우 이 처리는 서로 기다리지 않고 병렬로 실행될 수 있습니다.
5) SSL 및 TLS SNI를 지원합니다
.
Nginx는 성능 최적화를 위해 특별히 개발되었습니다. 성능이 가장 중요한 고려 사항이며 구현 시 효율성에 큰 관심을 기울입니다. 이는 커널 폴링 모델을 지원하며 높은 로드를 견딜 수 있으며 최대 50,000개의 동시 연결을 지원할 수 있다고 합니다.
Nginx는 안정성이 높습니다. 다른 HTTP 서버에 액세스 피크가 발생하거나 누군가 악의적으로 느린 연결을 시작하면 서버의 물리적 메모리가 고갈되고 잦은 스와핑 및 응답 손실이 발생할 가능성이 높으며 서버는 다시 시작할 수만 있습니다. 예를 들어, Apache에 현재 200개 이상의 프로세스가 있으면 웹 응답 속도는 분명히 매우 느려질 것입니다. Nginx는 단계별 리소스 할당 기술을 채택하여 CPU 및 메모리 사용량을 매우 낮게 만듭니다. nginx는 공식적으로 10,000개의 비활성 연결을 유지한다고 명시하고 있습니다. 이는 2.5M의 메모리만 차지하므로 DOS와 같은 공격은 기본적으로 nginx에 해롭습니다. 쓸모가 없습니다. 안정성 측면에서는 nginx가 lighthttpd보다 낫습니다.
Nginx는 핫 배포를 지원합니다.특히 시작하기가 쉽고 중단 없이 거의 연중무휴로 실행할 수 있으며, 몇 달 동안 실행하더라도 다시 시작할 필요가 없습니다. 서비스를 중단하지 않고 소프트웨어 버전을 업그레이드할 수도 있습니다.
Nginx는 마스터-슬레이브 모델을 채택하여 SMP의 장점을 최대한 활용하고 디스크 I/O에서 작업자 프로세스의 차단 지연을 줄일 수 있습니다. select()/poll() 호출을 사용할 때 프로세스당 연결 수를 제한할 수도 있습니다.
Nginx 코드 품질이 매우 높고, 코드가 매우 표준화되어 있으며, 기술이 성숙하고, 모듈 확장도 쉽습니다. 특히 언급할만한 가치가 있는 것은 강력한 업스트림 및 필터 체인입니다. 업스트림은 역방향 프록시 및 다른 서버와의 통신과 같은 모듈 작성을 위한 좋은 기반을 마련합니다. 필터 체인의 가장 멋진 부분은 각 필터가 이전 필터의 실행이 완료될 때까지 기다릴 필요가 없다는 것입니다. 이전 필터의 출력을 현재 필터의 입력으로 사용할 수 있으며 이는 Unix 파이프라인과 약간 유사합니다. 이는 모듈이 백엔드 서버에서 전송된 요청 압축을 시작할 수 있고 모듈이 다음을 수행할 수 있음을 의미합니다. 압축된 스트림은 백엔드 서버에 대한 전체 요청을 완료하기 전에 클라이언트로 전달됩니다.
Nginx는 sendfile(Linux 2.2+), accept-filter(FreeBSD 4.1+), TCP_DEFER_ACCEPT(Linux 2.4+) 지원과 같은 OS에서 제공하는 일부 최신 기능을 채택하여 성능을 크게 향상시킵니다.
2. Nginx 설치 및 디버깅
1. PCre 설치

CODE:

./configure<code>./configure<br>  make && make install<br>  cd ../ make && make install cd ../2. nginx 컴파일 및 설치

CODE:./configure --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-openssl=/usr/local/openssl <br>make && make install./configure --user=www --group=www - - 접두사=/usr/local/nginx/ --with-http_stub_status_module --with-openssl=/usr/local/openssl <span>make && make install</span>자세한 모듈 사용자 정의 및 설치는 공식 위키를 참조하세요
3. Nginx 구성 파일 테스트:

CODE:# /usr/local/nginx/sbin/nginx -t  //Debug 配置文件的关键命令需要重点撑握.<br>2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok <br>2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully# /usr/local/nginx/sbin/nginx -t //디버그 구성 파일의 주요 명령은 다음과 같습니다. 마스터하세요.<span>2008/12/16 09:08:35 [info] 28412#0: 구성 파일 /usr/local/nginx/conf/nginx.conf 구문은 괜찮습니다 </span>2008/12/16 09 :08:35 [info] 28412#0: /usr/local/nginx/conf/nginx.conf 구성 파일이 성공적으로 테스트되었습니다.

3 Nginx 시작:

# /usr/local/nginx/sbin/nginxCODE:

4. 구성 파일 수정 및 다시 로드:

# kill -HUP `cat /usr/local/nginx/logs/nginx.pidCODE:
`
3. Nginx Rewrite
1. 기본 태그(플래그) last - 기본적으로 사용되는 플래그입니다.
※Apache의 [L] 표시와 동일하며 다시 쓰기가 완료되었으며 더 이상 후속 규칙과 일치하지 않음을 나타냅니다.
break - Rewirte를 중단하고 더 이상 일치를 계속하지 않습니다.
redirect - 임시 리디렉션
의 HTTP 상태 302를 반환합니다. - 영구 리디렉션의 HTTP 상태 301을 반환합니다.

※원래 URL은 정규식을 지원합니다. 다시 작성된 URL은 정규식을 지원하지 않습니다
2. 정규식 일치, 여기서:
* ~  는 대소문자를 구분하여 일치합니다.
* ~*   는 대소문자를 구분하지 않고 일치합니다.
* !~ 및 !~*는 각각 대소문자를 구분하는 불일치 및 대소문자를 구분하지 않는 불일치입니다.
3. 파일 및 디렉터리 일치 중:
* -f 및 !-f는 파일이 있는지 확인하는 데 사용됩니다.
* -d 및 !-d는 디렉터리가 있는지 확인하는 데 사용됩니다.
* -e 및 !-e는 파일이나 디렉터리가 존재하는지 확인하는 데 사용됩니다.
* -x 및 !-x는 파일이 실행 가능한지 확인하는 데 사용됩니다.

3. Nginx에서 사용할 수 있는 일부 전역 변수는 조건부 판단에 사용될 수 있습니다:

$args<br>$content_length<br>$content_type<br>$document_root<br>$document_uri<br>$host<br>$http_user_agent<br>$http_cookie<br>$limit_rate<br>$request_body_file<br>$request_method<br>$remote_addr<br>$remote_port<br>$remote_user<br>$request_filename<br>$request_uri<br>$query_string<br>$scheme<br>$server_protocol<br>$server_addr<br>$server_name<br>$server_port<br>$uriCODE:$args$content_length
$content_type $document_root$document_uri

$host

$http_user_agentserver<br>{<br>listen 80;<br>server_name linuxtone.org netseek.linuxtone.org;<br>index index.html index.php;<br>root /data/www/wwwroot;<br>if ($host !~ "^www.linxtone.org$") {<br>rewrite ^(.*) http://www.linuxtone.org redirect;<br>}<br>........................<br>}$http_cookie$limit_rate$request_body_file

$request_method

$remote_addr$remote_port $remote_user$request_filename$request_uri$query_string$scheme$server_protocol$server_addr$server_name$server_port$uri4. Nginx 리디렉션 모든 linuxtone.org 및 netseek.linuxtone.org 도메인 이름을 http://www.linuxtone.org로 리디렉션합니다. 코드:서버{listen 80;server_name linuxtone.org netseek.linuxtone.org;index index.html index.php;root /data/www/wwwroot;if ($host !~ "^www.linxtone.org$") {^(.*) http://www.linuxtone.org$1 리디렉션 다시 작성;}...................}5. Nginx 디렉토리는 자동으로 슬래시를 추가합니다.코드:if (-d $request_filename){<br>           rewrite ^/(.*)([^/])$ http://$host// permanent;<br>     }6개의 Nginx 위치
1. 기본 구문: [기본적으로 위의 일반 일치 구문 다시 작성과 일치]
location [=|~|~*|^~] /uri/ { … }
* ~는 대소문자를 구분하여 일치합니다.
* ~*는 대소문자를 구분하지 않습니다.
* !~ 및 !~*는 각각 대소문자를 구분하는 불일치이고 대소문자를 구분하지 않는 불일치입니다.
예 1:
location = / {
#은 검색어 /에만 일치합니다.
#은 검색어 /에만 일치합니다.
}
은 모든 요청이 /로 시작하므로 모든 쿼리와 일치합니다. 그러나 정규식 규칙과 긴 블록 규칙은 우선 순위가 지정되고 쿼리
예 2:
location ^~ /images/ {
#은 /images/로 시작하는 모든 쿼리와 일치하고 검색을 중단합니다.
# 따라서 정규식은 확인되지 않습니다.
#은 /images로 시작하는 모든 쿼리와 일치합니다. / 쿼리를 시작하고 검색을 중지합니다. 정규식은 테스트되지 않습니다.
예 3:
위치 ~* .(gif|jpg|jpeg)$ {
#은 gif, jpg 또는 jpeg로 끝나는 모든 요청과 일치합니다. 그러나 모든
# /images/ 디렉토리에 대한 요청은
}
# gif, jpg 또는 jpeg로 끝나는 모든 요청과 일치합니다.
7. Nginx 만료
1. 파일 형식에 따라 만료CODE:

# 정적 콘텐츠에 대한 만료 헤더 추가

위치 ~* .(js|css|jpg|jpeg|gif|png|swf)$ {# Add expires header for static content<br>location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {<br>    if (-f $request_filename) {<br>       root /data/www/wwwroot/bbs;<br>       expires      1d;<br>       break;<br>    }<br>} if (-f $request_filename) { root /data/www/wwwroot/bbs; 1d 만료;

break;

}# serve static files<br>location ~ ^/(images|javascript|js|css|flash|media|static)/  {<br>root    /data/www/wwwroot/down;<br>        expires 30d;<br>  }}2, 디렉토리 판단 기준
CODE:# 정적인 파일 제공위치 ~ ^/(images|javascript|js|css|flash|media|static)/ {

root /data/www/wwwroot/down;

30일 만료;#Preventing hot linking of images and other file types<br>location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ {<br>        valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost baidu.com;<br>if ($invalid_referer) {<br>      rewrite   ^/   ;<br>     # return   403;<br>      }<br>} }8. Nginx 안티 핫링크

1. 유형location /img/ {<br>    root /data/www/wwwroot/bbs/img/;<br>    valid_referers none blocked server_names *.linuxtone.org http://localhost baidu.com;<br>    if ($invalid_referer) {<br>                   rewrite  ^/  ;<br>                   #return   403;<br>    }<br>}CODE:#이미지 및 기타 파일의 핫링크 방지 유형<p>위치 ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ {</p> 유효한_참조 없음 차단됨 server_names *.linuxtone.org linuxtone.org http://localhost baidu. com;<code>#Preventing hot linking of images and other file types<br>location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ {<br>        valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost ;<br>if ($invalid_referer) {<br>      rewrite   ^/   ;<br>                     }<br>     access_log off;<br>     root /data/www/wwwroot/bbs;<br>expires 1d;<br>     break;<br>}if ($invalid_referer) { rewrite ^/ ; # return 403;
}}2. 다른 디렉토리의 경우

CODE:위치 /img/ { 루트 /data/www/wwwroot/bbs/img/; valid_referers 없음 차단됨 server_names *.linuxtone.org http://localhost baidu com. ; if ($invalid_referer) { rewrite ^/ ; #return 403; }}3. CODE:#이미지 및 기타 파일의 핫링크 방지 유형 <o> 위치 ~ * ^.+. (GIF | JPG | PNG | SWF | FLV | RAR | ZIP) $ { Valid_referrs 없음 차단된 Server_names * .linuxTone.org Linuxtone.org Calhost; $invalid_referer) { 다시 쓰기 ^/ ; } access_log off; root /data/www/wwwroot/bbs;1d 만료; break;}9. Nginx 접근 제어1. Nginx ID 확인CODE:<code>#cd /usr/local/nginx/conf<br>#mkdir htpasswd<br>/usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd/tongji linuxtone <br>#添加用户名为linuxtone<br>New password:   (此处输入你的密码)<br>Re-type new password:   (再次输入你的密码)<br>Adding password for user<br>http://count.linuxtone.org/tongji/data/index.html(目录存在/data/www/wwwroot/tongji/data/目录下)<br>将下段配置放到虚拟主机目录,当访问http://count.linuxtone/tongji/即提示要密验证:<br>location ~ ^/(tongji)/  {<br>                root    /data/www/wwwroot/count;<br>                        auth_basic              "LT-COUNT-TongJi";<br>                        auth_basic_user_file  /usr/local/nginx/conf/htpasswd/tongji;<br>                }2. Nginx는 특정 유형의 파일에 대한 접근을 금지합니다.
예를 들어 Nginx에서는 *.txt 파일에 대한 접근을 금지합니다.

코드:

위치 ~* .(txt|doc)$ {<code>location ~* .(txt|doc)$ {<br>   if (-f $request_filename) {<br>   root /data/www/wwwroot/linuxtone/test;<br>   #rewrite …..可以重定向到某个URL<br>   break;<br>   }<br>} if (-f $request_filename) { root /data/www/wwwroot/linuxtone/test; #rewrite…..ok URL로 리디렉션

break;

}location ~* .(txt|doc)${<br>        root /data/www/wwwroot/linuxtone/test;<br>        deny all;<br>}}방법 2:
CODE:위치 ~ * .(txt| doc)${                                                                                                    > 🎜>CODE:

위치 ~ ^/(WEB-INF)/ {

                         모두 방문 거부 location ~ ^/(WEB-INF)/ { <br>            deny all; <br>}  코드:위치 / {<p> 192.168.1.1 거부;</p> 192.168.1.0/24 허용;<code>location / {<br>    deny    192.168.1.1;<br>    allow   192.168.1.0/24;<br>    allow   10.1.1.0/16;<br>    deny    all;<br>} 10.1.1.0/16 허용; 모두 거부; }
자세한 내용은 위키를 참조하세요. http://wiki.codemongers.com/NginxHttpAccessModule#allow

4. Nginx 다운로드는 동시성 및 속도를 제한합니다

limit_zone   linuxtone  $binary_remote_addr  10m;<br>server<br>       {<br>               listen       80;<br>               server_name  down.linuxotne.org;<br>               index index.html index.htm index.php;<br>               root   /data/www/wwwroot/down;<br>               #Zone limit<br>               location / {<br>                   limit_conn   linuxtone  1;<br>                   limit_rate  20k;<br>               }<br>..........<br>       }CODE :limit_zone linuxtone $binary_remote_addr 10m;server
{ Listen 80; server_ name down.linuxotne.org; index index.html index. php; root /data/www/wwwroot/down;
#Zonelimit location / {limit_conn lin uxtone 1;

                   limit_rate  20k;                                                 ........ .

}location  /  {<br>    autoindex  on;<br>}객실에서는 스레드 하나만 허용되며 각 스레드는 20k입니다.
[참고]limit_zone linuxtone $binary_remote_addr 10m ; 이는 기본
5에서 정의할 수 있습니다. Nginx는 Apache CODE:
location / {<span> autoindex on;} </span>6.
의 파일 크기 제한은 기본 구성 파일에 다음을 추가하고 비즈니스에 맞게 특정 크기를 조정하십시오.
client_max_body_size 10m;
10. Nginx 로그 처리
1.Nginx 로그 잘라내기

#contab -e 59 23 * * * /usr/local/sbin/logcron.sh /dev/null 2>&1[root@count ~]# cat /usr/local/sbin/logcron.sh코드:#!/bin/bash<br>log_dir="/data/logs"<br>time=`date +%Y%m%d`  <br>/bin/mv  ${log_dir}/access_linuxtone.org.log ${log_dir}/access_count.linuxtone.org.$time.log<br>kill -USR1 `cat  /var/run/nginx.pid`더 많은 로그 분석 및 처리에 대해 관심을 가져주세요(토론에 참여하셔도 좋습니다):http://bbs.linuxtone.org/forum-8-1.html
2.AWSTATS를 사용하여 NGINX 로그 분석
Nginx 로그 형식을 설정한 후 awstats를 사용하여 분석합니다.
참고: http: //bbs.linuxtone .org/thread-56-1-1.html
3. Nginx에서 일부 로그를 기록하지 않는 방법
로그가 너무 많아서 G가 여러 개 있습니다. 하루에 다음과 같이 적게 기록하세요. 서버{} 섹션
location ~ .*.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF에 구성을 작성하세요. )$
{
access_log off;
}
11.Nginx 캐시 서비스 구성
파일을 로컬로 캐시해야 하는 경우 다음 하위 매개변수를 추가해야 합니다.

CODE:

proxy_store on;<code>proxy_store on;<br>proxy_store_access user:rw group:rw all:rw;<br>proxy_temp_path 缓存目录;proxy_store_access 사용자: rw group:rw all:rw;proxy_temp_path 캐시 디렉터리;그 중
proxy_store on은 캐시를 로컬 기능으로 활성화하는 데 사용되며
proxy_temp_path는 캐시 위치를 지정하는 데 사용됩니다. 예: Proxy_temp_path html;
이전 구성 후에는 파일이 로컬 디스크에 캐시되지만 각 요청은 여전히 ​​파일을 원격 끝으로 가져옵니다. 파일을 원격으로 가져오려면

CODE:proxy_pass:<br>if ( !-e $request_filename) {<br>    proxy_pass  http://mysvr;<br>}proxy_pass:<span>if( !-e $request_filename)를 수정해야 합니다. {</span>proxy_pass http://mysvr;<br>} 즉, Proxy_pass를 조건부로 실행하도록 변경됩니다. 이 조건은 요청한 파일이 지정한 디렉터리에 없을 때입니다. 로컬 Proxy_temp_path는 백엔드에서 가져옵니다.
자세한 내용은 ncache 관련 내용을
http://bbs.linuxtone에서 참고하시기 바랍니다. org Posts.
12. Nginx 로드 밸런싱
1. Nginx 로드 밸런싱에 대한 기본 지식
현재 nginx의 업스트림이 지원합니다. 4가지 배포 방식
1), 폴링(기본값)
백엔드 서버가 진행되면 각 요청마다 다른 백엔드 서버에 하나씩 할당됩니다. down 은 자동으로 제거될 수 있습니다.
2), 가중치
는 폴링 확률을 지정하며 가중치는 접속률에 비례하며 백엔드 서버 성능이 고르지 않을 때 사용됩니다.
2), ip_hash
각 요청은 접속한 IP의 해시 결과에 따라 할당되므로 각 방문자는 백엔드 서버에 고정적으로 접속할 수 있으며, 세션 문제를 해결할 수 있습니다.
3), fair(타사)
백엔드 서버의 응답 시간에 따라 요청을 할당하고, 응답 시간이 짧은 요청을 먼저 할당합니다.
4), url_hash(타사)

2. Nginx 로드 밸런싱 인스턴스 1upstream bbs.linuxtone.org {#定义负载均衡设备的Ip及设备状态<br>    server 127.0.0.1:9090 down;<br>    server 127.0.0.1:8080 weight=2;<br>    server 127.0.0.1:6060;<br>    server 127.0.0.1:7070 backup;<br>}CODE:upstream bbs. linuxtone.org {#로드 밸런싱 장치의 IP 및 장치 상태 정의 <br> server 127.0.0.1:9090 down;<span> server 127.0.0.1:8080 Weight=2;</span> server 127.0.0.1:6060; <span> 서버 127.0.0.1:7070 백업;</span>}

proxy_pass http://bbs.linuxtone.org/ 추가;
각 장치의 상태는 다음과 같이 설정됩니다.
a) Down은 프런트 서버가 일시적으로 로드에 참여하지 않는다는 의미입니다
b) 무게의 기본값은 1입니다. 무게가 클수록 하중의 무게도 커집니다.
c) max_fails: 허용되는 요청 실패 횟수는 기본적으로 1입니다. 최대 횟수를 초과하면 Proxy_next_upstream 모듈에서 정의한 오류가 반환됩니다.
d ) failure_timeout: max_fails failures 이후에는 일시정지 시간입니다.
e) 백업: 백업이 아닌 다른 머신이 모두 다운되거나 사용 중일 때 백업 머신을 요청합니다. 따라서 이 기계의 압력은 가장 낮습니다.
nginx는 사용되지 않는 서버에서 사용할 수 있도록 여러 그룹의 로드 밸런싱을 동시에 설정하는 것을 지원합니다.
client_body_in_file_only On으로 설정하면 디버깅을 위해 클라이언트 게시물의 데이터를 파일에 기록할 수 있습니다.
client_body_temp_path 기록 파일의 디렉터리를 설정하고 설정할 수 있습니다. 3개 수준의 디렉터리
위치가 URL과 일치하면 리디렉션하거나 새 프록시 로드 밸런싱을 수행할 수 있습니다
3. Nginx 로드 밸런싱 인스턴스 2
액세스한 URL의 해시 결과에 따라 요청을 분산하여 각 URL이 동일한 백엔드 서버로 연결되도록 하면 백엔드 서버를 캐시할 때 더 효과적이며 성능을 향상하는 데에도 사용할 수 있습니다. Squid 캐시 적중률

간단한 로드 밸런싱 예시:#vi nginx.conf //nginx 기본 구성 파일 코어 구성CODE:……….<br>#loadblance my.linuxtone.org<br>       upstream  my.linuxtone.org  {<br>       ip_hash;<br>       server   127.0.0.1:8080;<br>       server   192.168.169.136:8080;<br>       server   219.101.75.138:8080;<br>       server   192.168.169.117;<br>       server   192.168.169.118;<br>       server   192.168.169.119;<br>     }<br>…………..<br>include          vhosts/linuxtone_lb.conf;<br>………<br># vi proxy.conf<br>proxy_redirect off;<br>proxy_set_header Host $host;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>client_max_body_size 50m;<br>client_body_buffer_size 256k;<br>proxy_connect_timeout 30;<br>proxy_send_timeout 30;<br>proxy_read_timeout 60;<br>proxy_buffer_size 4k;<br>proxy_buffers 4 32k;<br>proxy_busy_buffers_size 64k;<br>proxy_temp_file_write_size 64k;<br>proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;<br>proxy_max_temp_file_size 128m;<br>proxy_store on;<br>proxy_store_access   user:rw  group:rw  all:r;<br>#nginx cache               <br>#client_body_temp_path  /data/nginx_cache/client_body 1 2;<br>proxy_temp_path /data/nginx_cache/proxy_temp 1 2;#vi linuxtone_lb.conf

CODE:

server<br>    {<br>        listen  80;<br>        server_name my.linuxtone.org;<br>        index index.php;<br>        root /data/www/wwwroot/mylinuxtone;<br>        if (-f $request_filename) {<br>            break;<br>           }<br>        if (-f $request_filename/index.php) {<br>          rewrite (.*) /index.php break;<br>        }<br>        error_page 403 http://my.linuxtone.org/member.php?m=user&a=login;<br>        location / {<br>           if ( !-e $request_filename) {<br>               proxy_pass http://my.linuxtone.org;<br>               break;<br>           }<br>           include /usr/local/nginx/conf/proxy.conf;<br>        }<br>}
13. Nginx 단순 최적화

1. 파일 크기(nginx의 파일 크기 줄이기)
기본 nginx 컴파일 옵션은 실제로 디버그 모드(-g)를 사용합니다(디버그 모드는 많은 추적 및 ASSERT를 삽입합니다). 컴파일 후 하나의 nginx는 몇 메가바이트. nginx의 디버그 모드 컴파일을 제거합니다. 컴파일 후에는 auto/cc/gcc에 몇 백 K
가 있습니다. 마지막 몇 줄은 다음과 같습니다.
# debug

CODE:

CFLAGS=”$CFLAGS -g”이 줄을 주석 처리하거나 삭제하고 다시 컴파일하세요.
2. Nginx 헤더 변장 서버 수정
1) nginx.h 수정

CODE:

#vi nginx- 0.7 .30/src/core/nginx.h<code>#vi nginx-0.7.30/src/core/nginx.h<br>#define NGINX_VERSION      "1.8"<br>#define NGINX_VER          "LTWS/" NGINX_VERSION<br>#define NGINX_VAR          "NGINX"<br>#define NGX_OLDPID_EXT     ".oldbin"#define NGINX_VERSION "1.8"#define NGINX_VER "LTWS/" NGINX_VERSION#define NGINX_VAR "NGINX"
#define NGX_OLDPID _EXT ".oldbin" 2) nginx_http_header_filter_module 수정
#vi nginx-0.7.30/src/http/ngx_http_header_filter_module.c

은 다음과 같습니다static char ngx_http_server_string[] = "Server: nginx" CRLF;CODE:

수정됨 static char ngx_http_server_string[] = "Server: LTWS" CRLF;CODE:
a) nginx_http_header_filter_module 수정
#vi nginx -0.7 .30/src/http/ngx_http_special_response.c

은 다음과 같습니다: static u_char ngx_http_error_full_tail[] =<br>"
CODE:
static u_char ngx_http_error_full_tail[] =
"

" NGINX_VER "
" CRLF

" " CRLF

"" CRLFstatic u_char ngx_http_error_tail[] =<br>";
코드:
static u_char ngx_http_error_tail[] =
"

nginx
" CRLF"" CRLF"" CRLF

;

수정됨:코드:static u_char ngx_http_error_full_tail[] =<br>"
"NGINX_VER"
" CRLF
"
http://www.linuxtone.org
" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =<br>"
LTWS
" CRLF
"" CRLF
"" CRLF
;수정 후 환경을 다시 컴파일합니다.
404 오류가 발생하면 렌더링이 표시됩니다(오류 페이지가 지정되지 않은 경우):


404.png


curl 명령을 사용하여 서버 헤더 보기


curl.png


3. 특정 CPU에 대한 CPU 유형 컴파일 최적화를 지정합니다.
GCC 컴파일에서 사용됩니다. 기본 nginx 매개변수는 -O
추가 최적화가 필요한 경우 다음 두 매개변수를 사용할 수 있습니다
--with-cc-opt='-O3'
--with-cpu-opt=opteron
컴파일 대상을 특정 CPU로 만들고 GCC 최적화를 높입니다.
이 방법은 성능만 향상시킬 뿐 성능은 크게 향상되지 않습니다.
CPUD 유형 결정: # cat /proc/cpuinfo | grep "model name"
컴파일 최적화 매개변수 참조: http://en.gentoo-wiki.com/wiki/Safe_CFlags
4.Tcmalloc은 Nginx 성능을 최적화합니다

CODE:

# wget http: //download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz# wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz<br># tar zxvf libunwind-0.99-alpha.tar.gz<br># cd libunwind-0.99-alpha/<br># CFLAGS=-fPIC ./configure<br># make CFLAGS=-fPIC<br># make CFLAGS=-fPIC install<br># wget http://google-perftools.googlecode.com/files/google-perftools-0.98.tar.gz<br># tar zxvf google-perftools-0.98.tar.gz<br># cd google-perftools-0.98/<br># ./configure<br># make && make install<br># echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf<br># ldconfig<br># lsof -n | grep tcmalloc# tar zxvf libunwind-0.99-alpha.tar.gz# cd libunwind -0.99-alpha/# CFLAGS=-fPIC ./configure
# make CFLAGS=-fPIC# make CFLAGS=-fPIC install# wget http://google-perftools.googlecode. com/files/google-perftools-0.98.tar.gz
# tar zxvf google-perftools-0.98.tar.gz# cd google-perftools-0.98/# ./configure
# make && make install# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf# ldconfig
# lsof -n | code>컴파일 nginx는 google_perftools_module을 로드합니다.
./configure --with-google_perftools_module

기본 구성 파일에 nginx.conf를 추가하고 다음을 추가합니다.google_perftools_profiles /path/to/profile;5. 커널 매개변수 최적화# vi /etc/sysctl.conf #다음을 추가합니다. 마지막 내용: CODE:net.ipv4.tcp_fin_timeout = 30<br>net.ipv4.tcp_keepalive_time = 300<br>net.ipv4.tcp_syncookies = 1<br>net.ipv4.tcp_tw_reuse = 1<br>net.ipv4.tcp_tw_recycle = 1<br>net.ipv4.ip_local_port_range = 5000 65000# 구성 즉시 적용
/sbin/sysctl -p
14 고성능 LEMP 구축 방법
참조: http://www.linuxtone.org/lemp/lemp.pdf
1. 전체 구성 스크립트 다운로드 제공: http://www. linuxtone.org/lemp/scripts.tar.gz
2. (가상 호스트, 안티 리칭, 재작성, 액세스 제어, 로드 밸런싱
을 포함한 NGINX 공통 구성 예제 제공) 관련 프로그램 static 등)을 약간만 수정하면 온라인으로 적용할 수 있습니다. 3. 원본 xcache를 EA로 교체하고 관련된 간단한 튜닝 스크립트 및 구성 파일을 제공합니다.
더 많은 업데이트 정보를 보려면 http://www.linuxtone.org
Nginx 모니터링
1. RRDTOOL+Perl 스크립트 그리기 모니터링
rrdtool을 먼저 설치하세요. 이 글에서는 rrdtool을 소개하지 않습니다.
#cd /usr/ local/sbnin
#wget http://blog.kovyrin.net/files/mrtg/rrd_nginx.pl.txt
#mv rrd_nginx .pl.txt rrd_nginx .pl
#chmod a+x rrd_nginx.pl
#vi rrd_nginx.pl //경로를 설정하도록 스크립트 파일 구성
#!/usr/bin/perl
RRD 사용,
LWP::UserAgent 사용,
# rrdtool 데이터베이스 위치 정의
my $rrd = '/data/www/wwwroot/nginx/rrd';
# 이미지 위치 정의
my $img = '/data/www/wwwroot/nginx/html';
# nginx 통계 URL 정의
my $URL = "http://219.232 .244.13/nginx_status";
…………
[참고] 상황에 맞게 해당 경로를 수정하세요.
#crontab –e //다음 추가
* * * * * /usr/local/sbin/rrd_nginx.pl
이후 crond를 다시 시작하고 nginx 가상 호스트를 구성합니다. /data/www/wwwroot/nginx/html 디렉터리를 가리키고 crond를 통해 자동으로 perl 스크립트를 실행하여 많은 그림을 생성합니다.
http://xxx/ connections-day.png를 사용하여 서버 상태 다이어그램을 확인하세요.
2. 공식 Nginx-rrd 모니터링 서비스(다중 가상 호스트)(권장)
홈페이지: http://www.nginx.eu/nginx -rrd.html
이 솔루션은 실제로 위의 모니터링 솔루션을 기반으로 한 개선 및 개선입니다. 또한 rrdtool 그리기 도구와 해당 perl 모듈을 먼저 설치한 후 다음 작업을 수행합니다.
# yum install perl-HTML*
먼저 생성된 인벤토리 및 이미지 저장 디렉터리를 생성하세요CODE:

#mkdir -p /data/ www /wwwroot/nginx/{rrd,html}

#cd /usr/local/sbin#mkdir -p /data/www/wwwroot/nginx/{rrd,html}<br>#cd /usr/local/sbin<br>#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz<br>#tar zxvf nginx-rrd-0.1.4.tgz<br>#cd nginx-rrd-0.1.4<br>#cd etc/<br>#cp nginx-rrd.conf /etc<br>#cd etc/cron.d<br>#cp nginx-rrd.cron /etc/cron.d<br>#cd /usr/local/src/nginx-rrd-0.1.4/html<br># cp index.php /data/www/wwwroot/nginx/html/<br>#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin<br>#cp * /usr/sbin/#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz #tar zxvf nginx-rrd-0.1.4.tgz#cd nginx-rrd-0.1.4

#cd etc/

#cp nginx-rrd.conf /etc#####################################################<br>#<br># dir where rrd databases are stored<br>RRD_DIR="/data/www/wwwroot/nginx/rrd";<br># dir where png images are presented<br>WWW_DIR="/data/www/wwwroot/nginx/html";<br># process nice level<br>NICE_LEVEL="-19";<br># bin dir<br>BIN_DIR="/usr/sbin";<br># servers to test<br># server_utl;server_name<br>SERVERS_URL="http://219.32.205.13/nginx_status;219.32.205.13  http://www.linuxtone.org/nginx_status;www.linuxtone.org""# cd etc/cron.d#cp nginx-rrd.cron /etc/cron.d#cd /usr/local/src/nginx-rrd-0.1.4/html
# cp 인덱스. php /data/www/wwwroot/nginx/html/#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin#cp * /usr/sbin/
#vi /etc/nginx-rrd.conf코드:
##################### #########################<span>#</span># rrd 데이터베이스가 저장된 디렉토리<span>RRD_DIR="/ data/ www/wwwroot/nginx/rrd";</span># png 이미지가 표시되는 디렉토리<br>WWW_DIR="/data/www/wwwroot/nginx/html";<span># 프로세스 좋은 수준</span>NICE_LEVEL =" -19";<br># bin dir<span>BIN_DIR="/usr/sbin";</span>테스트할 서버 #개<br># server_utl;server_name<span>SERVERS_URL="http://219.13/ nginx_status;219.32.205.13 http://www.linuxtone.org/nginx_status;www.linuxtone.org""</span>//특정 상황에 따라 조정하세요.
SEVERS_URL 형식 http://domain1/nginx_status;domain1 http://domain2/nginx_status;domain2

location /nginx_status {<br>stub_status on;<br>access_log off;<br>allow 192.168.1.37;<br>deny all;<br>}이 형식은 여러 가상 호스트의 연결 상태를 모니터링합니다.

# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`<br># wget http://forums.cacti.net/download.php?id=12676<br># tar xvfz cacti-nginx.tar.gz<br># cp cacti-nginx/get_nginx_socket_status.pl /data/cacti/scripts/<br># cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/<br># chmod 755 /data/cacti/scripts/get_nginx* 초점 crond 서비스를 시작한 다음 http://219.32.205.13/nginx/html/을 통해 액세스하세요. 구성 과정은 간단합니다!

3. CACTI 템플릿 모니터링 NginxNginx_status 상태를 사용하여 그림을 그려 CACTI 모니터링 구현http_stub_status_module을 허용하도록 nginx 컴파일# vi /usr/local/nginx/conf/nginx.confCODE:location /nginx_status {stub_status on;access_log off ;192.168.1.37 허용;모두 거부;}CODE:# kill -HUP `cat /usr/local/nginx/logs/nginx .pid `# wget http://forums.cacti.net/download.php?id=12676# tar xvfz cacti-nginx.tar.gz# cp cacti-nginx/get_nginx_socket_status.pl /data /cacti/scripts/# cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/# chmod 755 /data/cacti/scripts/get_nginx*탐지 플러그인 코드:# /data/cacti/scripts/get_nginx_clients_status.pl http://192.168.1.37/nginx_status선인장 관리 패널에서
cacti_graph_template_nginx_clients_stat.xml 가져오기
cacti_graph_template_nginx_sockets_stat.xml
16. & 오류 처리
1. 400 잘못된 요청 오류의 원인과 해결 방법
nginx.conf 관련 설정을 다음과 같이 구성합니다.
client_header_buffer_size 16k ;
large_client_header_buffers 4 64k;
특정 상황에 따라 조정하세요. 일반적으로 값을 적절하게 조정하세요.
2. Nginx 502 잘못된 게이트웨이 오류
proxy_next_upstream 오류 시간 초과 valid_header http_500 http_503;
또는 다음 설정을 시도하세요.
large_client_header_buffers 4 32k;
3.413 Nginx에서 요청 엔터티가 너무 큼 오류
이 오류는 일반적으로 파일을 업로드할 때 발생합니다.
Nginx 기본 구성 파일 Nginx.conf를 편집하고 http{} 섹션을 찾아
client_max_body_size 10m를 추가합니다. //필요에 따라 크기를 설정합니다. .
php를 실행하는 경우 client_max_body_size 크기는 php.ini에서 다음 값의 최대값과 일치하거나 약간 더 커야 오류가 발생하지 않습니다. 제출된 데이터의 크기가 일관되지 않습니다.
post_max_size = 10M
upload_max_filesize = 2M
4.504 게이트웨이 시간 초과(nginx) 해결
discus 포럼을 업그레이드할 때 이 문제가 발생했습니다
일반적으로 이러한 상황은 nginx의 기본 fastcgi 프로세스의 응답 버퍼가 너무 작기 때문에 발생할 수 있습니다. 이로 인해 fastcgi 프로세스가 느려지게 됩니다. 귀하의 fastcgi 서비스가 이 정지를 잘 처리하지 못하면 오늘날의 웹사이트, 특히 일부 포럼의 경우 504 게이트웨이 시간 초과
가 발생할 가능성이 높습니다. 콘텐츠가 많고 페이지에 수백 KB가 있을 수도 있습니다.
기본 fastcgi 프로세스 응답 버퍼는 8K이며 더 크게 설정할 수 있습니다.
nginx.conf에서 fastcgi_buffers 8 128k를 추가하세요
이것은 fastcgi 버퍼를 8×128k로 설정한다는 의미입니다
물론 특정 즉각적인 작업을 수행하는 경우 nginx의 시간 초과 매개변수를 늘려야 할 수도 있습니다(예: 60으로 설정). second : send_timeout 60;
이 두 매개변수를 조정한 결과 더 이상 시간 초과가 표시되지 않습니다. 효과는 좋다고 할 수 있지만 다른 요인 때문일 수도 있습니다. 현재 nginx에 대한 정보가 많지 않습니다. 결과를 얻으려면 장기간의 경험 축적이 필요합니다.
5. Nginx 프록시 사용 방법
친구가 포트 8080, IP: 192.168.1.2:8080, 다른 컴퓨터 IP: 192.168.1.8에서 tomcat을 실행하고 있습니다. 내 친구가 http: //192.168.1.8 구성은 다음과 같습니다.
192.168.1.8의 nginx.conf 구성은 다음과 같습니다.

CODE:

server {server {<br>listen 80;<br>server_name java.linuxtone.org<br>location / {<br>proxy_pass http://192.168.1.2:8080;<br>include /usr/local/nginx/conf/proxy.conf;<br>}<br>}listen 80;server_name java.linuxtone.orglocation / {
proxy_pass http://192.168.1.2:8080;include /usr/local/nginx/ conf/proxy.conf;}
}6. Nginx 로그를 닫는 방법
access_log /dev/null;
17. 관련 리소스 다운로드 1.nginx 구성 예제 및 스크립트 다운로드:
# wget
http://www .linuxtone.org/lemp/scripts.tar.gz #이 스크립트 예 정기 업데이트.
[첨부]:

이 문서는 정기적으로 업데이트됩니다. nginx 팁의 내용을 풍부하게 하기 위해 친구들의 귀중한 의견 제공을 환영합니다.

최신 문서 릴리스에 주의하세요: http://bbs.linuxtone.org 위 내용은 Nginx 공통 응용 기술 가이드 [Nginx 팁] 제2판을 소개한 것으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿