nginx 설치 및 사용(연구 노트)

1. nginx 소개

  • Nginx는 고성능 HTTP 및 리버스 프록시 웹 서버로 높은 동시성을 처리하는 데 매우 강력하며 높은 부하 테스트를 견딜 수 있습니다.
  • 적은 메모리와 강력한 동시성 기능이 특징이며, 실제로 nginx의 동시성 기능은 동일한 유형의 웹 서버에서 더 잘 수행됩니다.

1.1 정방향 프록시

Nginx는 로드 밸런싱을 달성하기 위해 리버스 프록시 역할만 할 수 있는 것이 아닙니다. 프록시 서버를 통해 서버에 액세스하는 프로세스를 정방향 프록시라고도 합니다. 지정된 웹 사이트에 액세스하려면 클라이언트 측에서 프록시 서버를 구성해야 합니다.
여기에 이미지 설명 삽입

1.2 리버스 프록시

리버스 프록시: 클라이언트는 구성 없이 액세스할 수 있으며 리버스 프록시 서버에 요청만 보내면 됩니다. 리버스 프록시 서버는 대상 서버를 선택하여 데이터를 얻은 다음 클라이언트로 반환합니다. 프록시 서버와 대상 서버는 외부 세계에서 동일한 서버이며 프록시 서버 주소를 노출하고 실제 서버 IP 주소를 숨깁니다.
여기에 이미지 설명 삽입

1.3 로드 밸런싱

  • 서버 수를 늘린 후 각 서버에 요청을 분배하고, 원래 요청을 단일 서버로 변경하여 여러 서버에 요청을 분배하고, 다른 서버에 로드를 분배하는 것을 로드 밸런스라고 합니다.
  • 클라이언트는 서버에 여러 요청을 보내고 서버는 요청을 처리하며 그 중 일부는 데이터베이스와 상호 작용해야 합니다. 서버가 처리를 완료한 후 클라이언트에 결과를 반환합니다.

단일 서버로는 해결할 수 없습니다. 서버 수를 늘린 다음 각 서버에 요청을 분산합니다. 원래 요청을 단일 서버에 집중하는 대신 여러 서버에 요청을 분산하고 다른 서버에 부하를 분산합니다. . 우리가 로드 밸런싱이라고 부르는 것입니다.
여기에 이미지 설명 삽입

1.4 동적 및 정적 분리

전통적인 방법:

  • 서버 측에 배포되는 정적 리소스(JS, HTML 등)와 동적 리소스(jsp, servlet 등)가 있습니다.
    여기에 이미지 설명 삽입

웹 사이트 구문 분석 속도를 높이기 위해 동적 및 정적 분리 방법이 채택되었습니다.

  • 동적 페이지와 정적 페이지는 서로 다른 서버에서 구문 분석되어 구문 분석 속도를 높이고 원래 단일 서버에 대한 부담을 줄입니다.

여기에 이미지 설명 삽입

2 nginx 설치, 일반 명령 및 구성 파일

2.1 Linux 시스템에 nginx 설치

다운로드

먼저 nginx 공식 웹사이트를 엽니다: http://nginx.org/
2017 버전을 입력하고 nginx 1.12.1 버전을 찾은 다음 클릭하여
여기에 이미지 설명 삽입
1.12.2 압축 패키지를 다운로드하고 다운로드합니다.
여기에 이미지 설명 삽입
pcre.8.37 버전을 다운로드하고
공식 웹 사이트를 입력하십시오: https://sourceforge.net/projects/pcre/files/pcre/8.37/
여기에 이미지 설명 삽입

설치하다

1. openssl, zlib, gcc 종속성 설치

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

여기에 이미지 설명 삽입

