Nginx 역방향 프록시 및 부하 분산 구성

서버 플랫폼 CentOS 6

로드 스케줄링: 192.168.137.16 Nginx-1.5.2

server1: 192.168.137.17 Nginx 통합 PHP

server2: 192.168.137.18 Nginx 통합 PHP

mysql-proxy: 192.168.137.26 mysql-proxy

mysqlmaster: 192.168.137.27 mysqlmaster

mysqlslave1: 192.168.137.28 mysqlslave1

mysqlslave2: 192.168.137.29 mysqlslave2

WIN7 클라이언트 192.168.137.1 IE 커널 브라우저

구현 프로세스: 클라이언트가 요청,로드 디스패치 서버의 IP로 확인되었습니다.,디스패치 서버는 요청을 다음으로 전달합니다.

구성원 서버 server1 또는 server2, 회원 서버 처리 요청,정적 데이터를 직접 찾거나 백엔드의 mysql 마스터-슬레이브를 쿼리하여

클러스터,결과를로드 디스패치 서버에 반환,마지막으로 클라이언트는로드 스케줄링 서버에서 결과를 받았습니다.。

1. 로드 스케줄링 서버 설치 nginx-1.5.2

(1) rpm -qa를 실행하여 gcc 확인 , gcc-c ++ ,하다 ,libtool이 설치되어 있습니까?,그렇지 않은 경우 rpm 또는 yum 명령을 사용하여 설치하십시오.。

(2) openssl 라이브러리 설치

tar zxvf openssl-1.0.1c.tar.gz

./구성 (맞춤 매개 변수를 추가 할 필요가 없습니다.)

하다 && 설치하다

(3) pcre 설치

tar -zxvf pcre-8.34.tar.gz

./구성 –접두사 = / usr / local / pcre

하다 && 설치하다

(4) zlib의 최신 라이브러리 파일 설치

tar zxvf zlib-1.2.8.tar.gz

./구성 –접두사 = / usr / local / zlib

하다 && 설치하다

(5) nginx-1.5.2 설치

groupadd -r nginx

useradd -r -g nginx -s / bin / false -M nginx

Nginx 구성 매개 변수

./구성 –접두사 = / usr / local / nginx \

–오류 로그 경로 = / var / log / nginx / error.log \

–http-log-path = / var / log / nginx / access.log \

–pid-path = / var / run / nginx / nginx.pid \

–lock-path = / var / lock / nginx.lock \

–user = nginx \

–그룹 = nginx \

–with-http_ssl_module \

–with-http_stub_status_module \

–http-proxy-temp-path = / var / tmp / nginx / proxy \

–http-fastcgi-temp-path = / var / tmp / nginx / fcgi \

–with-pcre

컴파일 및 설치

하다 && 설치하다

nginx 시작

/usr / local / nginx / sbin / nginx -c /usr/local/nginx/conf/nginx.conf

브라우저 입력 http://localhost가 nginx 페이지로 성공적으로 반환되었습니다.。

nginx1

(6) nginx 구성

vim /usr/local/nginx/conf/nginx.conf

http 모듈에서,업스트림 부분 추가,필요에 따라 올바른 알고리즘 선택,구성원 서버의 성능이 크게 다를 경우,

적절한 무게 (무게)를 설정할 수 있습니다., 멤버의 무게가 클수록,요청을받을 확률이 높을수록。

상류 192.168.137.16 {

ip_hash;

섬기는 사람 192.168.137.17:80;

섬기는 사람 192.168.137.18:80;

}

위치 / 부품 수정,이 부분은 모든 요청을 수락 함을 의미합니다.,이제 수신 된 요청을 http로 전달하십시오.://192.168.137.16,

업스트림은 특정 균형 알고리즘에 따라 처리하기 위해 server1 및 server2에 할당됩니다.。

다음과 같이:

위치 / {

# 루트 HTML;

# index index.html index.htm;

proxy_pass http://192.168.137.16;

proxy_set_header 호스트 $ host;

proxy_set_header X-Real-IP $ remote_addr;

proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;

}

마지막으로 저장하고 종료,nginx 다시 시작,로드 스케줄링 서버가 구성됨。

2. 구성원 서버 server1 및 server2 구성

회원 서버가 실제로 요청 처리를 수행하기 때문에,또는 정적 쿼리 결과를 직접 반환,PHP를 통해 mysql에 연결하고 결과를 동적으로 반환합니다.,

따라서 회원 서버는 nginx를 설치하고 php를 통합해야합니다. ,mysql은 동일한 서버에 설치할 수 있습니다.,다른 서버에도 설치 가능。여기

3 개의 추가 mysql 서버를 배포하도록 선택,마스터-슬레이브 동기화 구성,읽기 및 쓰기 분리 실현。높은 동시 액세스에 대한 강력한 지원 제공。

server1 및 server2의 구성은이 사이트의 LNMP 환경 구성을 참조 할 수 있습니다.

LNMP 배포

LNMP가 성공적으로 설치된 후,포트 80 및 3306을 엽니 다.。nginx.conf 편집 ,도메인 이름을 www.roamway.com으로 수정

구성 파일은 다음과 같습니다.:

사용자 nginx nginx;

작업자 프로세스 자동;

error_log /var/log/nginx_error.log ;

