12 linux - nginx 서버 설치 | 조작

18569 단어
nginx - 고성능 WEB 서버
1 프로필 기본 편: Nginx 소개 Nginx 컴 파일 설치 Nginx 통합 PHP Nginx 신호 제어
   :
Nginx      
Nginx    
Nginx  gzip  

   :
Nginx        
Nginx Rewrite  
Nginx memcached

   :
Nginx     
Nginx    
Nginx       

2 컴 파일 설치
linux># cd /usr/local/src
linux># wget http://nginx.org/download/nginx-1.14.2.tar.gz
linux># tar zxvf nginx-1.14.2.tar.gz
linux># cd nginx-1.14.2
linux># ./configure --prefix=/usr/local/nginx 【  】
         HTTP rewrite     PCRE library
          
linux># yum install pcre 【  pcre,       】【ubuntu   yum       】
linux># yum install pcre-devel【   】【     ,       】
linux># ./configure --prefix=/usr/local/nginx 【  again】
linux># make && make install 【  】

3. 간단 한 명령
3.1 시동
linux># cd /usr/local/nginx
linux># ll
    ....conf       
    ... html     
    ...logs       
    ...sbin         
linux># ./sbin/nginx 【  】   
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    ....
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] still could not bind()
    80  ,80       
(       apache,nginx ,              apache       )
  :    80            .
    kill -9 2985 【      kill    】
    pkill -9 http 

3.2 [nginx 의 신호 제어 와 프로 세 스 관리] 를 닫 습 니 다.
linux nginx># kill -INT 6425 【    】【nginx master  id】
linux nginx># kill -HUP 6425 【     nginx     ,      ,      】
linux nginx># 
    //  
    TERM,INT【Quick shutdown】
    QUIT        ,          
    HUP       ,         
    USR1 【Reopen the log files】【  ,nginx   ,              】
    USR2 【     ,       】
    WITCH 【        (  USR2   )】
linux nginx># kill -USR1 6425 【            ,        】
linux nginx># kill -HUP `cat logs/nginx.pid`【       】

linux nginx># ./sbin/nginx -s reload 【    -HUP】
linux nginx># ./sbin/nginx -s stop  【  】
linux nginx># ./sbin/nginx -s reopen 【-USR1】
linux nginx># ./sbin/nginx -t 【      】

4 nginx 가상 호스트 설정
linux nginx># vim ./conf/nginx.conf 

4.1 Nginx 설정 세그먼트
//   001
worker_processes 1; //  1       ,      ,     ,     CPU,      CPU *  
//   002
Event {
    //      nginx     
    //  1 word         
    worker_connections  1024; //               1024   
}
//   003     http       
http {  
     server { //        
       
            Location {  //  ,              , image      , .php    
            }          
     }

     server {
     }
}

4.2 가상 호스트 설정
  1:          
    server {
        listen 80;  #    
        server_name a.com; #    

        location / {
                root a.com;   #     :   nginx    
                index index.html;
        }
    }
  2:            
    server {
        listen 2022;
        server_name z.com;

        location / {
                root /var/www/html2022;
                index index.html;
        }
    }   
  3:   IP       
    server {
        listen 8080;
        server_name 192.168.1.200;

        location / {
                root html/ip;
                index index.html;
        }
    }

5 nginx 로그 관리
nginx 의 server 세그먼트 를 관찰 하면 다음 과 같은 정 보 를 볼 수 있 습 니 다.
    #access_log  logs/host.access.log  main;

이 설명: 이 server 의 접근 로그 파일 은 logs / host. access. log 입 니 다. 사용 하 는 형식 인 "main" 형식 입 니 다. main 형식 을 제외 하고 다른 형식 을 사용자 정의 할 수 있 습 니 다.
main 형식 이 뭐 예요?
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