2. pcre 종속성 설치

  • usr/src 디렉토리로 들어가 다운로드한 pcre-8.37.tar.gz 압축 패키지를 xshell로 직접 드래그합니다.
  • 압축 해제 명령 tar –xvf pcre-8.37.tar.gz를 사용하십시오.
    여기에 이미지 설명 삽입
  • 압축을 푼 pcre-8.37 폴더에 들어가 ./configure 명령이
    나타나면 사용하십시오.오류: $PATH에서 허용되는 C 컴파일러를 찾을 수 없습니다.문제
    원인은 적합한 컴파일러가 설치되지 않았기 때문입니다.
    다음 명령을 실행합니다.
sudo yum install gcc-c++

(sudo yum install gcc-c++를 사용하면 gcc 및 기타 종속 패키지가 자동으로 설치/업그레이드됩니다.)
./configure 명령을 다시 실행하십시오
!
여기에 이미지 설명 삽입

  • pcre-8.37 폴더에서 마지막으로 make && make install 명령을 사용합니다. 즉, 먼저 컴파일한 다음 설치합니다.
  • 버전 보기 pcre-config --version

3. 마찬가지로 usr/src 디렉토리에서 다운로드한 nginx.tar.gz 압축 패키지를 xshell로 직접 드래그합니다.

  • 解压、./configure、make && make install
  • 서비스를 시작하려면 /usr/local/nginx/sbin/nginx 디렉토리를 입력하십시오.
    여기에 이미지 설명 삽입
    여기에 이미지 설명 삽입
    4. 설치가 성공했는지 확인하십시오.
  • http://192.168.xx.xxx/와 같이 브라우저에 Linux 주소를 입력합니다.
  • 페이지가 표시되지 않으면 방화벽을 해제할 수 있습니다.
关闭防火墙:systemctl stop firewalld

开启防火墙:systemctl start firewalld

查看防火墙状态:systemctl status firewalld

여기에 이미지 설명 삽입
성공적인 설치!

방화벽이 Nginx 포트를 차단하는 것을 방지하기 위해 다음과 같이 설정할 수 있습니다.

  • 열린 포트 번호 보기: firewall-cmd --list-all
  • 열린 포트 번호 설정: firewall-cmd --add-port=80/tcp --permanent
  • 방화벽 재시작: firewall-cmd --reload

2.2 nginx 일반 명령

nginx 디렉토리를 입력합니다. nginx 명령은 nginx의 sbin 디렉토리에서 사용해야 합니다.

cd /usr/local/nginx/sbin

버전 번호 보기

./nginx -v

nginx 시작

./nginx

nginx 중지

./nginx -s stop

nginx를 새로 고침

./nginx -s reload

2.3 nginx 구성 파일

nginx 구성 파일 위치

cd /usr/local/nginx/conf/nginx.conf

구성 파일의 내용

  • 글로벌 블록:
    구성 파일 시작부터 이벤트 블록 사이의 내용까지 주로 Nginx 서버를 실행하는 사용자(그룹) 구성, 번호 생성 허용 작업자 프로세스 수, 프로세스 PID 저장 경로, 로그 저장 경로 및 유형, 구성 파일 도입 등
    예를 들어: worker_processes의 값이 클수록 더 많은 동시 처리를 지원할 수 있습니다.
  • 이벤트 블록:
    이벤트 블록에 관련된 명령은 주로 Nginx 서버와 사용자 간의 네트워크 연결에 영향을 미칩니다. 일반적으로 사용되는 설정에는 여러 작업 프로세스에서 네트워크 연결의 직렬화 활성화 여부, 여러 네트워크 연결을 수신할 수 있는지 여부가 포함됩니다. 연결 요청을 처리할 모델, 각 워드 프로세스가 동시에 지원할 수 있는 최대 연결 수 등
  • http 블록:
    구성의 가장 빈번한 부분, 프록시, 캐시 및 로그 정의와 같은 대부분의 기능 및 타사 모듈의 구성이 여기에 있습니다 . 서버 블록.
    • http 글로벌 블록
      http 전역 블록 구성의 지시어에는 파일 가져오기, MIME 유형 정의, 로그 사용자 지정, 연결 시간 초과, 최대 단일 링크 요청 수 등이 포함됩니다.
    • 서버 블록
      • 각 http 블록은 여러 서버 블록을 포함할 수 있으며 각 서버 블록은 가상 호스트와 동일합니다.
      • 각 서버 블록도 글로벌 서버 블록으로 나뉘며 동시에 여러 위치 블록을 포함할 수 있습니다.

