12 linux - nginx 서버 설치 | 조작
1 프로필 기본 편: Nginx 소개 Nginx 컴 파일 설치 Nginx 통합 PHP Nginx 신호 제어
:
Nginx
Nginx
Nginx gzip
:
Nginx
Nginx Rewrite
Nginx memcached
:
Nginx
Nginx
Nginx
2 컴 파일 설치
linux># cd /usr/local/src
linux># wget http://nginx.org/download/nginx-1.14.2.tar.gz
linux># tar zxvf nginx-1.14.2.tar.gz
linux># cd nginx-1.14.2
linux># ./configure --prefix=/usr/local/nginx 【 】
HTTP rewrite PCRE library
linux># yum install pcre 【 pcre, 】【ubuntu yum 】
linux># yum install pcre-devel【 】【 , 】
linux># ./configure --prefix=/usr/local/nginx 【 again】
linux># make && make install 【 】
3. 간단 한 명령
3.1 시동
linux># cd /usr/local/nginx
linux># ll
....conf
... html
...logs
...sbin
linux># ./sbin/nginx 【 】
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
....
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
80 ,80
( apache,nginx , apache )
: 80 .
kill -9 2985 【 kill 】
pkill -9 http
3.2 [nginx 의 신호 제어 와 프로 세 스 관리] 를 닫 습 니 다.
linux nginx># kill -INT 6425 【 】【nginx master id】
linux nginx># kill -HUP 6425 【 nginx , , 】
linux nginx>#
//
TERM,INT【Quick shutdown】
QUIT ,
HUP ,
USR1 【Reopen the log files】【 ,nginx , 】
USR2 【 , 】
WITCH 【 ( USR2 )】
linux nginx># kill -USR1 6425 【 , 】
linux nginx># kill -HUP `cat logs/nginx.pid`【 】
linux nginx># ./sbin/nginx -s reload 【 -HUP】
linux nginx># ./sbin/nginx -s stop 【 】
linux nginx># ./sbin/nginx -s reopen 【-USR1】
linux nginx># ./sbin/nginx -t 【 】
4 nginx 가상 호스트 설정
linux nginx># vim ./conf/nginx.conf
4.1 Nginx 설정 세그먼트
// 001
worker_processes 1; // 1 , , , CPU, CPU *
// 002
Event {
// nginx
// 1 word
worker_connections 1024; // 1024
}
// 003 http
http {
server { //
Location { // , , image , .php
}
}
server {
}
}
4.2 가상 호스트 설정
1:
server {
listen 80; #
server_name a.com; #
location / {
root a.com; # : nginx
index index.html;
}
}
2:
server {
listen 2022;
server_name z.com;
location / {
root /var/www/html2022;
index index.html;
}
}
3: IP
server {
listen 8080;
server_name 192.168.1.200;
location / {
root html/ip;
index index.html;
}
}
5 nginx 로그 관리
nginx 의 server 세그먼트 를 관찰 하면 다음 과 같은 정 보 를 볼 수 있 습 니 다.
#access_log logs/host.access.log main;
이 설명: 이 server 의 접근 로그 파일 은 logs / host. access. log 입 니 다. 사용 하 는 형식 인 "main" 형식 입 니 다. main 형식 을 제외 하고 다른 형식 을 사용자 정의 할 수 있 습 니 다.
main 형식 이 뭐 예요?
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
main 형식 은 로그 의 형식 을 정의 하고 이름 을 지어 서 인용 하기 편리 합 니 다. 위의 예 로 main 형식의 로그, 기 록 된 reoteaddr、http_x_forwarded_for 등 옵션.
5.1 로그 형식 은 어떤 옵션 을 기록 하 는 것 을 말 합 니 다.
기본 로그 형식: main, 원 격 IP - 원 격 사용자 / 사용자 시간 - 요청 방법 (예: GET / POST) - 요청 체 body 길이 - referer 소스 정보 http - user - agent 사용자 에이전트 / 거미, 전송 요청 의 원본 IP httpx_forwarded_for: 대 리 를 거 칠 때 대 리 는 원래 IP 를 이 정보 에 추가 하여 원본 IP 를 전송 합 니 다.
5.2: 독특한 logformat 및 이름
log_format mylog '$remote_addr- "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
아래 server / location 에서 my log 를 참조 할 수 있 습 니 다.
server 세그먼트 에서 이렇게 설명 합 니 다:
access_log logs/access_8080.log mylog;
// log log log ;
Nginx 는 서로 다른 server 에 대해 서로 다른 로 그 를 할 수 있 습 니 다. (lighttp 와 같은 웹 서버 는 지원 되 지 않 습 니 다)
5.3 실제 응용:
셸 + 정시 작업 + nginx 신호 관리, 로그 완료 날짜 에 따라 분석 방향 을 저장 합 니 다. 새벽 00: 00: 01, 어제 로 그 를 이름 을 바 꾸 고 해당 디 렉 터 리 에 놓 습 니 다.다시 USR 1 정보 번호 제어 nginx 새 로그 파일 생 성
:
#!/bin/bash
base_path='/usr/local/nginx/logs'
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log 【 】
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
부분 명령 데모:
linux nginx># date
linux nginx># date -d yesterday
linux nginx># date -d yesterday +%Y%m%d%H%M
linux nginx># mkdir /data 【 】
linux nginx># cd /data
linux data># vim runlog.sh
#!/bin/bash
echo $(date -d yesterday +%Y%m%d) 【 $ ` 】
linux data># sh runlog.sh 【 】
#!/bin/bash【 】
base_path='/usr/local/nginx/logs' 【 】
log_path=$(date -d yesterday +"%Y%m")
day=$(date -d yesterday +"%d")
mkdir -p $base_path/$log_path 【 】
mv $base_path/access.log $base_path/$log_path/access_$day.log
#echo $base_path/$log_path/access_$day.log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
#!/bin/bash【 】
LOGPATH=/usr/local/nginx/logs/host.access.log
BASEPATH=/data
bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).host.access.log
// echo $bak 【 】
mv $LOGPATH $bak 【 】
touch $LOGPATH 【 logpath】
kill -USR1 `/usr/local/nginx/logs/nginx.pid` 【 nginx】
linux data> crontab -e
*/1 * * * * sh /data/runlog.sh 【 , runlog.sh 】
【 】
2 0 */1 * * sh /data/runlogday.sh
6 location 문법
6.1 location 문법 location 은 '포 지 셔 닝' 이라는 뜻 으로 Uri 에 따라 서로 다른 포 지 셔 닝 을 할 수 있 습 니 다. 가상 호스트 의 설정 에서 없어 서 는 안 됩 니 다. location 은 사이트 의 다른 부분 을 서로 다른 처리 방식 으로 포 지 셔 닝 할 수 있 습 니 다. 예 를 들 어. php 를 만나면 어떻게 PHP 해석 기 를 호출 합 니까?위치
location
location [=|~|~*|^~] patt {
}
,
, 3
location = patt {} [ ]
location patt{} [ ]
location ~ patt{} [ ]
6.2 정확 한 일치 와 일반 일치 결합 사용
?:
, , .
location = patt {
config A
}
$uri == patt, , configA
//
location = / {
root /var/www/html/;
index index.htm index.html;
}
//
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
http://xxx.com/
1: ”/” , index index.htm
2: /index.htm , uri ”/index.htm” ,
/usr/local/nginx/html
3: , /usr/local/nginx/html/index.htm
6.2 일반 매 칭 과 정규 매 칭 을 결합 하여 사용
, .
//
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
//
location ~ image {
root /var/www/image;
index index.html;
}
http://xx.com/image/logo.png
, “/” ”/image/logo.png”
,”image” ”image/logo.png” , ?
.
/var/www/image/image/logo.png
6.3 두 개의 일반적인 일치 [방문 장]
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
location /foo {
root /var/www/html;
index index.html;
}
http://xxx.com/foo
uri “/foo”, location patt,
‘/’ ‘/foo’, ‘/foo’ ’/foo’,
, /var/www/html/index.html
:’/foo’ , .;
7 rewrite 재 작성 [location 내부 에서 사용]
7.1 재 작성 에 사용 되 는 명령 어
if ( ) {} ,
set #
return #
break # rewrite
rewrite #
7.2 If 문법 형식
if ( ) {
}
7.3 조건 은 또 어떻게 씁 니까?【 3 가지 쓰 기 】 1: "=" 은 같은 것 을 판단 하고 문자열 비교 2: "~" 는 정규 로 일치 합 니 다. (이곳 의 정규 대소 문자 구분) "~ *" 대소 문 자 를 구분 하지 않 는 정규 3: - f - d - e 는 파일 인지, 디 렉 터 리 인지, 존재 하 는 지 여 부 를 판단 합 니 다.
7.4 다시 쓰기: 예
if ($remote_addr = 192.168.1.100) {
return 403;
}
if ($http_user_agent ~ MSIE) {
rewrite ^.*$ /ie.htm;
break; #( break )
}
if (!-e $document_root$fastcgi_script_name) {
rewrite ^.*$ /404.html break;
}
, break;
xx.com/dsafsd.html ,
, , GET /dsafsd.html HTTP/1.1
: rewrite 302 .
URL , http 404.html, rewrite, ;
URL , http 404.html, rewrite, ;
fastcgi_script_name dsafsd.html, .
7.5 set: set 는 변 수 를 설정 하 는 데 사 용 됩 니 다. 여러 조건 으로 판단 할 때 표지 용 으로 사용 할 수 있 습 니 다. apache 에 도달 한 rewritecondition 효과
: IE , break; set
if ($http_user_agent ~* msie) {
set $isie 1;
}
if ($fastcgi_script_name = ie.html) {
set $isie 0;
}
if ($isie 1) {
rewrite ^.*$ ie.html;
}
7.6 Rewrite 정규 표현 식 이 정 해진 위치 모드
Goods-3.html ---->Goods.php?goods_id=3
goods-([\d]+)\.html ---> goods.php?goods_id =$1
//
location /ecshop {
rewrite "goods-(\d{1,7})\.html" /ecshop/goods.php?id=$1;
}
//
location /ecshop {
index index.php;
rewrite goods-([\d]+)\.html$ /ecshop/goods.php?id=$1;
rewrite article-([\d]+)\.html$ /ecshop/article.php?id=$1;
rewrite category-(\d+)-b(\d+)\.html /ecshop/category.php?id=$1&brand=$2;
rewrite category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d\.]+)\.html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5;
rewrite category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d+\.])-(\d+)-([^-]+)-([^-]+)\.html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8;
}
// rewrite
//category-3-b2-min200-max1700-attr167.227.202.199.html
//category-3-b0-min0-max0-attr0-1goods_id-DESC.html
: url , ”{}”,
8 nginx + phop 의 컴 파일
8.1 컴 파일 apache 는 일반적으로 phop 을 자신의 모듈 로 시작 합 니 다. nginx 는 http 요청 변수 (예 를 들 어 get, user agent 등) 를 phop 프로 세 스, 즉 phop 독립 프로 세 스 로 전송 하여 nginx 와 통신 합 니 다. fastcgi 실행 방식 이 라 고 합 니 다. 따라서 apache 에 컴 파일 된 phop 은 nginx 에 사용 할 수 없습니다.
: PHP :
mysql, gd, ttf, fpm(fascgi)
linux src/php># ./configure -help | grep mysql
linux src/php># ./configure --prefix=/usr/local/fastphp \
--with-mysql=mysqlnd \
--enable-mysqlnd \
--with-gd \
--enable-gd-native-ttf \
--enable-gd-jis-conv
--enable-fpm 【 】
8.2 nginx 에서 location 을 가리 키 는 phop 컴 파일 이 끝 난 후: 1: nginx + phop 의 설정 이 간단 합 니 다. 핵심 은 한 마디 입 니 다. - 요청 한 정 보 를 9000 포트 의 PHP 프로 세 스에 전송 하여 지정 한 디 렉 터 리 에 있 는 PHP 파일 을 처리 하도록 합 니 다.
:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
1: php ,
2: html,
3: 9000 PHP ,
4: PHP , $document_root$fastcgi_scriptname
( :PHP , )
10 nginx gzip 압축 사이트 속도 향상 [최적화]
news.163.com
:
Accept-Encoding:gzip,deflate,sdch
:
Content-Encoding:gzip
Content-Length:36093
, , 10W , 36093
----> gzip .
:
--- ----> gzip deflate compress sdch
http -- , accept-encoding: gzip deflate sdch ( , sdch google , )
--> --- gzip ---->
//gzip
gzip on;
gzip_buffers 32 4K;
zip_comp_level 6;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzio_type text/plain application/xml;
gzip
gzip on|off; # gzip
gzip_buffers 32 4K| 16 8K # ( ? ?)
gzip_comp_level [1-9] # 6 ( , , CPU )
gzip_disable # UA Uri gzip
gzip_min_length 200 # ( , )
gzip_http_version 1.0|1.1 # http ( , 1.1 )
gzip_proxied # ,
gzip_types text/plain application/xml # txt,xml,html ,css
gzip_vary on|off # gzip
:
/mp3 ,
, 100->80 , CPU .
gzip http,server,location,
:
nginx/conf/mime.types txt,css mime
11 expires 캐 시 [최적화]
11.1. 사이트 의 이미지, 특히 뉴스 사이트 의 경우 이미지 가 발표 되면 변경 되 는 것 은 매우 작 을 수 있 습 니 다. 사용자 가 한 번 방문 한 후에 이미지 캐 시 는 사용자 의 브 라 우 저 에 있 고 시간 이 비교적 긴 캐 시 를 사용 할 수 있 기 를 바 랍 니 다. nginx 의 expires 설정 을 사용 할 수 있 습 니 다. nginx 에 서 는 만 료 시간 을 설정 하고 매우 간단 합 니 다. location 또는 if 단락 에서 작성 할 수 있 습 니 다. 형식 expires 30s;expires 30m; expires 2h; expires 30d;
location ~ image{
root html;
expires 1d;
}
// nginx
location ~* \.(jpg|jpeg|gif|png){
root html;
expires 1d;
}
11.2 304 캐 시
: 304
: , etag ( , , ), last_modified_since 2
, , , , etag,last_modified_since
, .
, , .
, html,js,css,
12 nginx 역방향 프 록 시 + 부하 균형
12.1 nginx 역방향 에이전트 nginx + apache 동정 분리 실현
nginx ,
1 proxy, 1 upstream, ,
, nginx php , php apache .
----> ---->nginx.html---->proxy_pass---->apache php;
---- ” ”, , .
location ~ \.php$ {
proxy_pass http://192.168.1.200:8080
}
12.2 nginx 부하 균형
, , proxy_pass ?
upstream , proxy_pass
, , .
, , 3
upstream imgserver {
server 192.168.1.200:81 weight=1 max_fails=2 fail_timeout=3;
server 192.168.1.200:82 weight=1 max_fails=2 fail_timeout=3;
}
server{
listen 81;
server_name localhost;
root html/image;
access_log logs/81-access.log main;
}
server{
listen 82;
server_name localhost;
root html/image;
access_log logs/82-access.log main;
}
location ~* \.(jpg|jpeg|gif|png){
proxy_pass http://imgserver;
}
// imageServer
IP, IP, IP, ?
// header,X-Forwarded-For
location ~* \.(jpg|jpeg|gif|png){
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://imgserver;
}
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
13.1 nginx - -- > memcached --- > 캐 시 없 음 --- > php - --- > DB
// , memcached
location / {
set $ "$uri"
memcached_pass 127.0.0.1:11211;
error_page 404 /callback.php;
}
13.2 Nginx 제3자 모듈 컴 파일 및 일치 성 해시 응용
nginx hash($uri)---> memcached_key
php hash($uri)---> memcached_key
:
nginx consistentHash
13.2.1 설치 ngxhttp_consistent_hash 플러그 인 [내 려 갈 수 없 을 수도 있 습 니 다. 직접 다운로드 하 세 요]
linux #>cd /usr/local/src
linux #>wget https://github.com/replay/ngx_http_consistent_hash.git
linux #>unzip gx_http_consistent_hash-master
linux #>cd ngx_http_consistent_hash-master
linux #>ls
// cd nginx
linux #>cd /usr/local/src/nginx-1.14.2
linux #>ls src/
linux #> /usr/local/nginx/sbin/nginx -v 【 nginx 】
linux #> .configure --help|grep with 【 help】
【 , 】
linux src/nginx-1.14.2#> ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_http_consistent_hash-master/【 】
linux src/nginx-1.14.2#> pkill -9 nginx【 nginx, 】
linux src/nginx-1.14.2#> make && make install 【 】
linux #> nginx
13.2.2 memcache 군집 설정
upstream memserver { memcached ,
//hash_key $request_uri; // hash , uri hash
consistent_hash $request_uri;
server 127.0.0.1:11211;
server 127.0.0.1:11212;
}
Location
location / {
# root html;
set $memcached_key $uri;
memcached_pass memserver; // memserver memcache
error_page 404 /writemem.php;
index index.php index.html index.htm;
}
memcached hash
---->php.ini
---->memcache.hash_strategy=consistent
14 대 방 문 량 최적화 전체 사고방식
--- nginx
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.