nginx 의 설치, 배치, 설정

14120 단어 ……【nginx】
환경 배치:
[root@miner_k ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)

[root@miner_k ~]# yum -y install pcre-devel
[root@miner_k ~]# yum -y groupinstall  "Development tools"
[root@miner_k ~]# yum -y install openssl-devel

자원 다운로드, 압축 해제, 설치
[root@miner_k ~]# wget http://nginx.org/download/nginx-1.12.1.tar.gz
[root@miner_k ~]# tar -xvf nginx-1.12.1.tar.gz
[root@miner_k ~]# cd nginx-1.12.1
[root@miner_k ~]# groupadd -r -g 101 nginx
[root@miner_k ~]# useradd -r -g 101 -u 101 nginx
[root@miner_k ~]#./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre

[root@miner_k nginx-1.12.1]# make  && make install

nginx 의 시작
nginx 시작 스 크 립 트
[root@miner_k ~]# vim  /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
#     ,  nginx        
nginx="/usr/local/nginx/nginx"
prog=$(basename $nginx)

#     ,  nginx pid   
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/nginx.lock
 
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac


스 크 립 트 시작 권한 설정
[root@miner_k ~]# chmod +x /etc/init.d/nginx

시작 서비스
[root@miner_k ~]# service nginx start
[root@miner_k ~]# chkconfig --add nginx
[root@miner_k ~]# chkconfig nginx on

nginx 설정
프로필:
[root@miner_k ~]# cd /etc/nginx/
[root@miner_k nginx]# ls
fastcgi.conf         fastcgi.conf.default	 #  FastCGI      
fastcgi_params		fastcgi_params.default  
koi-utf			koi-win
scgi_params 	scgi_params.default  #CGI       
mime.types          mime.types.default    #          (       )
nginx.conf		nginx.conf.default		  #nginx      
uwsgi_params	uwsgi_params.default      # python      
win-utf
                             

프로필 수정: [root@miner_k ~]# vim /etc/nginx/nginx.conf
#user  nobody;		#         
worker_processes  1;	#worker     ,  CPU      ,     CPU   (  CPU  )    , SSL     , worker   CPU   ;     IO     ,           , worker    CPU   1.5 2 。

#error_log  logs/error.log;      #         
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;    #PID       

#        “#”  ,            。


이벤트 드라이버 (events) 설정
#          worker   
events {
    worker_connections  1024;      worker      1024
}

\ # \ # \ # http 설정
http {
    include       mime.types;     #       
    default_type  application/octet-stream;    #         

    sendfile        on;         #      ,      
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;    #     

    #gzip  on;        #    
	
	#server{}       
	
}

서버 필드 가상 호스트 설정
server {
	        listen       80;   #    
	        server_name  localhost;   #      
	
	        #charset koi8-r;
	
	        #access_log  logs/host.access.log  main;
	
	        location / {
	            root   html;
	            index  index.html index.htm;
	        }
	  }      

포트 기반
server {
        listen       80;
        location / {
            root   /web1;
            index  index.html index.htm;
        }
    }


server {
        listen       8080;
        #listen       somename:8080;
        #server_name  somename  alias  another.alias;

        location / {
            root   /web2;
            index  index.html index.htm;
        }
    }


IP 기반
server {
        listen       192.168.2.10:80;
        location / {
            root   /web1;
            index  index.html index.htm;
        }
    }


server {
        listen       192.168.2.11:80;
        #listen       somename:8080;
        #server_name  somename  alias  another.alias;

        location / {
            root   /web2;
            index  index.html index.htm;
        }
    }

도 메 인 이름 기반
server {
        listen       80;
        server_name  www.miner_k1.com
        location / {
            root   /web1;
            index  index.html index.htm;
        }
    }


server {
        listen       80;
        #listen       somename:8080;
        server_name  www.miner_k2.com;

        location / {
            root   /web2;
            index  index.html index.htm;
        }
    }

기본 호스트 설정
server {
    listen      80 default_server;
    ...
}


\ # \ # \ # # location {} 코드 블록
location 의 매개 변 수 는 두 가지 가 있 습 니 다. 첫 번 째 종 류 는 접두사 문자열 입 니 다.두 번 째 유형 은 정규 표현 식 이다.
접두사 문자열
URL 이 접두사 문자열 과 일치 하면 이 접두사 문자열 로 시작 해 야 합 니 다.
location /some/path/ {
    ...
}

URI 가 * * / some / path / 로 시작 하면 아래 동작 과 일치 하고 실행 한 다 는 뜻 입 니 다.요청 한 URI 가 / my - site / some / path / index. html 이면 해당 하 는 규칙 과 일치 하지 않 습 니 다.이 필드 의 "/ some / path *" 는 처음 문자열 이 아니 기 때 문 입 니 다.
location 뒤의 설정 은 요청 한 URI 와 일치 해 야 합 니 다. 일치 하면 루트 디 렉 터 리 에 추 가 됩 니 다.하나의 URI 가 여러 location 과 일치 하면 nginx 가 불 러 올 때 접두사 가 가장 긴 일치 점 을 선택 합 니 다.
실례 1:
server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}