3. nginx 구성 예제-1-리버스 프록시

달성 효과

브라우저를 열고 브라우저 주소 표시줄에 주소 www.123.com을 입력하고 liunx 시스템의 tomcat 메인 페이지로 이동합니다.
여기에 이미지 설명 삽입

준비

  • 기본 포트 8080을 사용하여 Linux 시스템에 Tomcat을 설치합니다.

    • Tomcat 설치 파일을 Linux 시스템 아래의 usr/src 폴더에 넣고 압축을 풉니다.
    • tomcat의 bin 디렉토리를 입력하십시오. ./startup.sh는 tomcat 서버를 시작합니다.
  • 외부 세계에 액세스 포트를 열 수 있는 권한 추가

添加8080端口:firewall-cmd --add-port=8080/tcp --permanent

重载防火墙:firewall-cmd –reload

查看已经开放的端口号: firewall-cmd --list-all
  • 테스트: Windows 시스템에 Linux 서버를 입력하여 Tomcat 서버 페이지에 액세스할 수 있는지 확인합니다.
    여기에 이미지 설명 삽입

  • 특정 작업:
    1. Windows 시스템의 호스트 파일에서 도메인 이름과 IP 주소 사이의 매핑을 추가하여 브라우저가 www.123.com을 입력한 후 nginx 서버로 이동할 수 있도록 합니다.호스트에서 구성
    여기에 이미지 설명 삽입
    파일자신의 IP 주소에 www.123.com 추가
    2. nginx 구성 파일에서 요청 전달 구성(역방향 프록시 구성 )
    여기에 이미지 설명 삽입

3. 테스트: nginx 서버에서 요청을 전달한 후 최종적으로 www.123.com을 방문하여 tomcat 서버로 전달
여기에 이미지 설명 삽입

리버스 프록시 인스턴스 2

효과를 얻다

nginx 리버스 프록시 사용: 액세스 경로에 따라 nginx 서버를 처리해야 하며 요청은 nginx 서버 수신 포트가 9001인 다른 포트 서비스로 리디렉션됩니다.

  • 127.0.0.1:8080으로 바로 이동하려면 http://192.168.11.129:9001/edu/를 방문하세요.
  • http://192.168.11.129:9001/vod/를 방문하여 127.0.0.1:8081로 바로 이동합니다.

준비

  1. 첫 번째 단계: 두 개의 Tomcat 서버, 하나의 포트 8001, 하나의 포트 8002를 준비하고 테스트 페이지를 준비합니다.
  2. 2단계: 폴더( edu 및 vod ) 및 테스트 페이지 만들기

특정 구성

  • 리버스 프록시 구성을 위한 nginx 구성 파일 찾기

여기에 이미지 설명 삽입

  • 위치 명령 설명

  • 이 지시문은 URL을 일치시키는 데 사용됩니다.

  • 구문은 다음과 같습니다.

    • = : 정규 표현식이 없는 uri의 경우 요청 문자열이 uri와 엄격하게 일치해야 하며, 일치하는 경우 검색을 중지하고 즉시 요청을 처리합니다.
    • ~: URI가 정규 표현식을 포함하고 대소문자를 구분함을 나타내는 데 사용됩니다.
    • ~*: URI에 정규식이 포함되어 있고 대소문자를 구분하지 않음을 나타내는 데 사용됩니다.
    • ^~: 정규식이 없는 uri 앞에 Nginx 서버는 식별 uri와 요청 문자열 사이에서 일치도가 가장 높은 위치를 찾아 정규 uri와 요청을 사용하는 대신 즉시 이 위치를 사용하여 요청을 처리해야 합니다. 일치시킬 위치 블록 문자열에서.
    • 참고: uri에 정규식이 포함되어 있으면 ~ 또는 ~ 표시가 있어야 합니다. *
  • 외부 액세스용 포트 번호는 9001 8080 8081입니다.

