nginx 상세 설명 (2)

9338 단어 nginx로그 모듈
2.7 로그 모듈:
문서 연결:http://nginx.org→documentation→ngx_http_log_module
변수 의미:
    $remote_user: 클 라 이언 트 사용자 이름 은 보통 "-" 입 니 다.
    $time_local  :클 라 이언 트 의 방문 시간, 형식 은 보통 '26 / Jun / 2014: 14: 44: 34 + 0800' 입 니 다.
    $request     :클 라 이언 트 가 요청 한 URI 입 니 다.
        html 페이지 요청 시 "/ index. html HTTP / 1.1",
        php 페이지 를 '/ index. php? =' 로 요청 합 니 다.PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1”
    $status      :응답 상태 코드.여기 가 정상 이면 200 이 야.
    $body_bytes_sent: 서버 가 클 라 이언 트 에 보 낸 바이트 수 입 니 다.
    $http_referer: 클 라 이언 트 의 출처 를 인용 하여 클 라 이언 트 가 어디에서 왔 는 지 설명 합 니 다. 아마도 체인 일 것 입 니 다.
        예컨대http://172.16.100.18/index.html첨가http://172.16.100.1/index.html웹 페이지 의 콘 텐 츠 링크 는 172.16.100.1 의 로그 에서 요청 클 라 이언 트 가 Real - client - IP 가 아 닌 172.16.100.18 임 을 볼 수 있다.
        Real - client - IP 가 php 요청 내용 이 라면 로그 에 172.16.100.1 자신 에 대한 요청 이 포 함 될 수 있 습 니 다.
        다음은http://172.16.100.18/index.htmlhtml 하이퍼링크 언어 사용 가능 (영어 따옴표 주의):
<html>
    <head><title>Welcome</title></head>
    <body>
        <h1><font size="10" color="blue">    </font></h1>
        <a href="http://172.16.100.1/index.html">index.html</a>
        <br/><a href="http://172.16.100.1/index.php">index.php</a>
    </body>
</html>

    $http_user_에이전트: 사용자 의 브 라 우 저 모델 은 일반적으로 국산 브 라 우 저 를 먼저 분석 한 다음 에 외국 브 라 우 저 입 니 다.
        여행: Mozilla / 5.0 (Windows NT 6.1; WOW 64) AppleWebKit / 537.36 (KHTML, like Gecko) Maxthon / 4.4.2.800 Chrome / 30..1599.101 Safari / 537.36
        IE10:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0)
    $http_x_forwarded_for: nginx 가 백 엔 드 서버 일 때 실제 클 라 이언 트 IP 를 기록 해 야 할 때,
        프론트 엔 드 nginx 프 록 시 서버 는 location 세그먼트 에 추가 해 야 합 니 다.
        "proxy_set_header realip  $remote_addr"
        이 필드 도 "$http realip" 로 변경 해 야 합 니 다.
        백 엔 드 가 Apache 라면 로그 형식 정의 세그먼트 combined 에 '% {realip} i' 를 추가 하여 실제 클 라 이언 트 IP 를 기록 해 야 합 니 다.
    access_log  off 는 방문 로 그 를 닫 는 것 을 표시 합 니 다. 예 를 들 어 방문 할 때:http://IP/status시.
 
2.8 접근 제어 모듈
ngx_http_access_module (IP 기반 인증)
location / {
    root    /web/htdocs;
    index   index.html;
    deny    192.168.1.1;
    allow   192.168.1.0/24;
    deny    172.16.100.5;
    allow   172.16.100.0/16;
    deny all;
}

nginx_http_auth_basic_module (사용자 인증 기반)
location /yinsi {
    root    /web/htdocs;
    index    index.html;
    auth_basic    "user_auth";
             basic  ,    authname   
    auth_basic_user_file    /etc/nginx/.user_auth;
	          
	       Apache htpasswd  。
}

#htpasswd -c -m /etc/nginx/.user_auth yh
        。
#elinks

2.9 자동 색인 기능
autoindex
    사용자 가 접근 하 는 경로 에서 홈 페이지 를 사용 하지 않 거나 홈 페이지 파일 이 없 으 면 경로 에 있 는 모든 파일 을 목록 으로 표시 할 수 있 습 니 다.이런 방식 은 비교적 위험 하 다. 일반적으로 극력 피 하 는 것 이지 만 다운로드 사이트 로 서 는 좋다.
