Nginx 튜 토리 얼 \ # 1: 기본 개념
어이!나 눔 은 관심!그래서 우 리 는 당신 과 약간의 지식 을 더 나 누고 싶 습 니 다.우 리 는 3 절 로 나 뉘 는 이 'Nginx 튜 토리 얼' 을 준비 했다.만약 당신 이 Nginx 에 대해 이미 알 고 있 거나, 더 많은 것 을 알 고 싶다 면, 이 강 좌 는 당신 에 게 매우 도움 이 될 것 입 니 다.
우 리 는 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 match
server_name *.netguru.co; # wildcard matching
server_name netguru.*; # wildcard matching
server_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 used
listen *:81;
listen 81; # by default all ips are used
listen [::]:80; # IPv6 addresses
listen [::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.conf
events {} # events context needs to be defined to consider config valid
http {
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.html
netguru.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 match
no 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'
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.