main 형식 은 로그 의 형식 을 정의 하고 이름 을 지어 서 인용 하기 편리 합 니 다. 위의 예 로 main 형식의 로그, 기 록 된 reoteaddr、http_x_forwarded_for 등 옵션.
5.1 로그 형식 은 어떤 옵션 을 기록 하 는 것 을 말 합 니 다.
기본 로그 형식: main, 원 격 IP - 원 격 사용자 / 사용자 시간 - 요청 방법 (예: GET / POST) - 요청 체 body 길이 - referer 소스 정보 http - user - agent 사용자 에이전트 / 거미, 전송 요청 의 원본 IP httpx_forwarded_for: 대 리 를 거 칠 때 대 리 는 원래 IP 를 이 정보 에 추가 하여 원본 IP 를 전송 합 니 다.
5.2: 독특한 logformat 및 이름
log_format  mylog '$remote_addr- "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

아래 server / location 에서 my log 를 참조 할 수 있 습 니 다.
server 세그먼트 에서 이렇게 설명 합 니 다:
    access_log logs/access_8080.log mylog;   
    //  log   log     log  ;

Nginx 는 서로 다른 server 에 대해 서로 다른 로 그 를 할 수 있 습 니 다. (lighttp 와 같은 웹 서버 는 지원 되 지 않 습 니 다)
5.3 실제 응용:
셸 + 정시 작업 + nginx 신호 관리, 로그 완료 날짜 에 따라 분석 방향 을 저장 합 니 다. 새벽 00: 00: 01, 어제 로 그 를 이름 을 바 꾸 고 해당 디 렉 터 리 에 놓 습 니 다.다시 USR 1 정보 번호 제어 nginx 새 로그 파일 생 성
      :
    #!/bin/bash
    base_path='/usr/local/nginx/logs'
    log_path=$(date -d yesterday +"%Y%m")
    day=$(date -d yesterday +"%d")
    mkdir -p $base_path/$log_path
    mv $base_path/access.log $base_path/$log_path/access_$day.log
    #echo $base_path/$log_path/access_$day.log 【  】
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

