nginx 설치, 유지보수 및 업그레이드
38240 단어 설치 배치 유지보수 업그레이드
환경
시스템 및 소프트웨어 버 전
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;
}
}