nginx 설치, 유지보수 및 업그레이드

Nginx 설치 배치
환경
시스템 및 소프트웨어 버 전
Linux:CentOS 7
Nginx:1.16.1
nginx 배치
프로젝트 1: Yum 설치
1. yum 소프트웨어 창고 설정
① yum 소스 에 nginx 설치 패키지 가 있 는 지 확인
[root@web01 ~]# yum list | grep nginx-1.16.1

② 아 리 운 yum 소스 설정 (실현 절차 ① 전제 에서 절 차 를 뛰 어 넘 을 수 있 음 ②)
[root@web01 ~]# cd /etc/yum.repos.d/ 
[root@web01 ~]# mkdir repo
[root@web01 ~]# mv *.repo local.repo repo/
[root@web01 ~]# wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@web01 ~]# yum clean all  
[root@web01 ~]# yum repolist   
[root@web01 ~]# yum list|grep nginx-1.16  

③ yum 설치 nginx - 1.16
[root@web01 ~]# yum -y install nginx #yum  nginx

④ 계획 구역
[root@web01 ~]# lsblk #        ,      
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  50G  0 disk 
[root@web01 ~]# fdisk /dev/vdb #         
[root@web01 ~]# lsblk #        
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  50G  0 disk 
└─vdb1 253:17   0  50G  0 part 
[root@web01 ~]# pvcreate /dev/vdb1   #     
root@web01 ~]# pvs #      
[root@web01 ~]# vgcreate vg_vdb1 /dev/vdb1 #    vg_vdb1
[root@web01 ~]# vgs #    
[root@web01 ~]# lvcreate -n lv_vg_vdb1 -L 49G vg_vdb1 #     
[root@web01 ~]# lvs #     
[root@web01 ~]# mkfs.ext4 /dev/vg_vdb1/lv_vg_vdb1 #          
[root@web01 ~]# mount /dev/vg_vdb1/lv_vg_vdb1 /data/ # /data       
[root@web01 ~]# df -h #        
                                         %    
/dev/vda1                        30G  1.3G   29G    5% /
devtmpfs                        697M     0  697M    0% /dev
tmpfs                           707M     0  707M    0% /dev/shm
tmpfs                           707M  8.4M  699M    2% /run
tmpfs                           707M     0  707M    0% /sys/fs/cgroup
tmpfs                           142M     0  142M    0% /run/user/0
/dev/mapper/vg_vdb1-lv_vg_vdb1   49G   53M   46G    1% /data
[root@web01 ~]# echo "/dev/vg_vdb1/lv_vg_vdb1 /data/ ext4 defaults 0 0" >> /etc/fstab  #       ,      

⑤ 파일 디 렉 터 리 만 들 기 및 프로필 수정
[root@web01 ~]# mkdir /data/www #       
[root@web01 ~]# mkdir -p /data/log/nginx #        
[root@web01 ~]# vim /etc/nginx/nginx.conf #yum   nginx        /etc/nginx/nginx.conf
user nginx;
worker_processes  2;  # nginx    ,    cpu      ,        (2    cpu 4)。
worker_cpu_affinity 01 10;  #        cpu,

events {
        worker_connections  65533;   #             ,     nginx           worker_processes*worker_connections
        use epoll;  #   epoll  I/O   
        accept_mutex on; #                           ,on        ,   off,  nginx              。

}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server_names_hash_bucket_size 64;  #              
    client_header_buffer_size 32k;   #          header   ,      	 	 	client_header_buffer_size,           。
    large_client_header_buffers 4 32k;  #              header  ,      large_client_header_buffers,             。
    #client_max_body_size   20m;  #     nginx        

    sendfile        on;
    keepalive_timeout  60;
    server_tokens off; #      

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #client_max_body_size   20m;  #    serverd      
        location / {
            root   /data/www;
            index  index.php index.html index.htm;
            #client_max_body_size   20m;  #                
        }

        location /nginx_status {
                        stub_status on;
 						access_log off;
                        allow 127.0.0.1;
                		deny all;
        }

        # location ~ \.php$ {
                       #root          /data/www;
                       #fastcgi_pass   127.0.0.1:9000;
                       #fastcgi_index  index.php;
                       #fastcgi_param SCRIPT_FILENAME  /data/www$fastcgi_script_name;
                       #include        fastcgi.conf;
        }


        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
                    root   html;
        }

        }
access_log /data/log/nginx/access.log;
error_log /data/log/nginx/error_log ;

}
[root@web01 ~]# nginx -t #          
[root@web01 ~]# systemctl start nginx #  nginx  
[root@web01 ~]# systemctl enable nginx #        
[root@web01 ~]# systemctl status nginx #      

