08. Nginx 상태 코드
이 글 은 운영 과정 에서 자주 만 나 는 상태 코드 를 소개 하고 업계 에서 유행 하 는 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 #
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.