English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서는 Nginx와 Tomcat이 동적 및 정적 분리와 로드 균형을 구현하는 방법을 설명합니다. 동적 및 정적 분리라면 사용자 요청의 이미지, html 등 정적 파일을nginx(또는 apache 등)을 통해 처리하고, jsp, do 등 동적 파일을 tomcat(또는 weblogic)을 통해 처리하여, 동적 및 정적 페이지 접근 시 다른 컨테이너를 통해 처리하는 것을 의미합니다.
1. Nginx 소개:
Nginx는 고성능의 HTTP 및 반전 주소 프록시 서버로, 높은 안정성을 가지고 있으며, 열선 배치 및 모듈 확장도 쉽게 할 수 있습니다. 방문자의 트래픽 최대치나 악의적인 슬로우 콘넥션을 통해 서버의 물리 메모리가 빈번히 교환되고 응답이 없어 서버를 재시작해야 할 수도 있습니다. Nginx는 단계별 자원 할당 기술을 채택하여, 정적 파일과 캐시가 없는 반전 주소 프록시 가속을 처리하고, 로드 균형 및 오류 tolerance를 실현하여, 이렇게 높은 병행 접근 상황에서도 고 병행 처리를 견딜 수 있습니다.
2. Nginx 설치 및 구성
第一步:Nginx 설치 패키지 다운로드 http://nginx.org/en/download.html
第二步:Linux에서 Nginx를 설치합니다
#tar zxvf nginx-1.7.8.tar.gz //解压 #cd nginx-1.7.8 #./configure --와 함께-http_stub_status_module --와 함께-http_ssl_module//서버 상태 페이지와 HTTPS 모듈을 시작합니다
PCRE 라이브러리가 부족하다는 오류가 발생합니다. 그림과 같이 표시됩니다:
이제 먼저 3단계에서 PCRE 설치를 실행한 후3실행하면 이렇게 됩니다
4.make && make install //编译 및 설치
5. 설치 및 구성이 올바른지 테스트하다, Nginx가 설치된/usr/local/nginx
#/usr/local/nginx/sbin/nginx -t, 그림과 같이 표시됩니다:
3단계: Linux에서 PCRE를 설치합니다
#tar zxvf pcre-8.10.tar.gz //解压 cd pcre-8.10 ./configure make && make install//编译 및 설치
3. Nginx +Tomcat 동적/정적 분리 구현
동적/정적 분리는 Nginx가 클라이언트의 요청을 처리하는 정적 페이지(html 페이지) 또는 이미지를 처리하고, Tomcat이 클라이언트의 요청을 처리하는 동적 페이지(jsp 페이지)를 처리하는 것을 의미하며, Nginx가 처리하는 정적 페이지의 효율성이 Tomcat보다 높습니다.
1단계: 우리는 Nginx 파일을 설정해야 합니다
#vi /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; {} http { include 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 logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 80 default; server_name localhost; <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //nginx로 인해 정적 페이지를 처리/span> { root /usr/tomcat/apache-tomcat-8081/webapps/ROOT; expires 30d; //고객 측으로缓存30일 {} error_page 404 /404.html; #서버 오류 페이지를 정적 페이지로 전환 /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; {} <span style="color:#ff0000;"> location ~ \.(jsp|do)$ {//모든 jsp의 동적 요청을 tomcat 처리에 맡겨/span> <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081; //jsp나 do의 접미사를 가진 요청을 tomcat 처리에 맡겨/span> proxy_redirect off; proxy_set_header Host $host; //백엔드 웹 서버는 X를 통해-Forwarded-For 가져오기 사용자 실제 IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; //클라이언트가 요청할 수 있는 최대 단일 파일 바이트 수 client_body_buffer_size 128k; //버퍼 프록시가 사용자 요청의 최대 바이트 수를 버퍼링 proxy_connect_timeout 90; //nginx와 백엔드 서버의 연결 타임아웃 시간 proxy_read_timeout 90; //연결 성공 후, 백엔드 서버 응답 시간 proxy_buffer_size 4k; //프록시 서버(nginx)가 사용자 헤더 정보를 저장하는 버퍼 크기를 설정 proxy_buffers 6 32k; //proxy_buffers 버퍼, 웹페이지 평균으로32k 미만이면 이렇게 설정 proxy_busy_buffers_size 64k;//고부하 상태에서 버퍼 크기(proxy_buffers*2) proxy_temp_file_write_size 64k; //캐시 폴더 크기를 설정합니다. 이 값보다 큰 경우 upstream 서버에서 전달됩니다. {} {} {}
2단계: Tomcat의 webapps에 있는/ROOT에 index.html 정적 페이지를 새로 만들어 그림과 같이 표시됩니다:
3단계: Nginx 서비스를 시작합니다
#sbin/nginx 그림과 같이 표시됩니다:
4단계: 우리의 페이지 접근http://192.168.74.129/index.html 정상적으로 내용을 표시합니다. 그림과 같이 표시됩니다:
5단계: Nginx와 Tomcat이 고 병목 상황에서 정적 페이지 처리 성능은 어떻게 되는지 테스트해 보겠습니다?
Linux ab 웹 사이트 테스트 명령어를 사용하여 성능을 테스트했습니다
1. Nginx가 정적 페이지 처리 성능을 테스트하다
ab -c 100 -n 1000 http://192.168.74.129/index.html
이는 동시에 처리하는 것을 나타냅니다100개의 요청을 처리하고 실행1000번 index.html 파일을 요청하고, 그림과 같이 표시됩니다:
2. Tomcat이 정적 페이지 처리 성능을 테스트하다
ab -c 100 -n 1000 http://192.168.74.129:8081/index.html
이는 동시에 처리하는 것을 나타냅니다100개의 요청을 처리하고 실행1000번 index.html 파일을 요청하고, 그림과 같이 표시됩니다:
동일한 정적 파일 처리에 대해, Nginx의 정적 성능은 Tomcat보다 좋습니다. Nginx는 초당5388차례, 그리고 Tomcat은 요청을만 합니다2609차례.
결론: Nginx 설정 파일에서, 정적 요청을 Nginx에 처리하도록 설정하고, 동적 요청을 Tomcat에 처리하도록 설정하여 성능을 제공합니다.
4. Nginx +Tomcat 로드 밸런싱 및 토플로스
고 병목 상황에서 서버 성능을 향상시키기 위해, 한 台 서버의 병목 상황을 줄이고, 클러스터 배치를 채택하여, 한 台 서버가 고장 나서 서비스에 접근할 수 없는 경우에 대한 토플로스 문제를 해결할 수 있습니다.
초보: 우리 측에서 두 개의 Tomcat 서버를 배포했습니다.192.168.74.129:8081와192.168.74.129:8082
초보: Nginx가 중간 서버로 사용되었을 때, 클라이언트가 서버에 요청을 보내면, 서버에 대한 요청을 처리하기 위해 로드 밸런싱을 사용하여, 클라이언트 요청을 각 서버로 균형 있게 분배하여 서버의 부담을 줄일 수 있습니다. Nginx의 nginx.conf 파일을 설정합니다.
#vi /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; {} http { include 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 logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; <span style="color:#ff0000;">upstream localhost_server { ip_hash; server 192.168.74.129:8081; server 192.168.74.129:8082; }/span> server { listen 80 default; server_name localhost; <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //nginx로 인해 정적 페이지를 처리/span> { root /usr/tomcat/apache-tomcat-8081/webapps/ROOT; expires 30d; //고객 측으로缓存30일 {} error_page 404 /404.html; #서버 오류 페이지를 정적 페이지로 전환 /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; {} <span style="color:#ff0000;">location ~ \.(jsp|do)$ {//모든 jsp의 동적 요청을 tomcat 처리에 맡겨/span> <span style="color:#ff0000;">proxy_pass http://localhost_server; //jsp나 do의 접미사를 가진 요청을 tomcat 처리에 맡겨/span> proxy_redirect off; proxy_set_header Host $host; //백엔드 웹 서버는 X를 통해-Forwarded-For 가져오기 사용자 실제 IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; //클라이언트가 요청할 수 있는 최대 단일 파일 바이트 수 client_body_buffer_size 128k; //버퍼 프록시가 사용자 요청의 최대 바이트 수를 버퍼링 proxy_connect_timeout 90; //nginx와 백엔드 서버의 연결 타임아웃 시간 proxy_read_timeout 90; //연결 성공 후, 백엔드 서버 응답 시간 proxy_buffer_size 4k; //프록시 서버(nginx)가 사용자 헤더 정보를 저장하는 버퍼 크기를 설정 proxy_buffers 6 32k; //proxy_buffers 버퍼, 웹페이지 평균으로32k 미만이면 이렇게 설정 proxy_busy_buffers_size 64k;//고부하 상태에서 버퍼 크기(proxy_buffers*2) proxy_temp_file_write_size 64k; //캐시 폴더 크기를 설정합니다. 이 값보다 큰 경우 upstream 서버에서 전달됩니다. {} {} {}
설명:
1.upstream의 server는 서버의 IP(도메인)과 포트를 가리키며, 추가로 매개변수를 추가할 수 있습니다.
1)weight: 서버 전달 가중치를 설정합니다. 기본 값은1입니다.
2)max_fails: fail_timeout과 함께 사용되며, fail_timeout 기간 동안 서버가 전달 실패 횟수가 max_fails 설정 값을 초과하면 이 서버는 사용할 수 없습니다. max_fails 기본 값은1
3)fail_timeout: 이 기간 동안 전달 실패 횟수가 얼마나 되면 이 서버가 사용할 수 없다고 판단됩니다.
4)down: 이 서버는 사용할 수 없습니다.
5)backup: ip_hash 설정이 이 서버에 대해 무효화되도록 합니다. 모든 비백업 서버가 무효화되면 서버로 요청이 전달됩니다.
2.ip_hash 설정은 클러스터 서버에서, 동일한 클라이언트가 여러 서버로 요청을 전달할 때, 각 서버가 동일한 정보를 캐시할 수 있어 자원 낭비가 발생할 수 있습니다. ip_hash 설정은 동일한 클라이언트가 두 번째로 동일한 정보를 요청할 때, 첫 번째 요청의 서버로 전달됩니다. 하지만 ip_hash는 weight와 동시에 사용할 수 없습니다.
이것이 이 글의 전체 내용입니다. 많은 도움이 되었기를 바랍니다. 또한, 많은 지원을 해 주시기를 바랍니다.
선언: 이 글의 내용은 인터넷에서 가져왔으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공적인 편집을 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반 내용을 발견하면 이메일을 notice#w로 보내 주세요.3codebox.com에 이메일을 보내면 (#을 @으로 변경하여 보내세요) 신고를 하고 관련 증거를 제공하면, 실제로 확인되면 이 사이트는 즉시 위반된 내용을 삭제합니다.