08. Nginx 상태 코드

11337 단어
HTTP 상태 코드
이 글 은 운영 과정 에서 자주 만 나 는 상태 코드 를 소개 하고 업계 에서 유행 하 는 Nginx 를 통 해 시 뮬 레이 션 을 한다.
2XX 상태 코드
2XX 형식 상태 코드 는 HTTP 요청 이 성공 했다 는 것 을 나타 내 는데 가장 전형 적 인 것 은 200 이다.
# 200   
#               ,    HTTP          ,        

3XX 상태 코드
# 3XX          HTTP  URL     ,    3XX    301,302,304

301
# URL:        , Nginx   rewrite    permanent    .

server {
	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;
	
    rewrite ^(.*)$ /index.html permanent;
	
    location / {
	 	index index.html index.htm;
 	}
}

curl 127.0.0.1  -I
# TTP/1.1 301 Moved Permanently

302
# URL:      , Nginx  rewrite    redirect    
server {
	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
 
    rewrite ^(.*)$ /index.html redirect;
 	
    location / {
 		index index.html index.htm;
 	}
}

curl 127.0.0.1 -I
# HTTP/1.1 302 Moved Temporarily

301 VS 302
# 301 302     URL   。  301     ,302     。         ,                   。       A         B,             A   B。    ,          301 302 ?

#             。                ,    A            B,         A        ,   B           。                    ,                      。       302        。

304
#      ,  Nginx  expires    

server {
	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;
 	
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html)$ {
 		expires 1d;
 	}
}

#                ,                ,     304,                 

4XX 상태 코드
# 4XX               。      HTTP      、         、      。           。   4XX     400、401、403 。

400
#  WEB         HTTP    ,   400   。       Cookie    ,               。           ? 

#     WEB        。 Nginx   WEB    ,           large_client_header_buffers。           ,   400   。
server {
 	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;
 
    #     NGINX HTTP  SERVER      。
 	#       SERVER     ,   HTTP    。
 
    large_client_header_buffers 1 1k;
 	
    location / {
 		index index.html index.htm;
 	}
}
#   
#        1K cookie
curl --cookie "user=sidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidisidisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidisidisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidisidisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidisidisisidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisidisidissidisisidisidisisidisidisisidisidisisidisidisisidisidisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisissisisisisisisisisisisisisisiisissiissisisisiissi"  127.0.0.1 -I
HTTP/1.1 400 Bad Request
Server: nginx/1.18.0
Date: Mon, 04 May 2019 11:05:55 GMT
Content-Type: text/html
Content-Length: 233
Connection: close

401
#       。       、       ,            。 Nginx          ,   Nginx       。

인증 사용자 이름과 비밀번호 생 성
htpasswd -c /etc/passwd.db youmen

# Nginx    
server {
 	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;
 
    location / {
 		auth_basic "secret";
 		auth_basic_user_file /etc/passwd.db;
 		index index.html index.htm;
 	}
}

#   
# test.com    hosts       ,                  

403
#       ,                 IP     ,    403   
#           
# ll /usr/share/nginx/html/index.html
-rw-r--r-- 1 root root 3700 3  6 04:26 /usr/share/nginx/html/index.html
# chmod 0 /usr/share/nginx/html/index.html
# ll /usr/share/nginx/html/index.html
---------- 1 root root 3700 3  6 04:26 /usr/share/nginx/html/index.html
    

# Nginx    
server {
 	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;
 		
    location / {
 		index index.html index.htm;
 	}
}

curl http://127.0.0.1/index.html  -I
# HTTP/1.1 403 Forbidden

404
#      ,             ,        
#   403         ,    URL  
curl http://127.0.0.1/youmen  -I
# HTTP/1.1 404 Not Found

499
# 499        http           ,  Nginx          。             ,Nginx    499    。          ,   Nginx               ,           。
#     PHP  ,      Nginx root   ,               
cat sleep.php


#   PHP-FPM  
systemctl start php-fpm

#   Nginx    
server {
 	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;


 	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html)$ {
 		expires 1d;
 	}
 	location / {
 		#    fastcgi.conf     SCRIPT_FILENAME   ,   5XX        
 
 		# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 		include fastcgi.conf;
 		# PHP-FPM      9000  。        ,     。
 		fastcgi_pass 127.0.0.1:9000;
 	}
}

#   
#          ,CTRL + C    
curl http://127.0.0.1/sleep.php -I
^C
#  CURL        access.log
tail -f /var/log/nginx/access.log
127.0.0.1 - - [13/May/2019:23:24:33 -0400] "HEAD /sleep.php HTTP/1.1" 499 0
"-" "curl/7.29.0"

5XX 상태 코드
# 5XX               ,            

500
#  Nginx  root     sleep.php      ,   PHP      。
# cat sleep.php


#   Nginx    
server {
 	listen 80;
 	server_name test.com;
 	root /usr/share/nginx/html;
 	access_log /var/log/nginx/access.log;
 	error_log /var/log/nginx/error.log;


 	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html)$ {
 		expires 1d;
 	}
 	location / {
 		#    fastcgi.conf     SCRIPT_FILENAME   ,   5XX        
 
 		# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 		include fastcgi.conf;
 		# PHP-FPM      9000  。        ,     。
 		fastcgi_pass 127.0.0.1:9000;
 	}
}

curl http://127.0.0.1/sleep.php -I
# HTTP/1.1 500 Internal Server Error
# 1.web    , php    ,lua     .
# 2.       ,        ,          .


#       :
#   nginx error log ,  php error log
#    too many open files,  nginx worker_rlimit_nofile  ,
#   ulimit          ,  /etc/security/limits.conf
#         ,         ,     
#        ,    too many open files,
#           ,              