location /download {
    root    /www/htdocs/download;
    autoindex    on;
    autoindex    localtime;               
    autoindex_exact_size on;           ,       。
}
#elinks http://IP/download

3.0 사용자 정의 응답 첫 번 째 부분 추가:
ngx_http_headers_module
    형식:
    add_header custom-header-name  nginx 내장 변수
       추가 할 수 있 는 "nginx 내장 변수" 머리 정보 가 많 습 니 다. 이 변 수 는 이 경 로 를 통 해 얻 을 수 있 습 니 다: ngxhttp_core_module→Embedded Variables
add_header server_ip $server_addr       IP   ,           

  Google    →F12→Network→index.html→Response Headers→Real-Client-IP

3.1 재 작성 모듈:
nginx_http_rewrite_module:
    URL 재 작성 완료: 예 를 들 어 원래 방문 한 것 은?http://www.yh_old. com / bbs / index. html 이지 만 여러 가지 이유 로 bbs 디 렉 터 리 가 존재 하지 않 거나 도 메 인 이름 이 변경 되 었 을 때 오래된 URL 을 새 URL 로 다시 쓸 수 있 습 니 다.http://www.yh_new/images/index.html。이 부분 이 야 말로 어 려 운 부분 이다.
Syntax:rewrite regex replacement [flag];
    
Default:―    
Context:server, location, if

간단 한 재 작성:
location / {
    root    /web/htdocs;
    index   index.html index.php;
    rewrite /bbs/(.*)$ /images/$1 last;
}
      http://IP/bbs/        ,    http://IP/images/   。             ,         "\1"     "$1"。

규칙 을 다시 쓰 는 것 은 여러 가지 가 있 기 때문에 각 규칙 간 의 관 계 를 정의 하 는 것 이 필수 적 이다.
첫 번 째 상황:
last: 첫 번 째 재 작성 이 끝 난 후 바로 뛰 어 내 린 다음 새로운 URL 을 사용 하여 rewrite 규칙 과 일치 합 니 다.
brak: 첫 번 째 재 작성 이 끝 난 후에 새로운 URI 에 직접 접근 하 였 습 니 다. rewrite 규칙 이 일치 하지 않 습 니 다.
      location 뒤에 구체 적 인 경로 가 있 거나 IF 구문 에서 break 를 사용 해 야 합 니 다.
redirect: 다시 쓰 는 것 이 아니 라 교체 메커니즘 을 사용 합 니 다.last 와 유사 합 니 다. 첫 번 째 교체 후 다시 한 번 확인 해 야 합 니 다.
           302 코드 를 되 돌려 주 고 임시로 방향 을 바 꾸 는 것 도 디 스 플레이 방향 을 바 꾸 는 것 이 라 고 합 니 다.
permanent: 301 코드 를 되 돌려 주 고 영구적 으로 방향 을 바 꾸 는 것 을 암시 적 으로 방향 을 바 꾸 는 것 이 라 고도 합 니 다.
server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}
  :    server ,    media audio          mp3   ,   last         。
location /download/ {
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
    return  403;
}
      http://IP/download        , rewrite                URL  。  ,     10  ,  500  。

IF 판단:
Syntax:if (condition) { ... }
    
Default:―    
Context:server, location
...
    if ($request_uri ~* \.(jpg|png|gif|html)$) {
        ...
    }
...
 URI  if  ,         , ...
     location  ,      ,        。

condition 의 정규 일치:
~  :지정 한 정규 모드 와 일치 할 때 '진짜' 로 돌아 갑 니 다.일치 할 때 문자 의 대소 문 자 를 구분 합 니 다.
~ *: 기능 은 같 지만 일치 할 때 구분 되 지 않 는 문자 의 대소 문자 입 니 다.
!~ :지정 한 정규 모드 와 일치 하지 않 을 때 돌아 오 는 것 이 '진짜' 입 니 다.대소 문 자 를 구분 하 다.
!~*:위 와 같 지만 대소 문 자 는 구분 하지 않 습 니 다.
condition 의 파일 및 디 렉 터 리 일치:
-f,!-f: 지정 한 경로 가 존재 하 는 지 판단 하고 파일 입 니 다.
-d,!-d: 지정 한 경로 가 존재 하 는 지 판단 하고 디 렉 터 리 입 니 다.
-e,!-e: 지정 한 경로 의 디 렉 터 리 나 파일 이 존재 하 는 지 판단 합 니 다.
-x,!-x: 지정 한 경로 의 파일 이 존재 하 는 지 판단 하고 실행 할 수 있 습 니 다.
IF 의 실제 응용 장면 은 nginx 의 내 장 된 변수 값 과 일치 하 는 데 사 용 됩 니 다. 이것 은 location 에서 할 수 없 는 것 입 니 다.
if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}
                ,       ,   IE,    msie   
    
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
}
           cookie  ,
    
