Nginx 튜 토리 얼 1: 기본 개념
우 리 는 Nginx 가 어떻게 일 하 는 지, 그 뒤의 개념 이 어떤 것 이 있 는 지, 그리고 응용 프로그램의 성능 을 향상 시 키 는 방법 을 알려 줄 것 이다.어떻게 설치 하고 어떻게 시작 하고 운행 하 는 지 알려 줄 게.
이 강 좌 는 3 절 을 포함한다.
Google 의 목 표 는 gzip, SSL 등 특정 테마의 정확 한 설정 을 쉽게 찾 을 수 있 도록 일련의 튜 토리 얼 을 만 들 거나 그 설정 을 직접 탐색 하 는 것 입 니 다.최고의 학습 체험 을 얻 기 위해 서 는 자신의 기계 에 Nginx 를 설치 하고 직접 실전 을 해 보 는 것 을 권장 합 니 다.
Nginx 가 뭐 예요?
Nginx 는 처음에 웹 서버 로 만 들 어 졌 으 며, C10k 문 제 를 해결 하 는 데 사용 되 었 다.웹 서버 로 서 놀 라 운 속도 로 데이터 서 비 스 를 제공 할 수 있 습 니 다.그러나 Nginx 는 웹 서버 뿐만 아니 라 역방향 프 록 시 로 도 사용 할 수 있 으 며 느 린 상류 서버 (예 를 들 어 유 니 콘 이나 Puma) 와 쉽게 통합 할 수 있 습 니 다.트 래 픽 (부하 이퀄 라이저), 스 트림 미디어, 동적 으로 이미지 크기 조정, 캐 시 내용 등 을 적 절 히 분배 할 수 있 습 니 다.
기본 적 인 nginx 시스템 구 조 는 master 프로 세 스 와 워 커 프로 세 스 로 구성 되 어 있 습 니 다.master 는 설정 파일 을 읽 고 워 커 프로 세 스 를 유지 하 며 워 커 는 요청 을 실제 처리 합 니 다.
기본 명령
nginx 를 시작 하려 면 입력 만 하면 됩 니 다:
[sudo] nginx
nginx 인 스 턴 스 가 실 행 될 때 해당 하 는 신 호 를 보 내 서 관리 할 수 있 습 니 다.
[sudo] nginx -s signal
사용 가능 한 신호:
명령 과 문맥
nginx 설정 파일, 기본 위 치 는 다음 과 같 습 니 다.
/etc/nginx/nginx.conf
, /usr/local/etc/nginx/nginx.conf
또는 /usr/local/nginx/conf/nginx.conf
프로필 은 아래 부분 으로 구성 되 어 있 습 니 다:
gzip on;
worker_processes 2; # http { # http gzip on; # http server { # server listen 80; # server }}
명령 형식
여러 컨 텍스트 에서 같은 명령 을 사용 할 때 조심해 야 합 니 다. 계승 모델 이 서로 다른 명령 을 가지 고 있 지 않 기 때 문 입 니 다.세 가지 유형의 지령 이 있 는데, 각각 자신의 계승 모델 이 있다.
일반 명령 어
모든 문맥 에 유일한 값 만 있 습 니 다.그리고 현재 컨 텍스트 에서 만 정의 할 수 있 습 니 다.하위 컨 텍스트 는 부모 급 의 값 을 덮어 쓸 수 있 으 며, 이 덮어 쓰 기 는 현재 하위 컨 텍스트 에서 만 유효 합 니 다.
gzip on;gzip off; # , 2 server { location /downloads { gzip off; } location /assets { # gzip is on here }}
배열 명령
같은 컨 텍스트 에 여러 개의 명령 을 추가 하면 완전히 덮어 쓰 는 것 이 아니 라 여러 개의 값 을 추가 합 니 다.하위 컨 텍스트 에서 명령 을 정의 하면 부모 컨 텍스트 의 값 을 덮어 씁 니 다.
error_log /var/log/nginx/error.log;error_log /var/log/nginx/error_notive.log notice;error_log /var/log/nginx/error_debug.log debug;server { location /downloads { # error_log /var/log/nginx/error_downloads.log; }}
행동 명령
행동 은 일 을 바 꾸 라 는 지령 이다.모듈 의 수요 에 따라 계승 하 는 행위 가 다 를 수 있 습 니 다.
예 를 들 어 rewrite 명령 은 일치 하 는 것 이 라면 모두 실 행 됩 니 다.
server { rewrite ^ /foobar; location /foobar { rewrite ^ /foo; rewrite ^ /bar; }}
사용자 가 가 져 오 려 면 / sample:
server { location / { return 200; return 404; }}
위 와 같은 상황 에서 즉시 200 으로 돌아간다.
처리 요청
Nginx 내부 에서 여러 개의 가상 서버 를 지정 할 수 있 습 니 다. 모든 가상 서버 는 server {} 컨 텍스트 로 설명 할 수 있 습 니 다.
server { listen *:80 default_server; server_name netguru.co; return 200 "Hello from netguru.co";}server { listen *:80; server_name foo.co; return 200 "Hello from foo.co";}server { listen *:81; server_name bar.co; return 200 "Hello from bar.co";}
이것 은 Nginx 에 게 오 는 요청 을 어떻게 처리 하 는 지 알려 줄 것 입 니 다.Nginx 는 먼저 listen 명령 을 검사 하여 주어진 IP 포트 조합 을 감청 하 는 가상 호스트 를 테스트 할 것 입 니 다.
그리고, servername 명령 의 값 은 호스트 헤더 (호스트 도 메 인 이름 저장) 를 검사 합 니 다.
Nginx 는 다음 순서대로 가상 호스트 를 선택 합 니 다.
예 를 들 어 다음 의 예:
Request to foo.co:80 => "Hello from foo.co"Request to www.foo.co:80 => "Hello from netguru.co"Request to bar.co:80 => "Hello from netguru.co"Request to bar.co:81 => "Hello from bar.co"Request to foo.co:81 => "Hello from bar.co"
server_name
지령server_name 명령 은 여러 값 을 받 습 니 다.정규 표현 식 과 일치 하 는 마스크 도 처리 합 니 다.
server_name netguru.co www.netguru.co; # exact matchserver_name *.netguru.co; # wildcard matchingserver_name netguru.*; # wildcard matchingserver_name ~^[0-9]*.netguru.co$; # regexp matching
다른 뜻 이 있 을 때 nginx 는 다음 명령 을 사용 합 니 다:
명심 할 만 한 것 은
server_name .netguru.co;
아래 에서 온 줄 임 말 입 니 다.
server_name netguru.co www.netguru.co *.netguru.co;
조금 다르다.
.netguru.co
두 번 째 표 에 저장 하 는 것 은 명시 적 성명 보다 조금 느리다 는 것 을 의미한다.listen
지령많은 경우 listen 명령 을 찾 아 IP: 포트 값 을 받 아들 일 수 있 습 니 다.
listen 127.0.0.1:80;listen 127.0.0.1; # by default port :80 is usedlisten *:81;listen 81; # by default all ips are usedlisten [::]:80; # IPv6 addresseslisten [::1]; # IPv6 addresses
단, UNIX - domain 소켓 도 지정 할 수 있다.
listen unix:/var/run/nginx.sock;
호스트 이름 까지 사용 할 수 있 습 니 다.
listen localhost:80;listen netguru.co:80;
그러나 호스트 가 nginx 를 시작 할 수 없 기 때문에 특정한 TCP Socket 에 연결 할 수 없습니다.
마지막 으로 명령 이 존재 하지 않 으 면 사용 합 니 다.
*:80
최소 화 설정
이러한 지식 이 있 습 니 다. - nginx 를 실행 하 는 데 필요 한 최소 설정 을 만 들 고 이해 할 수 있어 야 합 니 다.
# /etc/nginx/nginx.confevents {} # events context needs to be defined to consider config validhttp { server { listen 80; server_name netguru.co www.netguru.co *.netguru.co; return 200 "Hello"; }}
root, location, try파일 명령
루트 명령 어
루트 명령 은 요청 한 루트 디 렉 터 리 를 설정 합 니 다. nginx 가 요청 을 파일 시스템 에 표시 할 수 있 도록 합 니 다.
server { listen 80; server_name netguru.co; root /var/www/netguru.co;}
주어진 요청 에 따라 nginx 서버 가 허용 하 는 내용 을 지정 합 니 다.
netguru.co:80/index.html # returns /var/www/netguru.co/index.htmlnetguru.co:80/foo/index.html # returns /var/www/netguru.co/foo/index.html
location
지령location 명령 은 요청 한 URI 에 따라 설정 합 니 다.
location [modifier] path
location /foo/ { # ...}
수정자 가 지정 되 지 않 으 면 경 로 는 접두사 로 간주 되 고 그 다음 에는 무엇이든 따라 갈 수 있 습 니 다.
이상 의 예 가 일치 합 니 다.
/foo/fooo/foo123/foo/bar/index.html...
또한 주어진 컨 텍스트 에 여러 location 명령 을 사용 할 수 있 습 니 다.
server { listen 80; server_name netguru.co; root /var/www/netguru.co; location / { return 200 "root"; } location /foo/ { return 200 "foo"; }}
netguru.co:80 / # => "root"netguru.co:80 /foo # => "foo"netguru.co:80 /foo123 # => "foo"netguru.co:80 /bar # => "root"
Nginx 도 location 을 연결 할 수 있 는 수정자 들 을 제공 했다.이 수정자 들 은 location 모듈 이 사용 하 는 곳 에 영향 을 줄 것 입 니 다. 모든 수정자 가 우선 순 위 를 배정 하기 때 문 입 니 다.
= - Exact match^~ - Preferential match~ && ~* - Regex matchno modifier - Prefix match
Nginx 는 먼저 정확 한 매 칭 을 검사 합 니 다.만약 찾 지 못 한다 면 우 리 는 우선 순위 가 가장 높 은 것 을 찾 을 것 이다.이 일치 가 실패 하면 정규 표현 식 일치 가 나타 나 는 순서에 따라 테스트 합 니 다.최소한 마지막 접두사 가 일치 하면 사 용 됩 니 다.
location /match { return 200 'Prefix match: matches everything that starting with /match';}location ~* /match[0-9] { return 200 'Case insensitive regex match';}location ~ /MATCH[0-9] { return 200 'Case sensitive regex match';}location ^~ /match0 { return 200 'Preferential match';}location = /match { return 200 'Exact match';}
/match/ # => 'Exact match'/match0 # => 'Preferential match'/match1 # => 'Case insensitive regex match'/MATCH1 # => 'Case sensitive regex match'/match-abc # => 'Prefix match: matches everything that starting with /match'
try_files
지령다른 경 로 를 시도 하고 경 로 를 찾 으 면 돌아 갑 니 다.
try_files $uri index.html =404;
그래서
/foo.html
요청, 다음 순서대로 파일 을 되 돌려 보 려 고 합 니 다:재 미 있 는 것 은 서버 컨 텍스트 에서 try 를 정의 하면files, 그리고 모든 요청 에 맞 는 location - try 를 정의 합 니 다.files 는 실행 되 지 않 습 니 다.
서버 컨 텍스트 에 정 의 된 tryfiles 는 pseudo - location 입 니 다. 가장 불가능 한 위치 입 니 다.따라서 location / 는 pseudo - location 보다 더 구체 적 으로 정 의 됩 니 다.
server { try_files $uri /index.html =404; location / { }}
따라서 server 컨 텍스트 에 try 가 나타 나 는 것 을 피해 야 합 니 다.files:
server { location / { try_files $uri /index.html =404; }}
읽 어 주 셔 서 감사합니다.만약 대량의 자원 이 없다 면 이 시 리 즈 는 완성 할 수 없 을 것 이다.이 일련의 글 쓰기 에서 우 리 는 특히 유용 한 사 이 트 를 발견 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.