Nginx 흔 한 설정 요약
14836 단어 nginx
1. nginx
nginx 에 관 한 매 칭 규칙 은 nginx 를 배 울 때 반드시 알 아야 하 는 것 입 니 다. nginx 의 매 칭 규칙 을 알 게 된 것 은 nginx 학습 의 독 이 맥 을 뚫 은 것 과 같 습 니 다. 다음 과 같이 직접 정리 하 겠 습 니 다. 먼저 매 칭 은 location 모듈 에 쓰 여 있 고 일반 매 칭 과 정규 매 칭 으로 나 눌 수 있 습 니 다. 일반 location: ^ ~ = (정확 한 매 칭), 접두사 가 없습니다.(유사 / static /) eg:location ^~ /static {}
location = /static {}
location /static {}
보통 매 칭, 최 장 매 칭 규칙 에 따라 하나의 요청 이 두 개의 일반 규칙 에 일치 하 는 것 으로 가정 하면 길이 가 큰 것 을 선택 합 니 다. 일반적인 상황 에서 보통 매 칭 에 성공 한 후에 도 정규 매 칭 을 계속 합 니 다. 정규 매 칭 도 성공 하면 정규 매 칭 을 기준 으로 합 니 다. 단, ^ ~ 와 = 을 제외 하고 ^ ~ 와 = 매 칭 에 성공 한 후 에는 정규 매 칭 을 계속 하지 않 습 니 다.
정규 location: ~ (대소 문자 구분), ~ * (대소 문자 구분 하지 않 음) eg:
location ~ /static {}
location ~* /static {}
일반 location 과 정규 location 사이 에는 일반 매 칭 을 한 다음 정규 매 칭 을 합 니 다. 일반적인 경우 일반 매 칭 에 성공 한 후 에는 정규 매 칭 을 계속 합 니 다. 정규 매 칭 도 성공 하면 정규 매 칭 을 기준 으로 합 니 다. 단 ^ ~ 와 = 을 제외 하고 ^ ~ 와 = 매 칭 에 성공 한 후 에는 정규 매 칭 을 계속 하지 않 습 니 다.
먼저 정확 한 일치 규칙 이 있 는 지 확인 하고 있 으 면 정확 한 일치 규칙 을 처리 합 니 다. 정확 한 일치 규칙 이 발견 되면 다른 일치 규칙 을 검색 하지 않 고 현재 일치 하 는 규칙 을 되 돌려 줍 니 다. 그 다음 에 일반 문자 가 일치 하 는 지 확인 합 니 다. 이 일치 요청 은 정규 또는 더 긴 일치 가 있 는 지 확인 해 야 합 니 다. 있 으 면 정규 일치 또는 더 긴 일치 로 돌아 갑 니 다 ^ ~ 세 번 째 에 일치 합 니 다.단계 처리, 이 규칙 과 일치 하 는 것 을 요청 하면 다른 규칙 과 일치 하 는 것 을 중단 하고 이 규칙 을 되 돌려 줍 니 다. 정규 일치 가 마지막 으로 실 행 됩 니 다. 정규 일치 가 찾 으 면 다른 규칙 을 해석 하지 않 습 니 다. 이것 은 우선 순위 에 주의해 야 합 니 다.
또한 다음 URL 과 일치 하 는 접두사 로 끝 나 는 요청: / / 일치 하 는 URL 은 MP3 또는 MP4 로 끝 나 는 요청 입 니 다. $기 호 는 끝 표 지 를 표시 합 니 다. 대소 문 자 를 무시 하기 때문에 방문 접 두 사 는 MP3. mp3 입 니 다.
location ~* \.(mp3|mp4)$ {
proxy_pass http://localhost:8080 // 8080
}
2. nginx
부하 균형 에 대한 설정 은 upstream 설정 을 통 해 이 루어 집 니 다. 다음 인 스 턴 스 를 직접 보 세 요.upstream web_upstream {
server 192.168.1.100:8888;
server 192.168.1.101:8888;
server 192.168.1.102:8888;
}
server{
listen 80;
server_name www.oone.top;
location / {
proxy_pass http://web_upstream;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; // , IP
}
}
이 설정 을 통 해 nginx - s reload 를 설정 한 후 www. oone. top 에 방문 하면 설 정 된 세 개의 부하 균형 server 에 문의 합 니 다. 일반 부하 균형 요청 서버 는 같은 내부 네트워크 에 있 기 때문에 내부 네트워크 주 소 를 직접 사용 하면 됩 니 다. 부하 균형 방안 에 대해 흔히 볼 수 있 는 다음 과 같은 몇 가 지 를 파악 하면 됩 니 다. 1) 문의 (기본 값)기본 옵션 입 니 다. weight 가 시간 을 가리 키 지 않 을 때 각 서버 weight 가 같 습 니 다. 각 요청 은 시간 순서에 따라 서로 다른 백 엔 드 서버 에 배 치 됩 니 다. 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다.
upstream bakend {
server 192.168.1.10;
server 192.168.1.11;
}
2) weight 는 폴 링 확률 을 지정 합 니 다. weight 와 방문 비율 이 정비례 하여 백 엔 드 서버 의 성능 이 고 르 지 않 은 경우 에 사 용 됩 니 다. 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다. 예 를 들 어 아래 설정 은 1.11 서버 의 방 문 량 이 1.10 서버 의 두 배 (백 엔 드 노드 에 높 은 서버 는 weight 를 적 절 히 설정 할 수 있 습 니 다) 입 니 다.
upstream bakend {
server 192.168.1.10 weight=1;
server 192.168.1.11 weight=2;
}
3) ip hash 모든 요청 은 ip 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 그러면 모든 방문객 이 백 엔 드 서버 에 고정 적 으로 접근 하면 session 이 서버 를 뛰 어 넘 지 못 하 는 문 제 를 해결 하고 session 공 유 를 실현 할 수 있 습 니 다. 백 엔 드 서버 다운 이 떨 어 지면 수 동 으로 처리 해 야 합 니 다.
upstream resinserver {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
3. nginx rewrite
nginx 의 rewrite 에 대해 문법 은 rewrite regex replacement [flag]
입 니 다. 그 중에서 flag 는 last 로 현재 명령 을 끝내 고 location 일치, break 종료 현재 rewrite 명령, redirect 임시 재 설정 302, permanent 영구 재 설정 301 로 설정 할 수 있 습 니 다. 예 를 들 어 2 차원 코드 스 캔 은 방문 한 ua 설정 에 따라 서로 다른 url 로 이동 합 니 다. location = /app {
if ($http_user_agent ~* (android)) {
rewrite ^ http://www.oone.com/download.html redirect;
}
if ($http_user_agent ~* (iphone)) {
rewrite ^ https://itunes.apple.com/cn/app/nikki/id1214764672?mt=8 redirect;
}
}
1) Nginx Rewrite 기본 태그 (flags)
last 는 기본적으로 이 플래그 를 사용 합 니 다. Apache 의 [L] 에 해당 합 니 다.rewrite 가 완료 되 었 음 을 표시 합 니 다. 다음 규칙 break 와 일치 하지 않 습 니 다. Rewirte 를 중단 합 니 다. redirect 와 일치 하지 않 습 니 다. 임시 재 설정 HTTP 상태 302 permanent 는 영구적 으로 재 설정 한 HTTP 상태 301 을 되 돌려 줍 니 다. 기 존의 url 은 정규 를 지원 합 니 다. 재 작성 한 url 은 정규 2 를 지원 하지 않 습 니 다) 정규 표현 식 과 일치 합 니 다. 그 중에서 * ~ 대소 문 자 를 구분 하기 위해 일치 합 니 다 * ~ * 는 크기 를 구분 하지 않 습 니 다.쓰기 일치 *! ~ 와! ~ * 는 대소 문자 가 일치 하지 않 는 지, 대소 문자 가 일치 하지 않 는 지 구분 하지 않 는 지 3) 파일 과 디 렉 터 리 가 일치 합 니 다. 그 중에서 * - f 와! - f 는 파일 이 존재 하 는 지 판단 하 는 데 사 용 됩 니 다 * - d 와! - d 는 디 렉 터 리 가 존재 하 는 지 판단 하 는 데 사 용 됩 니 다 * - e 와! - e 는 파일 이나 목록 이 존재 하 는 지 판단 하 는 데 사 용 됩 니 다 * - x 와! - x 는 파일 이 실행 가능 한 지 판단 하 는 데 사 용 됩 니 다변수, 조건 판단 가능:
$args # , $query_string
$arg_NAME # , “?” arg_name=arg_value arg_name
$binary_remote_addr # , 4
$body_bytes_sent # , ; Apache mod_log_config "%B"
$bytes_sent #
$connection #TCP
$connection_requests #TCP
$content_length # "Content-Length"
$content_type # "Content-Type"
$cookie_name #cookie
$cookie_NAME # Header cookie , "$cookie_" cookie , cookie
$document_uri # $uri
$document_root #
$host # :HTTP >"HOST" > . , ,
$hostname #
$https # SSL , "on", 。
$http_NAME # ; NAME , http :"Accept-Language",$http_accept_language
$http_cookie # cookie
$http_host # , (IP )
$http_referer #url ,
$http_user_agent #
$http_x_forwarded_for
$is_args # , "?",
$limit_rate #
$msec # Unix
$nginx_version #nginx
$pid # PID
$pipe # , "p", "."
$proxy_protocol_addr # , ,
$query_string # $args
$realpath_root # , $remote_addr # IP $remote_port # $remote_user # HTTP
$request #
$request_body # : location , proxy_pass,fastcgi_pass,uwsgi_pass scgi_pass
$request_body_file # 。 , 。 , $request_completion # , "OK", ,
$request_filename # , root alias URI $request_length # ( ,http )
$request_method #HTTP , "GET" "POST"
$request_time # , , ; , 。
$request_uri # URI, , $uri URI, , :"/cnphp/test.php?arg=freemouse"
$scheme # Web ,"http" "https"
$server_addr # , : linux , ip
$server_name #
$server_port #
$server_protocol # HTTP , "HTTP/1.0" "HTTP/1.1"
$status #HTTP
$time_iso8601 # ISO 8610
$time_local # (LOG Format )
$sent_http_NAME # http ; NAME , Content-length,$sent_http_content_length $sent_http_cache_control #
$sent_http_connection #
$sent_http_content_type #
$sent_http_keep_alive #
$sent_http_last_modified #
$sent_http_location #
$sent_http_transfer_encoding #
$uri # URI( , $args), $request_uri , , index ,$uri , "/foo/bar.html"。
nginx 의 rewrite 명령 실행 순서:
1) server 블록 을 실행 하 는 rewrite 명령 (여기 블록 은 server 키워드 후 {} 에 둘러싸 인 영역 을 말 합 니 다. 다른 xx 블록 과 유사 합 니 다)2) location 매 칭 3) 선 택 된 location 의 rewrite 명령 을 실행 합 니 다. 만약 URI 가 재 작성 되 었 다 면, 실제 존재 하 는 파일 을 찾 을 때 까지 1 - 3 을 반복 합 니 다. 10 회 이상 순환 하면 500 Internal Server Error 오 류 를 되 돌려 줍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.