자원 작업 과정: 요청 한 것 이http://localhost/첫 번 째 로 일치 합 니 다. / data / ww 디 렉 터 리 에서 해당 하 는 자원 을 찾 습 니 다.하면, 만약, 만약...http://localhost/images/example.html두 번 째 location 에 일치 합 니 다. / root / data / images / example. html 이 자원 을 되 돌려 주지 않 으 면 404;하면, 만약, 만약...http://localhost/test/a.html 첫 번 째 location 에 일치 합 니 다. / data / www / test / a. html 자원 을 가 져 옵 니 다. 이 자원 이 없 으 면 404 를 되 돌려 줍 니 다.
정규 표현 식
location [ = | ~ | ~* | ^~ ] URI {}
location [op] URI { proxy_pass http://172.16.100.11/;} 그 중에서 op 은: = 경로 가 정확하게 일치 하고 현재 경로 만 포함 하 며 다른 경 로 는 포함 되 지 않 습 니 다. ^ ~정규 표현 식 메타 문자 매 칭 을 하지 않 고 문자 검색 매 칭 을 합 니 다 ~ * 대소 문 자 를 구분 하지 않 습 니 다. 메타 문자 매 칭 ~ 대소 문자 구분, 메타 문자 매 칭
실례
		location = /index.html {
            root   /web/eql;
            index  index.html index.htm;
            #【config A】
        }

        location / {
            root   /web;
            index  index.html index.htm;
            #【config B】
        }
        location /doc/ {
            root   /web;
            index  index.html index.htm;
            #【config C】
        }
        location ^~ /images/ {
            root   /web;
            index  index.html index.htm;
            #【config D】
        }
        location ~* \.jpg$ {
            root   /web/jpg/;
            #index  index.html index.htm;
            #【config E】
        }

테스트:
curl localhost/    				---> B
curl  localhost/index.html   	---> A
curl localhost/doc  	 		---> C
curl localhost/images 	 		---> D
curl localhost/1.jpg	 		---> E
curl localhost/doc/1.jpg 		---> E
curl localhost/images/1.jpg 	---> D

액세스 제어
IP 기반 접근 제어
server {
        listen 12345;
        deny   192.168.1.2;
        allow  192.168.1.1/24;
        deny   all;
    }
 

인증 을 통 해 접근 제어
로그 인 nginx 의 계 정과 비밀 번 호 를 설정 합 니 다.
[root@miner_k nginx]# yum -y install httpd-tools
[root@miner_k nginx]# htpasswd -c -m /etc/nginx/.users user1
New password: 
Re-type new password: 
Adding password for user user1

[root@miner_k nginx]# htpasswd -c -m /etc/nginx/.users user2
New password: 
Re-type new password: 
Adding password for user user2

특정한 디 렉 터 리 에 대한 접근 을 제한 합 니 다.
location /status {                                       
    auth_basic           “Administrator’s Area”;
    auth_basic_user_file /etc/nginx/.users; 
}

모든 디 렉 터 리 를 제한 하고 특정한 디 렉 터 리 를 공공 구역 으로 개발 합 니 다.
server {
    ...
    auth_basic           "Administrator’s Area";
    auth_basic_user_file /etc/nginx/.users;

    location /public/ {
        auth_basic off;
    }
}

IP 주소 와 인증 의 결합 사용
명령 어 satisfy 를 사용 하여 IP 와 신분 인증 의 제한 을 제어 합 니 다. all 을 사용 하면 이 두 가지 조건 이 모두 만족 해 야 방문 할 수 있 습 니 다. any 를 사용 하면 조건 이 만족 하면 방문 할 수 있 습 니 다.
location /status {
    ...
    satisfy all;    

    deny  192.168.1.2;
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny  all;

    auth_basic           "Administrator’s Area";
    auth_basic_user_file conf/htpasswd;
}

기록 및 모니터링
실시 간 활동 검색
location /status {
            stub_status on;
        }

문법: stubstatus on 기본 값: None 역할 영역: location
location 영역 만 들 기 stub 사용 하기status
"stub status" 모듈 에서 돌아 오 는 상태 정 보 는 mathopd 's 의 상태 정보 와 비슷 합 니 다. 돌아 오 는 상태 정 보 는 다음 과 같 습 니 다.
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
active connections

– 백 엔 드 에 대한 이벤트 연결 수
server accepts handled requests

– nginx 는 총 16630948 개의 연결 을 처리 하여 16630948 번 의 악 수 를 성공 적 으로 만 들 었 습 니 다 (중간 에 실패 하지 않 았 음 을 증명 합 니 다). 모두 31070465 개의 요청 을 처리 하 였 습 니 다 (평균 악수 할 때마다 1.8 개의 데이터 요청 을 처리 하 였 습 니 다)
reading

– nginx 에서 클 라 이언 트 의 Header 정 보 를 읽 습 니 다.
writing

– nginx 클 라 이언 트 에 게 되 돌아 오 는 Header 정보 수
waiting

– keep - alive 를 켜 면 이 값 은
active - (reading + writing)

다음 요청 명령 을 기다 리 고 있 는 상주 연결 을 처리 했다 는 뜻 이다.
파일 목록 보이 기
ngx_http_autoindex_module 은 ngx 에 만 있 습 니 다.http_index_module 모듈 에서 색인 파일 을 찾 을 수 없 을 때 요청 합 니 다.
location  /  {
	autoindex  on;
}


FastCGI 설정
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        
 location ~ \.php$ {
     root           html;
     fastcgi_pass   127.0.0.1:9000;   #   fpm     
     fastcgi_index  index.php;
	 fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;         #fastCGI   
     include        fastcgi_params;   #FastCGI       
 }
[root@miner_k nginx]# vim fastcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;               #CGI     
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;  #nginx   

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;


참고 문서
nginx 홈 페이지
nginx 중국어 문서
nginx 의 운영 구조

좋은 웹페이지 즐겨찾기