시험

여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

4. nginx 구성 인스턴스-2-로드 밸런싱

효과를 얻다

브라우저의 주소창에 로드 밸런싱 효과가 있는 http://192.168.17.129/edu/a.html 주소, 즉 평균 포트 8080과 8081을 입력한다.

준비

  • 1단계: 두 개의 Tomcat 서버(8080 및 8081) 준비
  • 2단계: 두 Tomcat의 webapps 디렉토리에서 edu라는 폴더를 만들고 edu 폴더에 테스트용 a.html 페이지를 만듭니다.

특정 구성(여기서는 주로 평균 분포, 즉 폴링)

nginx 구성 파일(주로 구성을 위한 http 블록)에서 로드 밸런싱을 구성합니다.

  • 업스트림 명령 사용: 부하를 처리할 두 대의 서버 추가
  • 서버 블록에서 구성: server_name 및 listen은 nginx 서버의 주소 포트이고, 위치 블록에서 proxy_pass를 구성하고, 로드 균형을 유지하는 두 개의 서버를 도입하고, 매번 nginx 서버가 로드를 다른 서비스 단위로 분산합니다.
    여기에 이미지 설명 삽입

시험

포트 8080 및 8081에서 페이지 표시 요청, 앞뒤로 전환

nginx 배포 서버 정책

  • 폴링(기본값)

    • 각 요청은 시간순으로 서로 다른 백엔드 서버에 하나씩 할당되며 백엔드 서버가 다운되면 자동으로 제거될 수 있습니다.
  • 무게

    • 가중치는 가중치를 나타내며 기본값은 1이며 가중치가 높을수록 더 많은 클라이언트가 할당됩니다.
    • 폴링 확률 지정, 가중치는 접속률에 비례하며 백엔드 서버의 성능이 고르지 않을 때 사용
      여기에 이미지 설명 삽입
  • ip_hash

    • 각 요청은 액세스 IP의 해시 결과에 따라 할당되므로 각 방문자는 백엔드 서버에 고정적으로 액세스하여 세션 문제를 해결할 수 있습니다.
      여기에 이미지 설명 삽입
  • 공정(타사)

    • 백엔드 서버의 응답 시간에 따라 요청을 할당하고 응답 시간이 짧은 요청에 우선 순위 지정
      여기에 이미지 설명 삽입

5. nginx 구성 예제-3-동적 및 정적 분리

기본 소개

  • 동적 및 정적 요청 분리 현재 구현의 관점에서 동적 및 정적 분리는 대략 두 가지 유형으로 나눌 수 있습니다.

    • 1. 정적 파일을 별도의 도메인 이름으로 순수하게 분리하고 독립된 서버에 배치하는 것도 현재 주류 권장 솔루션입니다.
    • 2. 동적 및 정적 파일이 함께 혼합되어 릴리스되며 nginx로 구분됩니다.

다른 요청 전달을 달성하려면 위치별로 다른 접미사 이름을 지정하십시오.
만료 매개변수를 설정하여(위치에 추가) 브라우저 캐시 만료 시간을 만들고 서버와의 이전 요청 및 트래픽을 줄일 수 있습니다. 특정 만료 정의: 리소스에 대한 만료 시간을 설정하는
것입니다. 즉, 즉, 서버측 검증은 브라우저 자체를 통해 만료 여부를 직접 확인할 수 있어 추가 트래픽이 발생하지 않습니다. 이 접근 방식은 자주 변경되지 않는 리소스에 이상적입니다. (파일이 자주 업데이트되는 경우 Expires를 사용하여 캐시하는 것은 권장하지 않습니다.) 여기서는 3d를 설정합니다. 즉, 이 3일 이내에 이 URL을 방문하여 요청을 보내고 해당 파일의 마지막 업데이트 시간을 비교합니다. 변경 사항이 없으면 변경되지 않습니다. 서버는 상태 코드 304를 가져오고 반환합니다. 수정 사항이 있으면 서버에서 직접 다운로드하여 상태 코드 200을 반환합니다.
여기에 이미지 설명 삽입

