초 상세 Nginx 미니 강좌, 바보 도 딱 봐 도!
Nginx 가 뭐 예요?
Nginx (engine x) 는 경량급 웹 서버, 역방향 프 록 시 및 이메일 (IMAP / POP 3) 프 록 시 서버 다.
역방향 대리 란 무엇 입 니까?
역방향 프 록 시 (Reverse Proxy) 방식 은 프 록 시 서버 로 인터넷 의 연결 요청 을 받 은 다음 내부 네트워크 에 있 는 서버 에 전송 요청 을 하고 서버 에서 얻 은 결 과 를 인터넷 에서 연결 을 요청 하 는 클 라 이언 트 에 게 되 돌려 주 는 것 을 말한다. 이때 프 록 시 서 비 스 는 대외 적 으로 역방향 프 록 시 서버 로 나타난다.
설치 및 사용
설치 하 다.
nginx 홈 페이지 다운로드 주소:http://nginx.org발표 버 전 은 리 눅 스 와 windows 버 전 으로 나 뉜 다.
원본 코드 를 다운로드 해서 컴 파일 해서 실행 할 수도 있 습 니 다.
소스 코드 에서 Nginx 컴 파일
원본 코드 를 압축 해제 한 후 터미널 에서 다음 명령 을 실행 합 니 다.
$ ./configure
$ make
$ sudo make install
기본적으로 Nginx 는 / usr / local / nginx 에 설 치 됩 니 다.컴 파일 옵션 을 설정 하면 이 설정 을 변경 할 수 있 습 니 다.
Windows 설치
Nginx / Win 32 를 설치 하기 위해 서 는 먼저 다운로드 해 야 합 니 다.그리고 압력 을 풀 고 운행 하면 된다.다음은 CD 루트 디 렉 터 리 를 예 로 들 어 설명 하 겠 습 니 다.
cd C:
cd C: ginx-0.8.54 start nginx
Nginx / Win 32 는 windows 서비스 방식 이 아 닌 콘 솔 프로그램 에서 실 행 됩 니 다.서버 방식 은 아직 개발 시도 중 입 니 다.
쓰다
nginx 의 사용 은 비교적 간단 하 다. 바로 몇 가지 명령 이다.
자주 사용 하 는 명령 은 다음 과 같 습 니 다.
매번 명령 을 두 드 리 지 않 으 려 면 nginx 설치 디 렉 터 리 에 일괄 처리 파일 startup. bat 를 추가 하고 두 번 누 르 면 실행 할 수 있 습 니 다.내용 은 다음 과 같다.
@echo off
rem nginx pid , kill
nginx.exe -s stop
rem
nginx.exe -t -c conf/nginx.conf
rem
nginx.exe -v
rem nginx
nginx.exe -c conf/nginx.conf
리 눅 스에 서 실행 된다 면 셸 스 크 립 트 를 쓰 는 것 은 대동소이 하 다.
nginx 실전 설정
각종 개발 도구 의 배 치 는 실전 과 결합 해 이야기 하 는 것 이 더 이해 하기 쉽다 고 생각 합 니 다.
http 역방향 에이전트 설정
우 리 는 먼저 작은 목 표를 실현 합 니 다. 복잡 한 설정 을 고려 하지 않 고 http 역방향 대 리 를 완성 하 는 것 입 니 다.
nginx. conf 설정 파일 은 다음 과 같 습 니 다.
주: conf / nginx. conf 는 nginx 의 기본 설정 파일 입 니 다.nginx - c 를 사용 하여 설정 파일 을 지정 할 수 있 습 니 다.
#
#user somebody;
# , cpu
worker_processes 1;
#
error_log D:/Tools/nginx-1.10.1/logs/error.log;
error_log D:/Tools/nginx-1.10.1/logs/notice.log notice;
error_log D:/Tools/nginx-1.10.1/logs/info.log info;
#PID , nginx ID
pid D:/Tools/nginx-1.10.1/logs/nginx.pid;
#
events {
worker_connections 1024; # worker process
}
# http ,
http {
# mime ( ), mime.types
include D:/Tools/nginx-1.10.1/conf/mime.types;
default_type application/octet-stream;
#
log_format main '\[$remote_addr\] \- \[$remote_user\] \[$time_local\] "$request" '
'$status $body\_bytes\_sent "$http_referer" '
'"$http\_user\_agent" "$http\_x\_forwarded_for"';
access_log D:/Tools/nginx-1.10.1/logs/access.log main;
rewrite_log on;
#sendfile nginx sendfile (zero copy ) , ,
# on, IO , off, I/O , uptime.
sendfile on;
#tcp_nopush on;
#
keepalive_timeout 120;
tcp_nodelay on;
#gzip
#gzip on;
#
upstream zp_server1{
server 127.0.0.1:8089;
}
#HTTP
server {
# 80 ,80 , HTTP
listen 80;
# www.xx.com
server_name www.javastack.cn;
#
index index.html
# webapp
root D:_WorkspaceProjectgithubzpSpringNotesspring-securityspring-shirosrcmainwebapp;
#
charset utf-8;
#
proxy\_connect\_timeout 180;
proxy\_send\_timeout 180;
proxy\_read\_timeout 180;
proxy\_set\_header Host $host;
proxy\_set\_header X-Forwarder-For $remote_addr;
# ( upstream ),location
location / {
proxy_pass http://zp_server1;
}
# ,nginx
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root D:_WorkspaceProjectgithubzpSpringNotesspring-securityspring-shirosrcmainwebappiews;
# 30 , , , , 。
expires 30d;
}
# Nginx
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth\_basic\_user_file conf/htpasswd;
}
# .htxxx
location ~ /.ht {
deny all;
}
# ( )
#error_page 404 /404.html;
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
\# root html;
#}
}
}
자, 우리 한번 해 봅 시다.
웹 앱 을 시작 합 니 다. 연 결 된 포트 를 시작 하려 면 nginx 의 upstream 설정 포트 와 일치 해 야 합 니 다.
호스트 변경:
C: Windows \ System 32 \ drivers \ etc 디 렉 터 리 에 있 는 host 파일 에 DNS 기록 127.0.0.1 www. javastack. cn 시작 전문 에서 startup. bat 명령 을 추가 합 니 다.
브 라 우 저 에서 www. javastack. cn 을 방문 하면 의외 의 사고 가 발생 하지 않 고 이미 방문 할 수 있 습 니 다.
부하 균형 설정
이전 예 에서 프 록 시 는 서버 만 가리 키 고 있 습 니 다.
그러나 사 이 트 는 실제 운영 과정 에서 대부분 여러 대의 서버 가 같은 앱 을 실행 하고 있 기 때문에 부하 균형 을 사용 하여 분류 해 야 한다.
nginx 도 간단 한 부하 균형 기능 을 실현 할 수 있다.
이러한 응용 장면 을 가정 하면 192.168.1.11: 80, 192.168.1.12: 80, 192.168.1.13: 80 세 대의 Liux 환경의 서버 에 응용 할 것 이다.사이트 도 메 인 이름 은 www. javastack. cn 이 고 네트워크 IP 는 192.168.1.11 이다.네트워크 IP 가 있 는 서버 에 nginx 를 배치 하여 모든 요청 에 부하 균형 처 리 를 합 니 다.
nginx. conf 설정 은 다음 과 같 습 니 다.
http {
# mime , mime.type
include /etc/nginx/mime.types;
default_type application/octet-stream;
#
access_log /var/log/nginx/access.log;
#
upstream load\_balance\_server {
#weigth ,
server 192.168.1.11:80 weight=5;
server 192.168.1.12:80 weight=1;
server 192.168.1.13:80 weight=6;
}
#HTTP
server {
# 80
listen 80;
# www.xx.com
server_name www.javastack.cn;
#
location / {
root /root; #
index index.html index.htm; #
proxy_pass http://load\_balance\_server ;# load\_balance\_server
# ( )
#proxy_redirect off;
proxy\_set\_header Host $host;
proxy\_set\_header X-Real-IP $remote_addr;
# Web X-Forwarded-For IP
proxy\_set\_header X-Forwarded-For $remote_addr;
proxy\_connect\_timeout 90; #nginx ( )
proxy\_send\_timeout 90; # ( )
proxy\_read\_timeout 90; # , ( )
proxy\_buffer\_size 4k; # (nginx)
proxy_buffers 4 32k; #proxy_buffers , 32k ,
proxy\_busy\_buffers_size 64k; # (proxy_buffers*2)
proxy\_temp\_file\_write\_size 64k; # , , upstream
client\_max\_body_size 10m; #
client\_body\_buffer_size 128k; #
}
}
}
웹 사이트 에는 여러 개의 웹 앱 설정 이 있 습 니 다.
한 사이트 의 기능 이 점점 풍부 해 질 때 일부 기능 이 상대 적 으로 독립 된 모듈 을 분리 하고 독립 적 으로 유지 해 야 한다.이렇게 되면 보통 웹 앱 이 여러 개 있 습 니 다.
예 를 들 어 www. javastack. cn 사이트 에 여러 개의 webapp, finance (금융), produt (제품), admin (사용자 센터) 이 있다 면.이 응용 프로그램 에 접근 하 는 방식 은 상하 문 (context) 을 통 해 구분 합 니 다.
http 의 기본 포트 번 호 는 80 이라는 것 을 알 고 있 습 니 다. 한 서버 에서 이 세 개의 웹 앱 을 동시에 시작 하면 모두 80 포트 를 사용 하면 안 됩 니 다.따라서 이 세 가지 응용 프로그램 은 각각 다른 포트 번 호 를 연결 해 야 한다.
그렇다면 문제 가 생 겼 습 니 다. 사용자 가 실제 www. javastack. cn 사 이 트 를 방문 할 때 서로 다른 웹 앱 을 방문 할 때 해당 하 는 포트 번 호 를 가지 고 방문 하 는 것 은 아 닙 니 다.그래서 당신 은 다시 역방향 대리 로 처리 해 야 합 니 다.
설정 도 어렵 지 않 습 니 다. 어떻게 하 는 지 보 세 요.
http {
#
upstream product_server{
server www.javastack.cn:8081;
}
upstream admin_server{
server www.javastack.cn:8082;
}
upstream finance_server{
server www.javastack.cn:8083;
}
server {
#
# product server
location / {
proxy_pass http://product_server;
}
location /product/{
proxy_pass http://product_server;
}
location /admin/ {
proxy_pass http://admin_server;
}
location /finance/ {
proxy_pass http://finance_server;
}
}
}
https 역방향 프 록 시 설정
보안 에 대한 요구 가 높 은 일부 사이트 에 서 는 HTTPS (ssl 통신 표준 을 사용 하 는 보안 HTTP 프로 토 콜) 를 사용 할 수 있 습 니 다.
여 기 는 HTTP 프로 토 콜 과 SSL 표준 이 아 닙 니 다.그러나 nginx 설정 https 를 사용 하려 면 몇 가 지 를 알 아야 합 니까?
다른 것 은 http 역방향 에이전트 와 마찬가지 로 서버 부분 설정 만 다 릅 니 다.
#HTTP
server {
# 443 。443 , HTTPS
listen 443 ssl;
# www.xx.com
server_name www.javastack.cn;
#ssl ( :crt/pem)
ssl_certificate cert.pem;
#ssl key
ssl\_certificate\_key cert.key;
#ssl ( )
ssl\_session\_cache shared:SSL:1m;
ssl\_session\_timeout 5m;
# , MD5
ssl_ciphers HIGH:!aNULL:!MD5;
ssl\_prefer\_server_ciphers on;
location / {
root /root;
index index.html index.htm;
}
}
정적 사이트 설정
때때로, 우 리 는 정적 사이트 (즉 html 파일 과 정적 자원 더미) 를 설정 해 야 한다.
예 를 들 어 모든 정적 자원 이 / app / dist 디 렉 터 리 에 놓 여 있다 면 nginx. conf 에서 홈 페이지 와 이 사이트 의 host 만 지정 하면 됩 니 다.
설정 은 다음 과 같 습 니 다:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript image/jpeg image/gif image/png;
gzip_vary on;
server {
listen 80;
server_name static.zp.cn;
location / {
root /app/dist;
index index.html;
# index.html
}
}
}
그리고 HOST 추가:
127.0.0.1 static. zp. cn, 이 때 로 컬 브 라 우 저 에서 static. zp. cn 을 방문 하면 정적 사이트 에 접근 할 수 있 습 니 다.
크로스 도 메 인 솔 루 션
웹 분야 개발 에 서 는 앞 뒤 분리 모델 을 자주 사용한다.이러한 모드 에서 전단 과 백 엔 드 는 각각 독립 된 웹 프로그램 입 니 다. 예 를 들 어 백 엔 드 는 자바 프로그램 이 고 전단 은 React 또는 Vue 응용 입 니 다. 이 글 을 보십시오.
각자 독립 된 웹 앱 이 서로 방문 할 때 반드시 크로스 필드 문제 가 존재 합 니 다.크로스 필드 문 제 를 해결 하 는 데 는 일반적으로 두 가지 사고 가 있다.
CORS
백 엔 드 서버 에 HTTP 응답 헤드 를 설정 하고 접근 할 도 메 인 이름 을 Access - Control - Allow - Origin 에 추가 합 니 다.
jsonp
백 엔 드 를 요청 에 따라 json 데 이 터 를 구성 하고 되 돌려 줍 니 다. 전단 은 jsonp 로 도 메 인 을 뛰 어 넘 습 니 다.
이 두 가지 사고방식 은 본문 에서 토론 을 전개 하지 않 는 다.
설명 이 필요 한 것 은 nginx 는 첫 번 째 사고 에 따라 크로스 도 메 인 을 해결 하 는 해결 방안 도 제공 했다.
예 를 들 어 www. javastack. cn 사 이 트 는 전단 app, 백 엔 드 app 으로 구성 되 어 있 습 니 다.전단 포트 번 호 는 9000 이 고 백 엔 드 포트 번 호 는 8080 입 니 다.
전단 과 백 엔 드 가 http 를 사용 하여 상호작용 을 할 때 요청 이 거 부 됩 니 다. 크로스 필드 문제 가 있 기 때 문 입 니 다.nginx 가 어떻게 해결 하 는 지 보 자.
우선, enable - cors. conf 파일 에 cors 를 설정 합 니 다.
# allow origin list
set $ACAO '*';
# set single origin
if ($http_origin ~\* (www.javastack.cn)$) {
set $ACAO $http_origin;
}
if ($cors = "trueget") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'OPTIONS') {
set $cors "${cors}options";
}
if ($request_method = 'GET') {
set $cors "${cors}get";
}
if ($request_method = 'POST') {
set $cors "${cors}post";
}
다음은 서버 에 include enable - cors. conf 를 포함 하여 크로스 도 메 인 설정 을 도입 합 니 다.
# ----------------------------------------------------
# nginx
# nginx config include( )
# copy nginx ,
# www.javastack.com dns hosts
# ,api cors,
# ----------------------------------------------------
upstream front_server{
server www.javastack.cn:9000;
}
upstream api_server{
server www.javastack.cn:8080;
}
server {
listen 80;
server_name www.javastack.cn;
location ~ ^/api/ {
include enable-cors.conf;
proxy_pass http://api_server;
rewrite "^/api/(.*)$" /$1 break;
}
location ~ ^/ {
proxy_pass http://front_server;
}
}
이만 하면 완성 입 니 다.
공중 호 자바 기술 스 택 에 주목 하여 '면접' 에 답 하여 내 가 정리 한 2020 가장 전면적 인 시험 문제 와 답 을 얻 었 다.
제 블 로그 에 가서 더 많이 읽 는 것 을 추천 합 니 다.
1. 자바 JVM, 집합, 다 중 스 레 드, 새로운 기능 시리즈 튜 토리 얼
2. Spring MVC, Spring Boot, Spring Cloud 시리즈 튜 토리 얼
3. Maven, Git, Eclipse, Intellij IDEA 시리즈 도구 튜 토리 얼
4. 자바, 백 엔 드, 구조, 알 리 바 바 등 대형 공장 의 최신 면접 문제
좋 은 것 같 아 요. 좋아요 + 리 트 윗 하 는 거 잊 지 마 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.