nginx 학습 + 사례 연습

11869 단어 배치 하 다.
nginx 소프트웨어 학습
nginx 는 웹 서버 로 정적 파일 서버, 역방향 프 록 시 서버, 메 일 프 록 시 서버, 부하 균형 서버 로 자주 사용 된다.
1. 타 오 바 오 nginx 설치, 코드 컴 파일 설치, 우선 해결 모듈 의존 yum install gcc patch libffi - devel python - devel zlib - devel bzip 2 - devel openssl - devel ncurses - devel sqlite - devel readline - devel tk - devel gdbm - devel db4 - devel libpcap - devel xz - devel openssl openssl - devel - y
2. 타 오 바 오 nginx 의 소스 코드 wget 가 져 오기http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
3. 압축 해제 소스 패키지 tar - zxvf tengine - 2.3.2. tar. gz
4. 소스 코드 디 렉 터 리 에 들 어가 서 3 부작 을 컴 파일 하기 시작 합 니 다. 1. 설치 경 로 를 지정 합 니 다. / configure -- prefix = / opt / S21 / tngx
2.     
  make && make install 
​
3.      ,  nginx   ,
  [root@wupeiqi tngx]#pwd
  /opt/s21/tngx
  [root@wupeiqi tngx]#ls
  conf  html  logs  sbin
  
  conf        ,                     
  html       
  logs nginx     
  sbin  nginx        

 
4.  sbin  ,  nginx
./nginx  
./nginx -s stop   nginx
./nginx -t    nginx.conf       
./nginx -s reload     nginx,    nginx  
5.     
172.16.168.129

nginx 의 핵심 학습 방식, 설정 파일 학습
1. nginx. conf 를 찾 아 문법 공부
work_process: 1 cpu 핵 수 다 중 스 레 드 유사 nginx - t: conf 문법 nginx - s reload 검출: 다시 불 러 오기
ps -ef|grep negix Kill -9 pid Pkill -9 nginx
여기 있 는 모든 설정 은 nginx 의 핵심 기능 입 니 다.
http {
.... }
2. nginx 의 접근 로그 기능
 