준비

정적 리소스를 저장하기 위해 이미지 및 www 폴더와 같은 Linux 시스템의 정적 리소스를 준비합니다.

특정 구성

  1. nginx 구성 파일에서 구성하고 nginx 설치 디렉터리를 찾은 다음 /conf/nginx.conf 구성 파일을 엽니다.
    여기에 이미지 설명 삽입
  • 수신 포트 및 액세스 주소 추가
  • 각 정적 자원 액세스 디렉토리는 위치 섹션에 해당하며 여기서 루트는 Linux에서 자원의 루트 디렉토리 위치를 나타냅니다.
  • autoindex on: 정적 자원 디렉토리 아래에 자원 목록을 표시합니다.

시험

  • 마지막으로 Nginx 설정이 맞는지 확인 후 동적/정적 분리가 잘 되었는지 테스트 해보고 백엔드 tomcat 서버에서 static 파일을 삭제하여 접근 가능한지 확인해야 합니다. 이는 정적 리소스 nginx가 직접 반환하고 백엔드 tomcat 서버로 이동하지 않음을 의미합니다.

  • 이미지에 액세스합니다(액세스하려는 정적 리소스의 이름을 경로에 직접 추가할 수도 있음).
    여기에 이미지 설명 삽입

  • 방문 www
    여기에 이미지 설명 삽입

6. nginx 구성 고가용성 클러스터

Keepalived + Nginx 고가용성 클러스터(마스터-슬레이브 모드)
여기에 이미지 설명 삽입

nginx 고가용성이란?

  • 이전 구성에서는 nginx 서버가 하나뿐인데 이 서버가 다운되면 클라이언트가 요청한 서버에 접근할 수 없기 때문에 고가용성 클러스터가 이러한 문제를 해결한 것이다.
    여기에 이미지 설명 삽입
  • 두 개의 nginx 서버, 하나의 마스터 서버와 하나의 슬레이브 서버는 서버 다운타임으로 인해 nginx 서비스가 중단되지 않도록 하는 데 사용됩니다.
  • 소프트웨어 Keepalived 지원이 필요합니다.
    • Keepalived의 기능은 서버의 상태를 감지하는 것으로, 웹 서버가 다운되거나 작업이 실패하면 Keepalived가 이를 감지하고 시스템에서 결함이 있는 서버를 제거하고 다른 서버를 사용하여 서버의 작업을 대체합니다. Keepalived는 정상 작동 후 자동으로 서버를 서버 그룹에 추가합니다. 이러한 모든 작업은 수동 개입 없이 자동으로 완료됩니다. 수동 작업이 필요한 것은 결함이 있는 서버를 복구하는 것입니다.
  • 가상 ip를 외부에 노출시키고 라우팅을 통해 2대의 nginx 서버로 전달하여 request forwarding 처리

고가용성 클러스터 구성을 위한 준비

  • 두 개의 nginx 서버가 필요합니다(예: 192.168.11.129 및 192.168.11.133).
  • 두 서버 모두에 nginx 설치
  • 두 서버에 keepalived 설치
    • yum 설치 keepalived -y
    • 설치 후 etc에 keepalived 디렉토리가 생성되고 keepalived.conf 파일이 있습니다.
  • 완전한 고가용성 구성(마스터-슬레이브 구성)
    • /etc/keepalived/keepalivec.conf 구성 파일 수정