부분 명령 데모:
linux nginx># date
linux nginx># date -d yesterday
linux nginx># date -d yesterday +%Y%m%d%H%M
linux nginx># mkdir /data 【      】
linux nginx># cd /data
linux data># vim runlog.sh
    #!/bin/bash
    echo $(date -d yesterday +%Y%m%d)  【   $       `       】
linux data># sh runlog.sh 【      】
    #!/bin/bash【  】
    base_path='/usr/local/nginx/logs' 【      】
    log_path=$(date -d yesterday +"%Y%m") 
    day=$(date -d yesterday +"%d")
    mkdir -p $base_path/$log_path 【     】
    mv $base_path/access.log $base_path/$log_path/access_$day.log
    #echo $base_path/$log_path/access_$day.log
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    #!/bin/bash【  】
    LOGPATH=/usr/local/nginx/logs/host.access.log
    BASEPATH=/data
    bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).host.access.log
    // echo $bak 【     】
    mv $LOGPATH $bak 【         】
    touch $LOGPATH 【    logpath】
    kill -USR1 `/usr/local/nginx/logs/nginx.pid` 【    nginx】
linux data> crontab -e
    */1 * * * * sh /data/runlog.sh 【      , runlog.sh       】
    【     】
    2 0 */1 * * sh /data/runlogday.sh

6 location 문법
6.1 location 문법 location 은 '포 지 셔 닝' 이라는 뜻 으로 Uri 에 따라 서로 다른 포 지 셔 닝 을 할 수 있 습 니 다. 가상 호스트 의 설정 에서 없어 서 는 안 됩 니 다. location 은 사이트 의 다른 부분 을 서로 다른 처리 방식 으로 포 지 셔 닝 할 수 있 습 니 다. 예 를 들 어. php 를 만나면 어떻게 PHP 해석 기 를 호출 합 니까?위치
location    
location [=|~|~*|^~] patt {
}

           ,        
      
  ,       3 
location = patt {} [    ]
location patt{}  [    ]
location ~ patt{} [    ]

6.2 정확 한 일치 와 일반 일치 결합 사용
      ?:
          ,   ,       .
    location = patt {
        config A
    }
   $uri == patt,    ,  configA
    //    
    location = / {
        root   /var/www/html/;
        index  index.htm index.html;
    }
    //    
    location / {
        root   /usr/local/nginx/html;
        index  index.html index.htm;
    }
      http://xxx.com/
      
    1:       ”/”   ,  index    index.htm
    2:      /index.htm ,       uri   ”/index.htm” , 
        /usr/local/nginx/html
    3:     ,    /usr/local/nginx/html/index.htm

6.2 일반 매 칭 과 정규 매 칭 을 결합 하여 사용
   ,      .
    //    
    location / {
            root   /usr/local/nginx/html;
            index  index.html index.htm;
        }
//    
        location ~ image {
           root /var/www/image;
           index index.html;
        }
        http://xx.com/image/logo.png
  , “/”  ”/image/logo.png”   
  ,”image”    ”image/logo.png”    ,     ?
            .

        /var/www/image/image/logo.png

6.3 두 개의 일반적인 일치 [방문 장]
    location / {
        root   /usr/local/nginx/html;
        index  index.html index.htm;
         }
 
    location /foo {
        root /var/www/html;
        index index.html;
    }
     http://xxx.com/foo
  uri “/foo”,     location patt,      
  ‘/’        ‘/foo’, ‘/foo’       ’/foo’,
  ,      /var/www/html/index.html 
  :’/foo’     ,     .;

7 rewrite 재 작성 [location 내부 에서 사용]
7.1 재 작성 에 사용 되 는 명령 어
        if  (  ) {}      ,      
        set #    
        return #      
        break #  rewrite
        rewrite #  

7.2 If 문법 형식
    if    (  ) {
            
    }

7.3 조건 은 또 어떻게 씁 니까?【 3 가지 쓰 기 】 1: "=" 은 같은 것 을 판단 하고 문자열 비교 2: "~" 는 정규 로 일치 합 니 다. (이곳 의 정규 대소 문자 구분) "~ *" 대소 문 자 를 구분 하지 않 는 정규 3: - f - d - e 는 파일 인지, 디 렉 터 리 인지, 존재 하 는 지 여 부 를 판단 합 니 다.
7.4 다시 쓰기: 예
    if ($remote_addr = 192.168.1.100) {
        return 403;
    }
    
    if ($http_user_agent ~ MSIE) {
        rewrite ^.*$ /ie.htm;
        break; #( break      )
    }
    
    if (!-e $document_root$fastcgi_script_name) {
        rewrite ^.*$ /404.html break;
    } 
     ,      break;
  xx.com/dsafsd.html         ,
        ,           ,   GET /dsafsd.html HTTP/1.1

  :       rewrite 302     . 
    URL   ,    http  404.html,    rewrite,      ;
    URL   ,    http  404.html,    rewrite,      ;
    fastcgi_script_name     dsafsd.html,         .

7.5 set: set 는 변 수 를 설정 하 는 데 사 용 됩 니 다. 여러 조건 으로 판단 할 때 표지 용 으로 사용 할 수 있 습 니 다. apache 에 도달 한 rewritecondition 효과
      :   IE   ,   break;    set       
    if ($http_user_agent ~* msie) {
        set $isie 1;
    }

    if ($fastcgi_script_name = ie.html) {
        set $isie 0;
    }

    if ($isie 1) {
        rewrite ^.*$ ie.html;
    }

7.6 Rewrite 정규 표현 식 이 정 해진 위치 모드
Goods-3.html ---->Goods.php?goods_id=3
goods-([\d]+)\.html ---> goods.php?goods_id =$1  
    // 
    location /ecshop {
        rewrite "goods-(\d{1,7})\.html" /ecshop/goods.php?id=$1;
    }
    // 
    location /ecshop {
        index index.php;
        rewrite goods-([\d]+)\.html$ /ecshop/goods.php?id=$1;
        rewrite article-([\d]+)\.html$ /ecshop/article.php?id=$1;
        rewrite category-(\d+)-b(\d+)\.html /ecshop/category.php?id=$1&brand=$2;

        rewrite category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d\.]+)\.html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5;

        rewrite category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d+\.])-(\d+)-([^-]+)-([^-]+)\.html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8;
    }
//     rewrite
//category-3-b2-min200-max1700-attr167.227.202.199.html
//category-3-b0-min0-max0-attr0-1goods_id-DESC.html
  : url   ,       ”{}”,          

8 nginx + phop 의 컴 파일
8.1 컴 파일 apache 는 일반적으로 phop 을 자신의 모듈 로 시작 합 니 다. nginx 는 http 요청 변수 (예 를 들 어 get, user agent 등) 를 phop 프로 세 스, 즉 phop 독립 프로 세 스 로 전송 하여 nginx 와 통신 합 니 다. fastcgi 실행 방식 이 라 고 합 니 다. 따라서 apache 에 컴 파일 된 phop 은 nginx 에 사용 할 수 없습니다.
  :      PHP       :
      mysql, gd, ttf,  fpm(fascgi)    
linux src/php># ./configure -help | grep mysql
linux src/php># ./configure  --prefix=/usr/local/fastphp \
    --with-mysql=mysqlnd \
    --enable-mysqlnd \
    --with-gd \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv
    --enable-fpm 【        】

8.2 nginx 에서 location 을 가리 키 는 phop 컴 파일 이 끝 난 후: 1: nginx + phop 의 설정 이 간단 합 니 다. 핵심 은 한 마디 입 니 다. - 요청 한 정 보 를 9000 포트 의 PHP 프로 세 스에 전송 하여 지정 한 디 렉 터 리 에 있 는 PHP 파일 을 처리 하도록 합 니 다.
        :
    location ~ \.php$ {
        root html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
1:   php  ,
2:         html,
3:          9000  PHP  ,
4:    PHP  ,       $document_root$fastcgi_scriptname
( :PHP          ,          )

10 nginx gzip 압축 사이트 속도 향상 [최적화]
                

    news.163.com    
  :
    Accept-Encoding:gzip,deflate,sdch
  :
    Content-Encoding:gzip
    Content-Length:36093
            ,  , 10W  ,     36093  
      ---->   gzip   .

  : 
   ---  ---->       gzip     deflate    compress   sdch  
 http      --   ,   accept-encoding: gzip deflate sdch  (      ,  sdch google         ,           )
   -->  ---    gzip    ---->     
  
    //gzip       
    gzip on;
    gzip_buffers 32 4K;
    zip_comp_level 6;
    gzip_min_length 1000;
    gzip_proxied expired no-cache no-store private auth;
    gzio_type text/plain application/xml;
    gzip       
    gzip on|off;  #    gzip
    gzip_buffers 32 4K| 16 8K #  (          ?     ?)
    gzip_comp_level [1-9] #  6     (    ,    ,   CPU    )
    gzip_disable #    UA     Uri   gzip
    gzip_min_length 200 #          (        ,    )
    gzip_http_version 1.0|1.1 #      http    (     ,      1.1  )
    gzip_proxied          #           ,       
    gzip_types text/plain  application/xml #              txt,xml,html ,css
    gzip_vary on|off  #     gzip    
  : 
  /mp3        ,    
        ,   100->80  ,        CPU   .
gzip   http,server,location,   
  :
nginx/conf/mime.types   txt,css   mime  

11 expires 캐 시 [최적화]
11.1. 사이트 의 이미지, 특히 뉴스 사이트 의 경우 이미지 가 발표 되면 변경 되 는 것 은 매우 작 을 수 있 습 니 다. 사용자 가 한 번 방문 한 후에 이미지 캐 시 는 사용자 의 브 라 우 저 에 있 고 시간 이 비교적 긴 캐 시 를 사용 할 수 있 기 를 바 랍 니 다. nginx 의 expires 설정 을 사용 할 수 있 습 니 다. nginx 에 서 는 만 료 시간 을 설정 하고 매우 간단 합 니 다. location 또는 if 단락 에서 작성 할 수 있 습 니 다. 형식 expires 30s;expires 30m; expires 2h; expires 30d;
    location ~ image{
        root html;
        expires 1d;
    }
    
    //     nginx
    location ~* \.(jpg|jpeg|gif|png){
        root html;
        expires 1d;
    }

11.2 304 캐 시
 : 304            
   :           ,    etag  (     ,    ,   ),   last_modified_since 2    
         ,          ,               ,  ,        etag,last_modified_since
          ,          .
    ,       ,         .
         ,   html,js,css,         

12 nginx 역방향 프 록 시 + 부하 균형
12.1 nginx 역방향 에이전트 nginx + apache 동정 분리 실현
 nginx              ,
       1 proxy, 1 upstream,         ,     
       , nginx     php     ,   php        apache   .

---->   ---->nginx.html---->proxy_pass---->apache php;
         

----       ”    ”,             ,         .
location ~ \.php$ {
    proxy_pass http://192.168.1.200:8080
}

12.2 nginx 부하 균형
              ,         , proxy_pass         ?
       upstream            ,  proxy_pass    

           ,            ,    .
          ,      ,     3   
    upstream imgserver {
        server 192.168.1.200:81 weight=1 max_fails=2 fail_timeout=3;
        server 192.168.1.200:82 weight=1 max_fails=2 fail_timeout=3;
    }
    
    server{
        listen 81;
        server_name localhost;
        root html/image;
        access_log logs/81-access.log main;
    }
    
    server{
        listen 82;
        server_name localhost;
        root html/image;
        access_log logs/82-access.log main;
    }
    
    location ~* \.(jpg|jpeg|gif|png){
        proxy_pass http://imgserver;
    }
//             imageServer

             IP,       IP,        IP,   ?
    //    header,X-Forwarded-For
    location ~* \.(jpg|jpeg|gif|png){
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://imgserver;
    }

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
13.1 nginx - -- > memcached --- > 캐 시 없 음 --- > php - --- > DB
//    ,  memcached   
location / {
    set $ "$uri"
    memcached_pass 127.0.0.1:11211;
    error_page 404 /callback.php;
}

13.2 Nginx 제3자 모듈 컴 파일 및 일치 성 해시 응용
nginx  hash($uri)--->  memcached_key
php   hash($uri)--->   memcached_key
  :
nginx  consistentHash 

13.2.1 설치 ngxhttp_consistent_hash 플러그 인 [내 려 갈 수 없 을 수도 있 습 니 다. 직접 다운로드 하 세 요]
linux #>cd /usr/local/src
linux #>wget https://github.com/replay/ngx_http_consistent_hash.git
linux #>unzip gx_http_consistent_hash-master
linux #>cd ngx_http_consistent_hash-master
linux #>ls 
// cd nginx     
linux #>cd /usr/local/src/nginx-1.14.2
linux #>ls src/
linux #> /usr/local/nginx/sbin/nginx -v 【     nginx      】
linux #> .configure --help|grep with 【  help】
【  ,      】
linux src/nginx-1.14.2#> ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_http_consistent_hash-master/【     】
linux src/nginx-1.14.2#> pkill -9 nginx【     nginx,       】
linux src/nginx-1.14.2#> make && make install 【  】
linux #>   nginx

13.2.2 memcache 군집 설정
    upstream memserver {      memcached  ,       
        //hash_key $request_uri;  // hash      , uri    hash
        consistent_hash $request_uri;
        server 127.0.0.1:11211;
        server 127.0.0.1:11212;
    }
    
    Location 
    location / {
           # root   html;
           set $memcached_key $uri;
           memcached_pass memserver;  // memserver    memcache     
           error_page 404 /writemem.php;
           index  index.php index.html index.htm;
    }   
      memcached hash  
---->php.ini
---->memcache.hash_strategy=consistent

14 대 방 문 량 최적화 전체 사고방식
---  nginx    

좋은 웹페이지 즐겨찾기