http {
    include       mime.types;
    default_type  application/octet-stream;
    #     
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;                                               
​
    gzip:on             ,    
....
}

 
3. nginx 의 가상 호스트 설정, 핵심 기능 다시
nginx 에 여러 사이트 설정
  • listen
  • Server_도 메 인 이름
  • location: 자원 주소
  • mac 도 메 인 이름 을 먼저 설정 합 니 다.
     
    vi  /etc/hosts
      :ip         www.gaogao.com
         :wq
      
        
    sudo ifconfig en0 down
    sudo ifconfig en0 up
    ​
    ​
    ​
    ​

     
    http {
    ​
    #nginx       ,       server     
    #    1    
    server {
        #            
        listen       80;
        #               /etc/hosts    ip   
        server_name  www.21.com;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        
        #   nginx url  ,  django url    
        #       http://192.168.182.130:81/chouhuo.jpg       ,     location  
        #         ,          
        location / {
          #root             ,         
          root   /opt/gao/;
          #          
          index  index.html index.htm;
        }
      }
    ​
    #    2 
    server {
        listen       80;
        server_name  www.22.com;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        
        #   nginx url  ,  django url    
        #       http://192.168.182.130/gao.jpg       ,     location  
        #         ,          
        location / {
          #root             ,         
          root   /opt/gao/;
          #index             
          index  index.html index.htm;
        }
    ​
    }
    }

     
    4. nginx 의 오류 페이지 설정 404 최적화
  • error_page 404 /404.html

  •  
    이 매개 변 수 를 통 해 정의 하면 됩 니 다.
    server {
            listen 80;
            server_name www.666.com;      
            error_page  404     /404.html;  #    location  root        
          location / {
                  root   /opt/gao;   #     index.html  404.html
                  index index.html;
          }
    }

     
    5. nginx 역방향 에이전트
    nginx 서버 와 자원 서버 는 한 네트워크 에 있 습 니 다.
    보안 요청 을 위해 자원 서버 에 직접 접근 할 수 없습니다.
    nginx 서버 nginx 에 먼저 보 내 달라 고 요청 합 니 다.
    브 라 우 저 - nginx - > django
    에이전트:
    사용자, 클 라 이언 트 중개, 프 록 시 서버, 집주인, 자원 서버
    전세 고객 - > 중개, 대리 - > 집주인
    브 라 우 저 - > nginx - > django
     
    환경 은 다음 과 같다.
    기계 1 192.168.182.130 은 프 록 시 서버 의 역할 로 nginx 가 제공 하 는 기능 이다.
    기계 2 192.168.182.131 은 자원 서버 의 역할, nginx 정적 자원 서버
    두 서버 모두 nginx 서비스 가 있 는 지 확인 합 니 다.
    기 계 를 방문 할 때 1 번 은 기계 2 번 의 내용 을 되 돌려 줍 니 다.
    (기계 1 은 기계 2 기계 2 를 기계 1 기계 에 되 돌려 달라 고 요청 한다)
    역방향 프 록 시 설정 은 다음 과 같 습 니 다.
    1. 192.168.182.130 기 계 를 켜 는 nginx. conf 는 다음 과 같이 수정 합 니 다.
    server {} 가상 호스트 를 찾 았 습 니 다. 위 치 는 다음 과 같 습 니 다.
     server {
        listen       80;
        server_name  www.chouhuo.com;
        charset koi8-r;
        access_log  logs/host.access.log  main;
        access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main; 
      location / {
          #    root   /opt/alex/;
          #   index  index.html index.htm;
          #           
          #           
          #           
          proxy_pass http://192.168.182.131;                                                         
        }
    }

     
    자원 서버 설정
    필요 한 명령
  • 시작 nginx: sbin / nginx
  • 포트 충돌 시: ps - ef | grep nginx
  • nginx 에 대한 프로 세 스 죽 이기: pkill - 9 nginx
  • server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
    }
    ​
    ​

     
    브 라 우 저 테스트
    프 록 시 에 접근 할 때 자원 서버 의 내용 정 보 를 얻 었 습 니 다.
    192.168.182.130 - 192.168.182.131 (자원 서버)
    6. nginx 부하 균형
        
    1        ,nginx       192.168.182.130         
    ​
    2        
    192.168.182.131       1  ,  gao    
    192.168.182.132       2 ,  chenjun   

    1. 자원 서버 2 대 를 준비 하고 똑 같은 데 이 터 를 제공 하여 부하 균형, 실험 목적 으로 서로 다른 페이지 를 보 았 기 때문에 서로 다른 페이지 데 이 터 를 준비 하여 192.168.182.131 자원 서버 1, gao 페이지 192.168.182.132 자원 서버 2 로 돌아 가 chenjun 페이지 로 돌아 갑 니 다.
    2. 부하 균형 서버 를 준비 합 니 다. nginx 설정 파일 에 다음 설정 을 추가 하고 부하 균형 탱크 를 정의 하여 백 엔 드 항목 주 소 를 기록 합 니 다.
    ​
          
      upstream mydjango  {
        server 192.168.182.131;
        server 192.168.182.132;                                                                    
      }
      
    #    
      upstream mydjango  {
      server 192.168.182.131  weight=4;
      server 192.168.182.132   weight=1;                                                                    
    }
    ​
    #ip    ,       ip      ,              
    #ip            
    #ip            
      upstream mydjango  {
        server 192.168.182.131  ;
        server 192.168.182.132   ;         
        ip_hash;
    }

    #        
    server {
        listen       80;
        server_name  www.chouhuo.com;
        
        location / {
        #    root   /opt/alex/;
         #   index  index.html index.htm;
      #          
        proxy_pass http://mydjango;
        }

    }
     
     
    프로젝트 배치
    nginx + uwsgi + django + mysql
     
    백 엔 드 배치
    1. crm 항목 을 linux 서버 에 업로드
    Scp ...
    2. 가상 환경 을 활성화 해서 사용
    virtualenv --no-site-packages --python=python3 crm_env
    source bin/activate
    2. uwsgi 명령 설치,
    이것 은 python 의 모듈 입 니 다.
    pip3 install -i https://pypi.douban.com/simple uwsgi
    모듈 설치:
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.1 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-multiselectfield
    또는 reqirements. txt 를 사용 합 니 다.
    Pip3 freeze > requirements.txt
    pip3 install -r requirements.txt
     
    데이터베이스 준비
    ​
    mac     
    root>> mysqldump -uroot -p backend_sys > ~/desktop/backend_sys.sql
    ​
    ​
             
    ​
    >scp  sql       [email protected]:/crm/
     
             
    root>>systemctl start mariadb
    root>>mysql
    ​
    mysql>>create database backend_sys
    mysql >>use backend_sys
    ​
         
    ​
    mysql>source /crm/backend_sys.sql
    ​
    ​
    ​

     
    2. uwsgi 명령 을 사용 하여 crm 프로젝트 를 매개 변수 로 시작 합 니 다.
    프로젝트 루트 디 렉 터 리 아래 uwsgi 시작
  • Backen_sys Cd 이 경로 에서 Backendsys wsgi.py
  •    python3 manage.py runserver 
      wsgiref   django,    ,   web
      uwsgi  django,      ,   ,      ,    
    ​
    #   django  ,        
    ​
    uwsgi --http :8000 --module mysite.wsgi
      --http    http  ,     
      --module    django    wsgi  
    #uwsgi        
    uwsgi --http :9000 --module backend_sys.wsgi   --py-autoreload=1 

     
    4. 브 라 우 저 접근:
    172.16.250.129: 9000 (자원 서버 직접 방문)
    5. uwsgi 정적 파일 저장 불가 = nginx 서버 처리 가능 = = 단계 6
     
    6. 우선 자원 서버 에서 uwsgi 의 다른 시작 방식 uwsgi. ini
    1. uwsgi 는 설정 파일 로 시작 합 니 다. 시작 인 자 를 파일 에 기록 한 다음 이 파일 을 실행 하면 됩 니 다.
    설정 파일 이름 은 uwsgi. ini 라 고 할 수 있 습 니 다. 내용 은 다음 과 같 습 니 다. 이 파일 은 수 동 으로 생 성 되 었 습 니 다.
    1. touch uwsgi. ini, 다음 내용 을 기록 합 니 다.
    [uwsgi]
    ​
    #Django-related settings
    #the base directory (full path)
    #          ,        
    chdir  = /crm
    Django's wsgi file
    #         wsgi  
    module = backend_sys.wsgi
    #the virtualenv (full path)
    #           
    home  = /python_virtualenv/crm_env
    #process-related settings
    #master
    master   = true
    # cpu     ,uwsgi      
    processes  = 2
    #the socket (use the full path to be safe
    #   uwsgi_socket       ,           ,    nginx uwsgi       
    #   uwsgi_socket       ,           ,    nginx uwsgi       
    #   uwsgi_socket       ,           ,    nginx uwsgi       
    socket  = 0.0.0.0:8000
    ​
    #     http     (       )
    #     http     (       )
    #     http     (       )
    #http = 0.0.0.0:9000
    #with appropriate permissions - may be needed
    chmod-socket    = 664
    #clear environment on exit
    vacuum          = true
    #      , uwsgi     ,   django     uwsgi.log 
    daemonize = uwsgi.log 

    2. 설정 파일 시작 배경 django 프로젝트 지정
    uwsgi --ini uwsgi.ini
     
    3. ini 파일 에 http = 0.0.00: 8000 브 라 우 저 를 지정 하면 방문 할 수 있 습 니 다. 브 라 우 저 는 ip 를 입력 하면 접근 할 수 있 습 니 다. 그러나 일반적으로 사용자 가 서버 에 직접 접근 하지 못 하 게 하고 nginx 서버 에 요청 을 전송 합 니 다. nginx 서버 는 로 컬 정적 파일 을 불 러 옵 니 다. 동적 데 이 터 는 백 엔 드 자원 서버 에 전송 을 요청 합 니 다.
    그래서 ini 파일 중 socket = 0.0.0.0: 8000 주석 http = 8000
    [nginx 서버] 의 설정, 역방향 프 록 시 uwsgi
    1. nginx. conf 를 수정 하여 다음 nginx 를 단일 자원 서버 에 전송 합 니 다.
    server {
        listen       80;
        server_name  www.chouhuo.com;
        location / {
        #            
        #            
        #            
        include    uwsgi_params;
        uwsgi_pass 172.16.250.129:8000;  #        
        }
      }  

    부하 균형 처리 작업
    Nginx 서버 의 요청 은 여러 자원 서버 에 접근 할 수 있 습 니 다.
    ​
    ​
    ​
    upstream mycom{
        ip_hash;
        server 10.11.0.1:8000;  #        
        server 10.11.0.1:8000;
        server 10.11.0.1:8000  down;
    }
    ​
    location / {   
                include uwsgi_params;
                uwsgi_pass mycom; #         
            }
    ————————————————
    ​

     
    2. nginx 를 다시 불 러 오고 nginx 를 방문 하여 역방향 에이전트 여 부 를 확인 합 니 다.
          nginx   ,       crm   
    ​
       172.16.250.128  nginx     
    ​
         django  

    3. 자원 서버 에서 crm 의 모든 정적 파일 을 수집 하고 정적 파일 을 nginx 서버 에 던 져 분석 합 니 다.
    django 의 settings. py 설정 을 다음 과 같이 수정 합 니 다.
    #      
    STATIC_ROOT='/opt/static'   #                                                                                                                                   
    ​
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static')
    ]
    ​
    #    ,  django       ,       '/opt/static'  
    #               scp        nginx          
    python3 manage.py collectstatic

    4. nginx 를 설정 하여 crm 의 정적 자원 을 찾 습 니 다.
     
    ​
    ​
    location / {
            include    uwsgi_params;
            uwsgi_pass 172.16.250.130:8000;  #                   django   
          }
    ​
    #     location,  nginx url      
    ​
    #      www.oldchouhuo.com/static/.....     url   ,nginx      , /opt/static         
    ​
    #  
    •     location  /static {
    •       alias /opt/static;
    }
    ​
    ​

     
    5. 이때 사 이 트 를 다시 방문 하여 정적 자원 www. chouhoo. com 을 처 리 했 는 지 확인 합 니 다.

    좋은 웹페이지 즐겨찾기