[개요]
nginx를 이제 인터넷, 고성능 웹 서버에서 매우 인기가 프록시, 또한 IMAP / POP3 / SMTP 프록시 서버를 역.
로드 밸런싱, 높은 동시성, 다음의 경우에 사용되는 아주 좋은 선택이 대신 아파치의 Nginx를 사용하는대로 지금은 많은 인터넷 응용 프로그램의 nginx를 사용합니다.
[설치]
· 편집 툴과 라이브러리를 설치 ·
냠 ZLIB ZLIB-(STABLE)의 GCC-C ++ libtool을하려면 openssl하려면 openssl-(STABLE)하게 설치 -y
· PCRE를 설치 ·
PCRE의 역할은 Nginx에 재 작성 기능을 지원하는 것입니다.
1. 설치 패키지 PCRE 다운로드
CD / usr / 지방 / SRC /
wget을 http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2. 추출
타르 zxvf PCRE-8.35.tar.gz
설치 패키지 디렉토리를 입력합니다, 컴파일 및 설치
CD를 PCRE-8.35은
./configure를
만들 && 설치하기
4.보기 버전
PCRE-설정 --version
nginx를 설치 · ·
1. 설치 패키지를 다운로드
CD / usr / 지방 / SRC /
wget을 http://nginx.org/download/nginx-1.6.2.tar.gz
2. 추출
타르 zxvf의 nginx-1.6.2.tar.gz
설치 패키지 디렉토리를 입력합니다, 컴파일 및 설치
CD 용의 nginx-1.6.2
./configure를 --prefix = / usr / 지방 / 웹 서버 / Nginx에 --with-http_stub_status_module --with-http_ssl_module --with-PCRE = / usr / 지방 / SRC / PCRE - 8.35
만들 && 설치하기
4.보기의 nginx 버전
/ usr / 지방 / 웹 서버 / Nginx의 경우 / sbin / nginx를 -v
5. 글로벌 명령은 nginx에 설정되어
CP / usr / 지방 / 웹 서버 / Nginx의 경우 / sbin / nginx를는 / usr / 빈
[구성]
정력 /usr/local/webserver/nginx/conf/nginx.conf
# 일관된 값 및 CPU 코어 수 2를 worker_processes
서버 {
80 듣고 # 수신 포트
}
[시작]
구성을 수정하면 완료되면 구성을 확인하려면 다음 명령을 사용합니다 :
의 nginx -c /usr/local/webserver/nginx/conf/nginx.conf
nginx를 -t
구성 파일 및 재부팅을로드하려면 다음 명령을 사용합니다 :
의 nginx -s 다시로드
방화벽이 해제되어 확인, 그렇지 않으면 액세스 포트 (80)는 브라우저에서 차단 될 수 있습니다 폐쇄하지 않을 경우 폐쇄 될 필요가있다.
systemctl 상태 firewalld
systemctl 정지 firewalld
다음 페이지를 표시 할 수 브라우저 페이지에서 IP 플러스 포트를 입력하면 설치가 성공적입니다 (몇 분 정도 걸릴 수 있습니다)
[구성 최적화]
위의 구성 만하고 실행 nginx를 간단하게 얻을, 가장 기본적인 구성입니다, 우리는 여전히 nginx를 리버스 프록시 또는 부하 분산을 달성하기 위해 다음과 같은 구성을 확인해야합니다.
사용자 설정
#user 아무도 없다
작업자 프로세스의 수, 일반적으로 CPU 코어를 설정
1 worker_processes;
PID 파일 (프로세스가 하나인지 확인)
PID는 /run/nginx.pid;
이벤트 {
최대 접속 수, 일반적으로 CPU 설정 * 2,048
worker_connections 1024;
}
HTTP {
열기 gzip 압축 (전송 속도를 증가) (클라이언트 브라우저와의 nginx 서버를 지원합니다)
에 gzip을;
압축 된 파일의 최소 크기
1K를 gzip_min_lenth;
압축 응용 프로그램 메모리 (16K 데이터 스트림 4)
gzip_buffers 4 16K;
HTTP 프로토콜 버전 (압축을 지원하지 않는 단어에 해당하지 않는)
gzip_http_version 1.1;
클라이언트 브라우저가 지원하지 않는 경우, 압축되지 않습니다
에 gzip_vary;
로그 형식
log_format 메인
클라이언트 IP 클라이언트 사용자 이름 요청 URL
'$ REMOTE_ADDR - $의 REMOTE_USER [$ time_local] "$ 요청"'
상태 바이트 소스의 페이지 번호를 요청하는 클라이언트에 반환됩니다 (바이 -> 바이 포스트 바)
'$ 상태 $의 body_bytes_sent "$ HTTP_REFERER"'
클라이언트 브라우저 정보 (약 $ REMOTE_ADDR과) 클라이언트 IP 주소
' "$ HTTP_USER_AGENT" "$ HTTP_X_FORWARDED_FOR"';
경로의 형태를 나타내는 로그 오프 위치를 다시 기록 저장되어 있지 않은 기록 로그 메인 대표하여,이어서
오프 ACCESS_LOG
주요 access.log의 ACCESS_LOG 로그 /;
클라이언트 링크 타임 아웃 (긴 연결이있을 때,이 필드는 크게 설정해야합니다)
keepalive_timeout 65;
여러 서버 노드가 기본 서버 이름 캐시 크기가 충분하지 않을 때, 당신은 수동으로 더 큰 설정해야합니다
512 server_names_hash_bucket_size;
가상 서버 호스트가 사이트로 이해 될 수 나타냅니다, 여러 사이트를 구축하기 위해 여러 서버 노드를 구성 할 수 있습니다
각이있는 요청이 서버 _ 이름을 결정하는 서버에서 온다
서버 {
사이트 수신 포트
8800을 듣고;
에 의해 결정이 필드를 사용할 수있는 서버 사이트 액세스 도메인,
서버 _ 로컬 호스트;
왜곡 매개 변수 URL을 피하기 위해 형식을 인코딩
문자셋 UTF-8;
위치는 이동하는 방법으로, 동일한 도메인 이름을 여러 동적 리소스에서 URI를 액세스 규칙과 일치하는, 점프 및 기타 정적 리소스가 일치 규칙 대신에 / 위치 뒤에 따라하는 방법
위치 / {
사이트의 루트 디렉토리는 상대 경로 또는 절대 경로 일 수 있습니다
루트 HTML;
기본 홈 페이지
인덱스 index.html을;
백엔드 사이트 주소 전달은 일반적으로 부드러운 부하를 만드는 데 사용, 백 엔드 서버 설문 조사
proxy_pass http://10.11.12.237:8080;
요청을 거부하고 403을 반환, 일반적으로 특정 디렉토리에 블록 액세스에 사용되는
모든 #deny;
요청 허용
#모두 허용;
요청하는 클라이언트 요청에 호스트 헤더 이름을 추가
proxy_set_header 호스트 $ 호스트;
클라이언트 IP를 요청 헤더
proxy_set_header X-실시간 IP $의 REMOTE_ADDR;
변수 $ REMOTE_ADDR의 값은 클라이언트 후 추가 요청 헤더 "는 X를 위해 전달"콤마로 분리된다.
클라이언트 요청은 수행하지 않는 경우 "X는-전달-은"헤더 요청, $ proxy_add_x_forwarded_for 변수 값이 같은 변수 $ REMOTE_ADDR 될 것입니다
proxy_set_header X는-전달-를 들어 $ proxy_add_x_forwarded_for;
쿠키 요청 헤더는 클라이언트에 추가
proxy_set_header 쿠키 $ HTTP_COOKIE;
프록시 서버의 응답 헤더 "위치"와 "새로 고침"필드에서 오는 수정합니다.
proxy_redirect [기본 | 오프 | 리디렉션 여분]
당신이 사용하는 경우 "기본"파라미터 설정 위치와 proxy_pass 매개 변수에 따라 결정됩니다.
위치 / 한 / {
proxy_pass에 http : // 업스트림 : 포트 / 두 /;
proxy_redirect 기본;
}
위치 / 한 / {
proxy_pass에 http : // 업스트림 : 포트 / 두 /;
proxy_redirect에 http : // 업스트림 : 포트 /이 / / 일 /;
}
인수 오프은이 분야에서 모든 proxy_redirect 명령을 비활성화
오프 proxy_redirect;
프록시 서버 위치 필드에 반환됩니다에 http : // localhost를 : 8000 /이 / 어떤 / URI /
위치 필드는 HTTP로 다시 작성 : // 프론트 엔드 / 한 / 일부 / URI /.
proxy_redirect에 http : // localhost를 : 8000 /이 / HTTP : // 프론트 엔드 / 일 /;
이 비 포트 80에서 오는 경우에도, 서버 이름 및 포트베이스를 사용하여
proxy_redirect에 http : // localhost를 : 8000 /이 / /;
도메인 도메인의 일부가 현재 페이지는 쓸 수 없습니다 일치하지 않는 경우 브라우저 쿠키, 쿠키에 많은 제한이 있습니다.
따라서, 도메인 네임 요청 A를하는 경우, B 도메인 이름 서버에 proxy_pass 서버 B가 다음 Domian 쿠키는 B = 출력
프론트 페이지는 여전히 다음 브라우저가 쿠키를 기록 할 수 없습니다,는 A 도메인 이름에 남아 있습니다.
뿐만 아니라 도메인 이름, 브라우저 경로가 제한됩니다.
우리는 종종 브라우저에이 경로에 노출되지 않도록, 대상 서버에 대한 경로에서 proxy_pass.
경로 문제는 쓸 수없는 대상 서버의 쿠키 쿠키 쓰기가 죽었을 경우에 시간이 표시됩니다.
대체 텍스트 속성 헤더에 응답하여 도메인 "쿠키 - 설정"을, 그 값이 문자열 또는 기준 변수 정규식 패턴으로 설정 될 수있다
당신은 백 엔드에 서버가 쿠키 쿠키 도메인을 전달해야하는 경우가 변환 될 필요가있을 것이다, 또는 프런트 엔드 및 백 엔드 도메인 도메인 쿠키 일치 액세스하지 않습니다
구성 규칙.
proxy_cookie_domain serverDomain (백엔드 서버 도메인) nginxDomain (의 nginx 서버 도메인)
proxy_cookie_domain 로컬 호스트 .testcaigou800.com;
Proxy_cookie_domain 지침은 현재의 모든 구성 수준을 취소합니다
오프 proxy_cookie_domain;
백 엔드 서버와의 연결 시간 제한을 설정합니다. (그러나, 일반적으로 어떤 긴 처리 시간이 더 제한 될 수있다) 일반적으로 더 75 초하지
proxy_connect_timeout 30;
}
백 엔드 서버가 표시 404 페이지를 반환
404을 /404.html을 error_page;
그리고 다른 백엔드 서버는 500 오류를 반환 할 때 표시되는 페이지
500 502 503 504 /50x.html을 error_page;
위치 = {/50x.html
루트 HTML;
}
}
필요성은 여러 도메인 이름, 다음과 같은 구성, 다른 포트와 동일한 도메인에 동일한 포트를 듣고 할 때 사용할 수있다 서버 _ 일반 구성
그러나 너무 수동으로 버퍼 server_names_hash_bucket_size의 크기를 확장 할 필요가 서버에주의
서버 {
(80)를 듣고;
서버 _ bbb.abc.com;
문자셋 UTF-8;
위치 / {
proxy_pass에 http : // localhost를 : 10001;
}
}
서버 {
(80)를 듣고;
서버 _ aaa.abc.com;
문자셋 UTF-8;
위치 / {
proxy_pass에 http : // localhost를 : 20002;
}
}
}