global_defs {
    
     #全局配置
	notification_email {
    
    
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
 	}
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 192.168.11.129
     smtp_connect_timeout 30
     router_id LVS_DEVEL #主机的名字
}
vrrp_script chk_http_port {
    
     # 检测脚本配置
     script "/usr/local/src/nginx_check.sh" # 脚本文件位置
     interval 2 # 检测脚本执行的间隔
     weight 2 # 权重,一旦校测脚本中的条件成立,就修改为这个新权重(比如检测到这个服务器宕机,那么就将权重降低)
}
vrrp_instance VI_1 {
    
     # 虚拟ip配置
    state BACKUP # 备份服务器上将 MASTER 改为 BACKUP 
    interface ens33 //网卡
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小(主机100,备机90)
    advert_int 1 # 默认每隔一秒检测主机状态
    authentication {
    
    
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
    
    
     	192.168.11.88 // VRRP H 虚拟地址 (对外暴露的虚拟ip地址)
     }
}
  • /usr/local/src에 탐지 스크립트 추가(메인 서버가 다운되었는지 여부를 탐지하기 위해)
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
     /usr/local/nginx/sbin/nginx # nginx位置
     sleep 2
     if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
     	killall keepalived
     fi
fi
  • nginx를 시작하고 두 서버에서 keepalived
    • nginx 시작: ./nginx
    • 启动 keepalived: systemctl 시작 keepalived.service

기말 고사

  • 브라우저 주소 표시줄에 가상 IP 주소 192.168.11.88을 입력합니다.
    여기에 이미지 설명 삽입

  • 메인 서버(192.168.11.129) nginx를 중지하고 keepalived한 다음 192.168.11.88을 입력하면 내부 액세스는 대기 nginx 서버(192.168.17.133)입니다.
    여전히 접근 가능!

7. nginx의 원리

1. 마스터와 작업자의 작업 모드를 채택하십시오.

  • 관리자로서 업무 프로세스를 관리하고 모니터링합니다.

  • 실제 처리 과정으로 작업자는 스크램블링 방식을 사용하여 처리 요청 처리
    여기에 이미지 설명 삽입
    여기에 이미지 설명 삽입
    합니다 .
    여기에 이미지 설명 삽입

  • nginx –s reload 핫 배포를 사용하고 핫 배포에 nginx를 사용할 수 있습니다.

    • 서버 다운타임을 피하기 위해 nginx를 다시 시작할 필요가 없습니다.
    • 작업자가 요청을 처리하는 경우 나머지 작업자만 핫 배포를 수행합니다.
  • 각각의 waker는 독립적인 프로세스로, 한 walker에 문제가 발생하면 나머지 waker는 서비스 중단 없이 요청 프로세스를 실현하기 위해 계속해서 독립적으로 경쟁합니다.

4. 몇 개의 웨이커를 설정하는 것이 적절한가

  • 작업자의 수는 서버의 CPU 수 와 동일한 것이 가장 적절합니다
    .
  • 요청을 보낼 때 Waker가 몇 개의 연결을 사용했습니까?
    • 2 또는 4
      • 정적 리소스에 액세스하는 경우 클라이언트는 요청을 보내고 작업자는 응답합니다.
      • 동적 리소스에 액세스하는 경우 위의 내용을 기반으로 작업자는 tomcat과 상호 작용하고 데이터베이스 액세스를 요청하기 위해 두 개의 연결을 더 추가합니다.
  • Nginx는 하나의 마스터와 4개의 waker를 가지고 있으며 각 waker는 최대 1024개의 연결을 지원합니다. 지원되는 최대 동시성 수는 얼마입니까?
    • 일반 정적 자원에 대한 최대 동시 액세스는 다음과 같습니다. worker_connections * worker_processes /2 (작업자당 최대 연결 수 × 작업자 수, 정적 자원에 액세스하기 위한 두 연결로 나눈 값)
    • 그리고 HTTP가 리버스 프록시로 사용되는 경우 최대 동시성 수는 다음과 같아야 합니다. worker_connections*worker_processes / 4

어서 해봐요! 프로그램 제작자!

추천

출처blog.csdn.net/lj20020302/article/details/129827520