2022년 Nginx 및 그 기초 학습
14176 단어 nodenginxwebdevjavascript
nginx
에 도착한 요청에 특정한 검색 매개 변수가 있거나, 특정한 호스트에서 온 다음에 내부에서 다른 경로로 방향을 바꿔야 했다.나는 이미 나의 논리를 완성했고, 그것의 일을 확신했다. 그러나 속담에 이르기를
Your software will eventually fail unless it's verified with all the edge cases.
그러나 시스템 의존성 때문에 저는 코드를 Staging dev에 통합하여 테스트를 진행할 수 없습니다.
nginx
실패하면 다른 개발자들이 노드 API나 클라이언트 코드를 작성하거나 테스트하는 것을 막을 수 있기 때문입니다.그래서 이런 상황을 완화시키기 위해 나는 로컬 컴퓨터에
nginx
를 설치하고 철저한 테스트를 실시했다.일단 로컬에서 정상적으로 작동하면 코드를 임시 저장소로 보내서 진일보한 테스트를 진행할 수 있다.이렇게 하면 나는 다른 사람의 일을 방해하지 않는 상황에서 많은 시간을 절약할 수 있다.본고에서 저는
nginx
, 설치, 로컬 설정, 설치 로그 등 기초 지식을 소개할 것입니다.nginx
의 정의부터 시작합시다.Nginx란 무엇입니까?
Nginx
는 engine x
의 줄임말이고, HTTP
와 reverse proxy server
의 줄임말이다.그것은 부하 평형기로 대량으로 사용되고 정적 파일을 제공하며, 때로는 완전한 정적 사이트도 제공한다. 예를 들어 회사가 Nginx!에 있는 블로그 등이다.로드 이퀄라이저
간단하게 말하면 부하 균형기는 마치 중간인처럼 관련자 사이에 앉는다. 예를 들어 a는 클라이언트 목록이고 B는 서버 목록-
시나리오 1: 로드 밸런서 없음
모든 전송된 요청은 한 서버에만 발송되며, 최악의 경우 서버가 끊기거나 붕괴될 수 있습니다.
Node API or Service API is down
라는 용어는 API 요청을 제공하는 상자나 서버가 요청 과부하나 메모리 부족으로 인해 끊기거나 붕괴되어 UX가 응답하지 않는다는 것을 의미할 수 있습니다.사례 2: 로드 밸런서 사용
모든 전송 요청은 부하 균형기를 통과해야 합니다.라우팅 테이블을 유지하고 폴링을 통해 상자나 서버에 장애가 발생할 경우 알림을 받습니다.
이것은 네트워크 요청을 각 서버에 효과적으로 분포할 수 있으며, 만약 한 서버가 다운되면, 요청을 다른 온라인 서버로 다시 지정할 수 있다.따라서 서버 가용성은 항상 온라인 상태로 유지됩니다.
Nginx 구성 파일
이 파일은
tree-like
구조로 규칙/블록 형식의 명령을 포함한다.# main context (outside any other context i.e global context)
# event context
event {
worker_connections 1024;
}
#http context
http {
# server context
server {
# code goes here
}
server {
# another server context, code goes here
}
}
웹 서버를 만들기 전에 Nginx
프로필 구조를 명확하게 학습합니다-주요 배경 -
main context a.k.a. global context
는 맨 윗부분의 상하문으로 모든 다른 상하문은 그것의 일부분이다. 예를 들어Event context, HTTP context
.이것은 입도 단계에서 전체 응용 프로그램에 영향을 미치는 상세한 정보를 설정하는 데 사용됩니다.이벤트 컨텍스트 -
이벤트 컨텍스트는
Main context
에 포함됩니다.그것은 보통 연결 처리를 처리한다.이 컨텍스트에 정의된 모든 명령은 전송 연결을 처리하는 작업 프로세스와 관련됩니다.HTTP 컨텍스트 -
이것은
Event context
의 형제로 사건의 상하문과 나란히 쓴 것이지 끼워 넣은 것이 아니다.만약 우리가 Nginx를 웹 서버나 역방향 에이전트로 사용한다면, 이 상하문에는 대부분의 설정이 포함될 것입니다.참고: -
Event context and HTTP context
구성에는 nginx
만 사용할 수 있습니다.본문 뒤에서 우리는 서버 상하문과 위치 상하문을 볼 것이다.
MacOS에 Nginx를 어떻게 설치합니까?
brew를 사용하지 않으면 먼저 설치하십시오.터미널을 열고 다음 동작을 실행합니다 -
brew 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew를 설치한 후 다음을 수행합니다.brew install nginx
nginx를 설치하면nginx -v
인쇄해야 함nginx version: nginx/<some version number>
e.g.
nginx version: nginx/1.21.0
nginx를 설치하면brew는 다음 위치에서nginx 폴더를 생성합니다 -/usr/local/etc/nginx
기본값nginx.conf
은 다음과 같습니다.events {
worker_connections 1024;
}
http {
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
nginx services
를 시작하려면 다음을 수행하십시오.nginx
오류가 발생하면 터미널에 기록됩니다. 기본 HTML 파일을 제공하는지 확인하려면 URL을 누르십시오 -http://localhost:8080
막으려고 -nginx -s stop
어떻게 다른 위치에서 파일을 제공합니까?
다른 위치에서 HTML 파일을 읽을 수 있도록
nginx.conf
파일을 수정합니다-우선 서비스를 제공할 HTML 파일
index.html
(이하 내용 포함)을 포함하는 폴더를 만듭니다. 예를 들어 다운로드 폴더에서 만든 폴더nginx-poc
를 만듭니다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>This is index html file from nginx-poc folder</h1>
</body>
</html>
이 폴더의 전체 경로 복사root
및 업데이트를 위한 열기nginx.conf
vim editor 또는 nano 또는 기타 방법으로 파일 열기(예: nano) -nano /usr/local/etc/nginx/nginx.conf
루트 위치 업데이트events {
worker_connections 1024;
}
http {
server {
listen 8080;
server_name localhost;
location / {
root /Users/Download/nginx-poc;
index index.html index.htm;
}
}
}
이제 중지nginx
하고 다시 시작하여 업데이트된 변경 사항을 확인합니다.포트8080
가 있는 로컬 호스트 URL을 클릭 -Url 리디렉션 방법
때때로 기존 리소스가 다른 위치로 이동할 때 URL 리디렉션이 필요할 수 있습니다.어떻게 해야 이 정도는 할 수 있는지 -
nginx poc 폴더에
js
폴더와 js 파일 몇 개 만들기 -|-- nginx-poc
| |-- index.html
| |-- js
| | |-- a.js
| | |-- b.js
| | |-- c.js
| | |-- b-latest.js
모든 js 파일에 간단한
console.log(<filename>)
만 넣으면 -e, g는 a.js를 나타냅니다.
console.log('serving a.js');
b-최신 소식.jsconsole.log('serving b-latest.js');
잠깐만요.만약 파일
b.js
이 더 이상 쓸모가 없다고 가정한다면, 우리는 그것을 b-latest.js
로 대체하기를 희망합니다.물론 닻사슬이 어디를 가리키든b.js
우리는 b-latest.js
로 바꿀 수 있지만 두 가지 문제가 있다-nginx
내부에서 리디렉션 -events {
worker_connections 1024;
}
http {
server {
listen 8080;
server_name localhost;
root /Users/Download/nginx-poc;
location /js {
rewrite /js/b.js /js/b-latest.js break;
}
location / {
# root /Users/Download/nginx-poc;
index index.html index.htm;
}
}
}
변화 하나하나 다 말해달라고-/js, /js/*
로부터의 모든 요청을 처리합니다. 즉 /js/b.js
요청이 이 위치에 떨어집니다.내부 요청 URL을 /js/b.js
에서 /js/b-latest.js
로 다시 쓴 다음 break
를 추가합니다. 이것은 다른 재쓰기를 해석하지 않음을 의미합니다.server context
HTTP context
아이예요.한 번 허용되는 이벤트 및 HTTP 컨텍스트와 달리 여러 서버 컨텍스트가 있을 수 있습니다. location context
server context
아이예요.서버 컨텍스트와 마찬가지로 여러 위치 컨텍스트를 사용할 수 있습니다.그것들은 전송 요청을 실제 처리하는 곳이다.
사용자 정의 로그는 어떻게 추가합니까?
일지는 매우 중요하기 때문에 그것들이 우리의 논리를 테스트해야 한다.만약 생산 코드에 문제가 발생하면, 우리는 보기
nginx logs
를 통해 쉽게 디버깅할 수 있다.localhost에서 완전한 논리와 로그를 테스트하고 볼 수 있도록 로컬에서 설정하는 방법을 보여 드리겠습니다.기본값
nginx
에는 두 가지 유형의 로그가 있습니다access log and error log
.액세스 로그 -
요청한 URL, IP 주소, 호스트, 추천자 등 방문객의 활동을 기록합니다. 요청이 성공하면access에 로그인합니다.로그 파일.
access_log <location of log file> log_format;
log_format
에서 우리는 우리가 기록하고자 하는 데이터를 추가할 수 있지만, 단지 하나의 주석일 뿐, 이것은 선택할 수 있는 것이다.기억해야 할 점은log 포맷은
HTTP context
아래에 두어야 하며, 그렇지 않으면 오류가 발생합니다.예컨대
Syntax -
log_format <log_format_name> string;
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" "$uri" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" "$gzip_ratio"';
오류 로그 -
이것은 모든 고장과 시스템 로그를 기록합니다. 즉, 요청이 어떤 방식으로도 충족되지 않으면
error.log
파일에 기록됩니다.Syntax -
error_log <location of error.log file> <error-severity-level>
error_log /usr/local/etc/nginx/logs/error.log notice;
로그 추가 후 구성 파일 -events {
worker_connections 1024;
}
http {
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" "$uri" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
listen 80;
server_name localhost;
root /Users/Downloads/nginx-poc;
access_log /usr/local/etc/nginx/logs/acess.log custom;
error_log /usr/local/etc/nginx/logs/error.log notice;
rewrite_log on;
location /js {
rewrite /js/b.js /js/b-latest.js break;
}
location / {
index index.html index.htm;
}
}
}
내부 리디렉션을 기록하려면 rewrite_log
를 열어야 합니다.또한 notice
심각도 수준은 심각도가 낮다는 경고일 뿐이라는 것을 의미합니다.조회 매개 변수를 어떻게 처리합니까?
검색 파라미터를 기반으로 내부에서 요청을 다시 지정하기를 원할 때 이런 상황이 발생할 수 있습니다.
nginx.conf
파일에서 다음과 같은 3가지 사항을 구현하는 방법을 살펴보겠습니다.events {
worker_connections 1024;
}
http {
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" "$uri" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
listen 80;
server_name localhost;
root /Users/Downloads/nginx-poc;
access_log /usr/local/etc/nginx/logs/acess.log custom;
error_log /usr/local/etc/nginx/logs/error.log notice;
rewrite_log on;
location /js {
if ($query_string ~* "latest=true") {
rewrite /js/b.js /js/b-latest.js break;
}
if ($query_string ~* "latest=false") {
rewrite /js/b.js /js/c.js break;
}
rewrite /js/b.js /js/a.js break;
}
location / {
index index.html index.htm;
}
}
}
사례 1 -
신청자는
b.js
→ serveb-latest.js
iff 조회 매개 변수latest=true
사례 2 -
신청자는
b.js
→ servec.js
iff 조회 매개 변수latest=false
사례 3 -
신청자는
b.js
→ 서브a.js
기본값결론
Nginx는 it 뿐만 아니라 한 문장에서만 소개할 수 없습니다.하지만, 나는 이것이 너로 하여금 더 많은 것을 이해하게 할 수 있기를 바란다.로컬 설정이 있으면
nginx
논리를 무대에 오르거나 생산 환경에 배치하기 전에 로컬에서 테스트를 하려면 매우 편리합니다.나는 정말 네가 이 문장을 좋아하길 바란다. 만약 그렇다면, 나를 따라와, 가능하다면 buy me a coffee.본고는 최초로 mywebsite에 발표되었으니 이 사이트를 계속 방문하여 정기적으로 업데이트해 주십시오.
감사합니다!계속해서 더 많은 글을 주목해 주십시오.
Reference
이 문제에 관하여(2022년 Nginx 및 그 기초 학습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ajayv1/learn-nginx-and-its-basics-in-2022-4ddb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)