프로젝트 2: 원본 패키지 설치
1. nginx - 1.16.1 소스 패키지 준비
[root@web01 ~]# ls .
nginx-1.16.1.tar.gz

2. 압축 해제 소스 패키지
[root@web01 ~]# tar -xvf nginx-1.16.1.tar.gz 
[root@web01 ~]# ls ~
nginx-1.16.1  nginx-1.16.1.tar.gz

3. 컴 파일 설치 nginx
① gcc, make, pcre - devel, openssl - devel 등 컴 파일 도구 와 의존 패키지 설치
[root@web02 ~]# yum -y install gcc make pcre-devel openssl-devel

② nginx 컴 파일 설치
[root@web02 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module #            
[root@web02 nginx-1.16.1]# make && make install  #    
[root@web02 ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/nginx #  nginx     

③ 계획 구역 (yum 설치 절차 ④)
④ 파일 디 렉 터 리 만 들 기 및 프로필 수정 (yum 설치 절차 ⑤)
[root@web02 ~]# nginx -t #            
[root@web02 ~]# nginx #  nginx
[root@web02 ~]# echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.local #  nginx       

\ # 소스 코드 에 설 치 된 nginx 의 메 인 프로필 은 일반적으로 지정 – prefix 뒤꿈치 디 렉 터 리 에 있 습 니 다. 예 를 들 어 위의 절차 ②, 메 인 프로필 은 / usr / local / nginx / conf / nginx. conf 에 있 습 니 다.
4. nginx 상용 모듈 소개
① nginx 모듈 보기
[root@web01 ~]# nginx -V #     nginx  
[root@web02 ~]# cd nginx-1.16.1/ #         
[root@web02 nginx-1.16.1]# ./configure --help #  nginx     

② 상용 모듈 소개
Nginx 모듈 이름
모듈 역할
ngx_http_access_module
4 층 은 IP 기반 접근 제어 로 클 라 이언 트 소스 IP 주소 와 일치 하 는 것 을 제한 할 수 있 습 니 다.
ngx_http_auth_basic_module
상태 페이지, basic 메커니즘 을 사용 하여 사용자 인증 을 진행 합 니 다. nginx 를 컴 파일 할 때 컴 파일 파 라미 터 를 추가 해 야 합 니 다 – withhttpstub_status_module, 그렇지 않 으 면 설정 이 완료 되면 모니터링 은 문법 오 류 를 알려 줍 니 다.
ngx_http_stub_status_module
상태 통계 모듈
ngx_http_gzip_module
파일 압축 기능
ngx_http_gzip_static_module
정적 압축 모듈
ngx_http_ssl_module
nginx 의 https 기능
ngx_http_rewrite_module
리 셋 모듈, rewrite 요청 분석 및 처리
ngx_http_referer_module
도 난 방지 체인 기능, 방문 안전 고려 기반
ngx_http_proxy_module
클 라 이언 트 의 요청 을 http 프로 토 콜 로 지정 한 서버 로 전송 하여 처리 합 니 다.
ngx_stream_proxy_module
tcp 부하, 클 라 이언 트 요청 을 tcp 프로 토 콜 로 지정 한 서버 로 전송 합 니 다.
ngx_http_fastcgi_module
phop 에 대한 클 라 이언 트 요청 을 fastcgi 프로 토 콜 로 지정 한 서버 보조 로 전송 합 니 다.
ngx_http_uwsgi_module
Python 에 대한 클 라 이언 트 요청 을 uwsgi 프로 토 콜 로 지정 한 서버 로 전송 합 니 다.
ngx_http_headers_module
머리 메시지 에 지정 한 key 와 값 을 추가 할 수 있 습 니 다.
ngx_http_upstream_module
부하 균형 모듈, 서버 그룹 전송, 권한 재분배, 상태 모니터링, 스케줄 링 알고리즘 등 고급 기능 제공
ngx_stream_upstream_module
백 엔 드 서버 패 킷 퍼 가기, 가중치 배분, 상태 모니터링, 스케줄 링 알고리즘 등 고급 기능
ngx_http_fastcgi_module
fastcgi 프로 토 콜 을 통 해 지정 한 클 라 이언 트 요청 을 php - fpm 로 전송 하 는 것 을 실현 합 니 다.
ngx_http_flv_module
flv 위 류 미디어 서버 지원
공식 문서 의 내용 이 가장 완전 하 다. 설명, 명령, 역할 영역 등 을 포함한다.
공식 문서http://nginx.org/en/docs 중국어 문서http://tengine.taobao.org/nginx_docs/cn/docs/
3. nginx 증가 모듈 과 부 드 러 운 업그레이드
1. nginx 는 새 모듈 을 추가 합 니 다. 여 기 는 "– with - http ssl module" 을 예 로 들 면)
① nginx 버 전 검사
[root@web02 ~]# nginx -V #  nginx           
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module  

② 버 전 대응 패키지 다운로드
[root@web02 ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz -O /opt/nginx-1.16.1.tar.gz  #       
[root@web02 ~]# tar -xf /opt/nginx-1.16.1.tar.gz -C /opt/

③ 컴 파일 설치
[root@web02 ~]# cd /opt/nginx-1.16.1/
[root@web02 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module #      
[root@web02 nginx-1.16.1]# make #  

④ 바 이 너 리 파일 복사
[root@web02 nginx-1.16.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #     nginx     
[root@web02 nginx-1.16.1]# cp objs/nginx /usr/local/nginx/sbin/nginx # objs  nginx            

⑤ 모듈 이 성공 적 으로 설치 되 었 는 지 확인
[root@web02 nginx-1.16.1]# /usr/local/nginx/sbin/nginx -V #  nginx              
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments:--prefix=/usr/local/nginx  --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@web02 nginx-1.16.1]# rm -rf /usr/local/nginx/sbin/nginx.bak #         

2. 부 드 럽 게 업 그 레이 드 됩 니 다. 여 기 는 nginx - 1.17.10 까지 올 라 가 는 것 을 예 로 들 수 있 습 니 다.
① 새 버 전 패키지 다운로드
[root@web02 nginx-1.16.1]# nginx -V #  nginx    
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments:--prefix=/usr/local/nginx  --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@web02 ~]# wget http://nginx.org/download/nginx-1.17.10.tar.gz

② 새 버 전 nginx 를 컴 파일 할 때 설치 경 로 는 이전 버 전과 일치 해 야 합 니 다. 주의: make install 을 실행 하지 마 십시오.
[root@web02 ~]# tar -xf nginx-1.17.10.tar.gz
[root@web02 ~]# cd nginx-1.17.10
[root@web02 nginx-1.17.10]# ./configure  --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
[root@web02 nginx-1.17.10]# make

③ 바 이 너 리 파일 을 백업 하고 새 버 전 으로 교체
[root@web02 nginx-1.17.10]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
[root@web02 nginx-1.17.10]# cp objs/nginx /usr/local/nginx/sbin/nginx
[root@web02 nginx-1.17.10]# /usr/local/nginx/sbin/nginx -t #         

④ USR 2 신 호 를 보낸다
[root@web02 nginx-1.17.10]# ps aux|grep nginx #  nginx   
root       675  0.0  0.0  20564   664 ?        Ss   10:04   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      678  0.0  1.9  47700 27872 ?        S    10:04   0:00 nginx: worker process
nginx      679  0.0  1.9  47700 28124 ?        S    10:04   0:00 nginx: worker process
root      8755  0.0  0.0 112824   980 pts/0    S+   11:15   0:00 grep --color=auto nginx
[root@web02 nginx-1.17.10]# kill -USR2 675     (master)  USR2  
[root@web02 nginx-1.17.10]# ps aux|grep nginx #Nginx         master         ,         
root       675  0.0  0.0  20564   824 ?        Ss   10:04   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      678  0.0  1.9  47700 27872 ?        S    10:04   0:00 nginx: worker process
nginx      679  0.0  1.9  47700 28124 ?        S    10:04   0:00 nginx: worker process
root      8756  0.0  0.2  45976  3412 ?        S    11:15   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     8757  3.8  1.9  72600 28168 ?        S    11:15   0:00 nginx: worker process
nginx     8758  3.8  1.9  72600 28168 ?        S    11:15   0:00 nginx: worker process
root      8760  0.0  0.0 112824   980 pts/0    S+   11:16   0:00 grep --color=auto nginx

⑤ WINCH 신호 보 내기
[root@web02 nginx-1.17.10]# kill -WINCH 675 #   Nginx   (master)  WINCH  
[root@web02 nginx-1.17.10]# ps aux|grep nginx #          (      ),           Nginx  
root      8756  0.0  0.2  45976  3412 ?        S    11:15   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     8757  0.1  1.9  72600 28168 ?        S    11:15   0:00 nginx: worker process
nginx     8758  0.1  1.9  72600 28168 ?        S    11:15   0:00 nginx: worker process
root      8765  0.0  0.0 112824   980 pts/0    S+   11:18   0:00 grep --color=auto nginx

4. nginx 는 웹 서버 의 관련 프로필 을 만 듭 니 다.
1. 주 프로필 nginx. conf
[root@web01 ~]# vim /etc/nginx/nginx.conf
user nginx nginx;
worker_processes  2;  # nginx    ,    cpu      ,        (2    cpu 4)。
worker_cpu_affinity 01 10;  #        cpu,

events {
        worker_connections  65533;   #             ,     nginx           worker_processes*worker_connections
        use epoll;  #   epoll  I/O   
        accept_mutex on; #                           ,on        ,   off,  nginx              。

}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server_names_hash_bucket_size 64;  #              
    client_header_buffer_size 32k;   #          header   ,      	 	 	client_header_buffer_size,           。
    large_client_header_buffers 4 32k;  #              header  ,      large_client_header_buffers,             。
    client_max_body_size   20m;  #     nginx        

    sendfile        on;
    keepalive_timeout  60;
    server_tokens off; #      
    
	fastcgi_connect_timeout 300; #       FastCGI     
    fastcgi_send_timeout 300; #    FastCGI         ,              FastCGI          
    fastcgi_read_timeout 300; #     FastCGI       ,               FastCGI       
    fastcgi_buffer_size 64k;#       FastCGI               
    fastcgi_buffers 4 64k; #                    FastCGI       PHP              fastcgi_temp      
    fastcgi_busy_buffers_size 128k; #    fastcgi_buffers   
    fastcgi_temp_file_write_size 256k; #    fastcgi_buffers   

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types     text/plain application/javascript application/x-javascript/text/javascript text/css application/xml application/xml+rss;
    gzip_vary on;
    gzip_proxied   expired no-cache no-store private auth;
    gzip_disable   "MSIE [1-6]\.";
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for" '
                        'upstream_response_time $upstream_response_time request_time $request_time';
#log_format                            ,main       
#$remote_addr                     IP
#$remote_user                         
#$time_local                           
#$request                               
#$status                        HTTP                  :200\404\503 ...
#$body_bytes_sent                            
#$http_referer                  URL    
#$http_user_agent                        
#$http_x_forwarded_for                   IP  (         )
#$request_time                         
access_log off;
    include vhost/*.conf;

	
    server {
        listen       80 ;#backlog = 8192;
        server_name  www.test.com;

        #client_max_body_size   20m;  #    serverd      
        location / {
            root   /data/www;
            index  index.php index.html index.htm;
            #client_max_body_size   20m;  #                
        }

        location /nginx_status {
                        stub_status on;
 						access_log off;
                        allow 127.0.0.1;
                		deny all;
        }

        location ~ \.php$ {
                        root          /data/www;
                        fastcgi_pass   127.0.0.1:9000;
                        fastcgi_index  index.php;
                        fastcgi_param SCRIPT_FILENAME  /data/www$fastcgi_script_name;
                        include        fastcgi.conf;
        }


        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
                    root   html;
        }

        }
access_log /data/log/nginx/access.log;
error_log /data/log/nginx/error_log ;

}

5. nginx 프 록 시 설정 파일
1. 설정 파일 nginx. conf
user nginx nginx;
worker_processes  2;  # nginx    ,    cpu      ,        (2    cpu 4)。
worker_cpu_affinity 01 10;  #        cpu,
worker_rlimit_nofile 204800; #    worker            。       ,           。          Nginx     “ulimit -a”     ,        ,  nginx    “too many open files”  


events {
        worker_connections  204800;   #             ,     nginx           worker_processes*worker_connections
        use epoll;  #   epoll  I/O   
        accept_mutex on; #                           ,on        ,   off,  nginx              。

}
http {
    client_max_body_size 50m; #client_header_buffer_size           large_client_header_buffers                     client_max_body_size   NGINX            
    sendfile            on; #sendfile    on             ,         ,       (Nginx    )    buffer, read          cache,  cache        buffer,  write           buffer      buffer,   

    keepalive_timeout   60; #           (             )
    types_hash_max_size 2048;
    proxy_send_timeout 300; #           upstream        
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_time ';
}
#log_format                            ,main       
#$remote_addr                     IP
#$remote_user                         
#$time_local                           
#$request                               
#$status                        HTTP                  :200\404\503 ...
#$body_bytes_sent                            
#$http_referer                  URL    
#$http_user_agent                        
#$http_x_forwarded_for                   IP  (         )
#$request_time                         

upstream www.test.com {
    server 192.168.11.1:80;
    server 192.168.11.2:80;
    }
# upstream     (  )   ,           ,    ,                         ,              。

server {
    listen      80 default_server; #backlog = 8192;  
    server_name www.test.com;
    tcp_nodelay         on;

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,token';
       # add_header   response       ,   key value;Access-Control-Allow...      
        proxy_pass http://www.test.com;
        proxy_redirect off;               #        URL    ,   off,       
        proxy_set_header HOST              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for; 
        proxy_set_header Cookie            $http_cookie;
    }

    location /nginx_status
    {
 	    stub_status on;
        access_log   off;
        allow 127.0.0.1;
        deny all;
    }
   access_log  /var/log/nginx/www.test.com_access.log  main;
   error_log  /var/log/nginx/www.test.com_error.log;
   }
}

좋은 웹페이지 즐겨찾기