if ($request_method = POST) {
    return 405;
}
           POST ,   405  。
    
if ($request_method == PUT) {
    proxy_pass http://upload.yh.com;
}    
              PUT  ,        upstream。
    #curl -T /etc/fstab http://IP
         
if ($slow) {
    limit_rate 10k;
}
    $slow      ( 1 0),  1 ,      。
    
if ($invalid_referer) {
    return 403;
}
          ,   403   。

위 에 return, set 가 있 고 재 작성 모듈 에 속 하기 때문에 설명 이 필요 합 니 다.
return: 클 라 이언 트 에 게 지정 한 상태 코드 (code) 를 처리 하지 않 고 되 돌려 줍 니 다. URL 에 변 수 를 포함 할 수 있 습 니 다.
Syntax:return code [text];
return code URL;
return URL;
    
Default:―    
Context:server, location, if

set: 변 수 를 정의 하고 값 을 부여 합 니 다. 값 은 텍스트, 변수 또는 텍스트 변수 혼합 체 일 수 있 습 니 다.
Syntax:set $variable value;
    
Default:―    
Context:server, location, if

3.2 상태 정보 출력:
ngx_http_stub_status_module:
Syntax:stub_status;
    
Default:―    
Context:server, location
location /status {
    stub_status    on;
    access_log     off;
    auth_basic     "stub_user_auth";
    auth_basic_user_file    /etc/nginx/.stub_user_auth;
}
                         ,     ,        。

#elinks http://IP/status
Active connections: 3 
server accepts handled requests
 3 3 1 
Reading: 0 Writing: 1 Waiting: 2
Active connections:        。
accepts:         。
handled:         。
requests:            。(  tcp    ,       )
reading:          。
writing:         。
waiting:     reading+writing     。

3.3 압축 모듈:
ngx_http_gzip_module
Syntax:gzip on | off;
    
Default:gzip off;
    
Context:http, server, location, if in location

gzip    on|off;
    이 모듈 을 사용 할 지 여부 입 니 다.
gzip_buffers  number  size;
    캐 시 압축 응답 버퍼 의 수량 과 크기 를 지정 합 니 다. 설정 하지 않 으 면 캐 시 영역 크기 는 페이지 크기 이 고 환경 에 따라 4k 또는 8k 일 수 있 습 니 다.
gzip_comp_level  level;
    압축 단계 1 - 9.
gzip_disable  regex;
    정규 에 부합 되 는 것 은 압축 을 지원 하지 않 는 사장 IE6 에 적응 하기 위해 압축 하지 않 는 다.
gzip_min_length  length;
    압축 해 야 할 파일 의 최소 값 입 니 다. 그렇지 않 으 면 압축 이 무의미 하고 CPU 만 낭비 합 니 다.
gzip_http_version  1.0|1.1;
    HTTP 요청 버 전에 따라 gzip 압축 을 사용 할 지 여부 입 니 다.    HTTP 버 전이 1.0 일 때 Vary: Accept - Encoding 이 설정 되 지 않 았 습 니 다. 이것 은 일부 프 록 시 캐 시 를 무효 화 할 수 있 습 니 다. add 를 사용 할 수 있 습 니 다.header, 마찬가지 로 이 버 전 을 사용 할 때 Content - Length 도 설정 되 어 있 지 않 기 때문에 Keepalive 는 이 버 전에 서 사용 할 수 없습니다.
gzip_proxied  off;
    일부 요청 과 응답 에 따라 프 록 시 요청 에 대한 응답 을 압축 할 지 여 부 를 결정 합 니 다. 그 다음 에 선택 할 수 있 는 인자 가 많 습 니 다.
압축 여 부 를 확인 하 는 방법:
    F12 → 네트워크 → 웹 페이지 → Accept - Encoding: gzip, deflate, sdch

좋은 웹페이지 즐겨찾기