오류 원인 요약: 1. 하 드 디스크 공간 이 꽉 찼 습 니 다.
df - k 를 사용 하여 하 드 디스크 공간 이 꽉 찼 는 지 확인 합 니 다.하 드 디스크 공간 을 청소 하면 500 오 류 를 해결 할 수 있다.nginx 가 access log 를 열 었 다 면 필요 하지 않 은 상황 에서 access log 를 닫 는 것 이 좋 습 니 다.access log 는 대량의 하 드 디스크 공간 을 차지 합 니 다.
2. nginx 프로필 오류
문법 오류 가 아 닙 니 다. nginx 설정 파일 에 문법 오류 가 있 으 면 시작 할 때 알려 줍 니 다.rewrite 를 설정 할 때 일부 규칙 을 잘못 처리 하면 500 오류 가 발생 할 수 있 습 니 다. rewrite 규칙 을 자세히 확인 하 십시오.설정 파일 에 일부 변 수 를 잘못 설정 하면 500 오류 가 발생 할 수 있 습 니 다. 예 를 들 어 값 이 없 는 변 수 를 참조 한 것 입 니 다.
3. 위의 문제 가 존재 하지 않 는 다 면 시 뮬 레이 션 의 병발 수가 너무 많 을 수 있 습 니 다. nginx. conf 의 병발 설정 수 를 조정 해 야 합 니 다.
3. 시스템 파일 열기 제한
해결 방법 은:
vim /etc/security/limits.conf
soft nofile 65535
hard nofile 65535


#    /etc/nginx/nginx.conf
#  worker_processes      
vim /etc/nginx/nginx.conf
worker_rlimit_nofile 65535;
systemctl reload nginx

kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'`
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi
killall -HUP nginx

#      nginx  

다시 시작 한 후에 nginx 의 오류 로 그 를 보 았 지만 500 보고 가 틀 렸 다 는 것 을 발견 하지 못 했 습 니 다.데이터베이스 문제 일 수도 있 습 니 다.
502
# 502 Bad Geteway。Nginx 502        ,                       。         Nginx     ,         。          PHP-FPM       ,    502  
#      PHP-FPM    。
# systemctl stop php-fpm


#     
curl http://127.0.0.1/sleep.php  -I
# HTTP/1.1 502 Bad Gateway

요청 한 php - fpm 가 실행 되 었 으 나 어떤 이유 로 실행 이 완료 되 지 않 아 php - fpm 프로 세 스 가 종료 되 었 습 니 다. 오류 원인 이 많 습 니 다. 일반적으로 Nginx 자체 가 아 닙 니 다. 백 엔 드 에서 원인 을 찾 습 니 다. 예 를 들 어 PHP 가 끊 기 는 것 입 니 다.
PHP 에 있어 서 502 원인 은 스 크 립 트 의 실행 시간 이 Timeout 설정 시간 을 초과 하거나 설정 이 너무 커서 PHP 가 장시간 풀 리 지 않 고 worker 프로 세 스 가 요청 을 받 지 않 는 것 입 니 다.
PHP 실행 시간 을 적 절 히 늘 리 고 502 를 제거 하 며 최적화 하 는 데 더 많은 시간 이 걸 립 니 다.php 실행 시간 선택 을 제어 하 는 데 두 가지 가 있 습 니 다.
1 > php. ini 에서 maxexecution (에 쉬 큐 훈)timeout
2 > phop 실행 프로그램의 성능 과 관련 이 있 을 수 있 습 니 다. 사이트 방문 이 많 고 phop - cgi 의 프로 세 스 수가 적 습 니 다. 이 경우 phop - cgi 의 프로 세 스 수 를 늘 려 phop - fpm. conf 의 maxchildren 값 이 적 절 히 증가 합 니 다. 이 데 이 터 는 VPS 나 독립 서버 설정 에 따라 설정 되 어 있 습 니 다. 보통 phop - cgi 프로 세 스 가 20m 메모 리 를 차지 하 므 로 적 당량 증가 한 것 으로 계산 합 니 다.
503
임시 서버 유지보수 나 과부하 로 인해 서버 는 현재 요청 을 처리 할 수 없습니다. 이 상 태 는 임시 이 며 일정 시간 후에 복 구 됩 니 다.
대부분 사이트 의 방문 수량 이 너무 많아 서 데이터 요청 이 너무 많 습 니 다. Nginx 는 백 엔 드 로 전송 하지 않 거나 Upstream 의 주소, 포트 문 제 는 먼저 CPU, 메모리, 부하 가 매우 높 습 니 다. 설정 을 검사 하지 않 으 면.
더 좋 은 설정 으로 공간 을 업그레이드 하거나 사이트 시스템 프로그램 을 검사 하여 더욱 좋 습 니 다.단일 IP 병발 설정 이 너무 작 으 면 503 오류 가 발생 할 수 있 습 니 다.
504
# 504 Gateway Time-out。    ,     。 PHP-FPM       Nginx     ,       504   。
#               php-fpm         

서버 는 게 이 트 웨 이 나 프 록 시 로 서 상위 서버 로부터 요청 을 받 지 못 했 습 니 다.클 라 이언 트 가 게 이 트 웨 이 에 도착 하지 않 았 고 실행 가능 한 pp - fpm 에 요청 하지 않 았 습 니 다.
# 1>   Nginx.conf     ,Nginx      ;
# 2> PHP-FPM        Nginx      ;

작은 매듭
1XX	   #                       
200	   #     HTTP         
301    #      
302    #      
401    #     
403    #      ,    
404    #      ,          
410    #             ,         
500    #        

좋은 웹페이지 즐겨찾기