pid /usr/local/nginx/logs/nginx.pid;

#이 프로세스에서 열 수있는 최대 파일 설명자 값을 지정합니다..

worker_rlimit_nofile 5120;

이벤트

{

epoll 사용;

작업자 _ 연결 5120;

multi_accept on;

}

http

{

mime.types 포함;

default_type 애플리케이션 / 옥텟 스트림;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32케이;

client_max_body_size 50m;

파일 보내기;

tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64케이;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 256k;

gzip 사용;

#limit_conn_zone $ binary_remote_addr zone = perip:10미디엄;

##limit_conn_zone을 활성화하는 경우,더하다 “limit_conn perip 10;” 서버 섹션으로.

server_tokens 꺼짐;

#로그 형식

log_format 액세스‘$ remote_addr – $원격 사용자 [$time_local] “$의뢰” ‘

‘$ status $ body_bytes_sent “$http_referer” ‘

‘”$http_user_agent” $http_x_forwarded_for’;

access_log off;

섬기는 사람

{

들리다 80;

server_name www.roamway.com;

index index.html index.htm index.php;

루트 / usr / local / nginx / html;

#error_page 404 /404.HTML;

enable-php.conf 포함;

위치 / nginx_status

{

stub_status on;

access_log off;

}

위치 ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

30 일 만료;

}

위치 ~ .*\.(js|CSS)?$

{

12 시간 만료;

}

위치 ~ /\.

{

모두 거부;

}

access_log /var/log/nginx/access.log 액세스;

}

vhost / *. conf 포함;

}

새 파일 phpinfo.php 만들기,다음 코드를 작성하십시오.:

<?PHP

phpinfo();

?>

브라우저 입력

http://192.168.137.17/phpinfo.php, http://192.168.137.18/phpinfo.php

server1 및 server2의 PHP 구문 분석 효과를 볼 수 있습니다.。

3. 웹 사이트 가져 오기

FTP 클라이언트 사용,내 웹 사이트 www.roamway.com 및 데이터베이스를 로컬로 다운로드,다음과 같이:

nginx4

server1의 웹 디렉토리에 업로드하십시오.,/usr / local / nginx / html

nginx5

phpmyadmin 도구 사용,Roamway 데이터베이스 만들기,그런 다음 roamway.sql을 업로드하십시오.,결과는 다음과 같습니다.:

nginx6

server2와 server1은 동일하게 작동합니다.,더이상。

4. 클라이언트 테스트

Windows 클라이언트는 호스트 파일에 주 서버 192.168.137.16과 www.roamway.com 간의 해상도 관계를 추가합니다.,

물론 DNS 서버를 구성 할 수도 있습니다.,정방향 및 역방향 분석 추가,참조하십시오:https://www.roamway.com/?p = 993

핑 www.roamway.com, 192.168.137.16으로 성공적으로 해결되었습니다.

nginx7

로드 밸런싱이 실제로 구현되었는지 확인하기 위해,server1 및 server2의 웹 사이트 디렉토리에 새 홈 페이지 index.html을 만듭니다.

내부에 service1 쓰기: 192.168.137.17또는 server2: 192.168.137.18 저장 및 종료。

브라우저 테스트,반복적으로 새로 고침,다음 두 페이지가 반복해서 나타납니다.。

ngxin8

nginx9

server1 및 server2의 웹 디렉토리에서 index.html 파일을 삭제하십시오.。브라우저 유형 www.roamway.com

nginx11

종료:위의 Nginx 부하 분산 구성 데모는 대략적인 프로세스입니다.,실제 작업은 훨씬 더 복잡합니다。또 다른 에피소드가 나타났습니다,

mysql 컴파일 중 갑작스러운 정전,데이터 손실 및 많은 알 수없는 오류 발생,인내심으로,구성을 계속할 수 있습니다.。

이 구성은 Nginx 역방향 프록시를 사용합니다.,클러스터 기반。mysql 마스터-슬레이브 동기화 및 읽기-쓰기 분리,시간이 허락 할 때 시연。

붙여진:최신 컴파일 매개 변수

nginx 버전: nginx / 1.15.3

gcc에 의해 구축 4.4.7 20120313 (빨간 모자 4.4.7-4) (GCC)

OpenSSL 1.1.1-dev xx XXX xxxx로 빌드 됨

TLS SNI 지원 활성화

인수 구성: –user = www –group = www –접두사 = / usr / local / nginx \

–with-http_stub_status_module –with-http_ssl_module –with-http_v2_module \

–with-http_gzip_static_module –with-http_sub_module –with-http_realip_module \

–with-openssl = / usr / local / openssl / –with-openssl-opt =’enable-tls1_3 enable-weak-ssl-ciphers’ \

–with-cc-opt = -DTCP_FASTOPEN = 23 –with-file-aio \

–http-client-body-temp-path = / var / tmp / nginx / client / \

–http-proxy-temp-path = / var / tmp / nginx / proxy \

–add-module = / usr / local / nginx-ct / –add-module = / usr / local / nginx_upstream_check \

–mail_pop3_module없이 –mail_imap_module없이 –mail_smtp_module없이 \

–http_uwsgi_module없이 –http_scgi_module없이

nginx 업스트림 모듈 예

upstream_module

답장을 남겨주세요