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 의 운영 구조