기술나눔

n1.Nginx 소개 및 설치

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Nginx 소개

Nginx 공식 홈페이지: http://nginx.org

Nginx는 무료 오픈 소스 고성능 HTTP 및 역방향 프록시 서버, 이메일 프록시 서버, TCP/UDP 프록시 서버입니다.

nginx의 기타 보조 릴리스:

  • 텐진

    Taobao가 시작한 웹 서버 프로젝트. Nginx를 기반으로 대규모 트래픽 웹사이트의 요구 사항을 충족하기 위해 많은 고급 기능을 추가합니다. Tengine의 성능과 안정성은 Taobao, Tmall Mall 등 대형 웹사이트에서 잘 테스트되었습니다. 궁극적인 목표는 효율적이고 안정적이며 안전하고 사용하기 쉬운 웹 플랫폼을 만드는 것입니다.2011년 12월부터 Tengine이 오픈소스 프로젝트로 전환되었습니다.

    공식 홈페이지: http://tengine.taobao.org/

  • 오픈레스티

    Nginx와 Lua 언어 기반의 고성능 웹 플랫폼

    공식 홈페이지: http://openresty.org/cn/

Nginx 기능 소개

  • 정적 웹 리소스 서버 html, 그림, js, css, txt 및 기타 정적 리소스

  • http/https 프로토콜용 역방향 프록시

  • FastCGI/uWSGI/SCGI 및 기타 프로토콜과 결합하여 프록시 동적 리소스 요청을 역방향으로 수행

  • tcp/udp 프로토콜 전달 요청(역방향 프록시)

  • imap4/pop3 프로토콜용 역방향 프록시

기본 기능

  • 모듈형 디자인, 우수한 확장성

  • 높은 신뢰성

  • 핫 배포 지원: 가동 중지 시간 없이 구성 파일 업데이트, 버전 업그레이드, 로그 파일 교체

  • 낮은 메모리 소비: 연결 유지 모드에서 10,000개의 비활성 연결에는 2.5M 메모리만 필요

  • 이벤트 구동, AIO, mmap, SendFile

웹 서비스 관련 기능

  • 가상호스트(서버)

  • 연결 유지 및 파이프라인 연결 지원(하나의 연결을 사용하여 여러 요청 수행)

  • 액세스 로그(성능 향상을 위해 로그 버퍼링 지원)

  • url 다시 쓰기

  • 경로 별칭

  • IP 및 사용자 기반 액세스 제어

  • 지원 비율 제한 및 동시성 제한

  • 고객 작업 흐름을 중단하지 않고 재구성 및 온라인 업그레이드

Nginx 프로세스 구조

Nginx는 다중 프로세스 조직 모델로 마스터 프로세스와 워커 프로세스로 구성됩니다.

  • 마스터 프로세스의 기능:

    对外接口:接收外部的操作(信号)
    对内转发:根据外部的操作的不同,通过信号管理 Worker
    监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
    读取Nginx 配置文件并验证其有效性和正确性
    建立、绑定和关闭socket连接
    按照配置生成、管理和结束工作进程
    接受外界指令,比如重启、升级及退出服务器等指令
    不中断服务,实现平滑升级,重启服务并应用新的配置
    开启日志文件,获取文件描述符
    不中断服务,实现平滑升级,升级失败进行回滚处理
    编译和处理perl脚本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 작업자 프로세스의 기능:

    所有 Worker 进程都是平等的
    实际处理:网络请求,由 Worker 进程处理
    Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,
    增加上下文切换的损耗
    接受处理客户的请求
    将请求依次送入各个功能模块进行处理
    I/O调用,获取响应数据
    与后端服务器通信,接收后端服务器的处理结果
    缓存数据,访问缓存索引,查询和调用缓存数据
    发送请求结果,响应客户的请求
    接收主程序指令,比如重启、升级和退出等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

Nginx 모듈 소개

  • 핵심 모듈: Nginx 서버의 정상적인 작동을 위해 필수적인 모듈로, 오류 로깅, 구성 파일 구문 분석, 이벤트 기반 메커니즘, 프로세스 관리 등의 핵심 기능을 제공합니다.

  • 표준 HTTP 모듈: 포트 구성, 웹 페이지 인코딩 설정, HTTP 응답 헤더 설정 등 HTTP 프로토콜 구문 분석과 관련된 기능을 제공합니다.

  • 선택적 HTTP 모듈: Nginx가 플래시 멀티미디어 전송, GeoIP 요청 구문 분석, 네트워크 전송 압축, 보안 프로토콜 SSL 지원 등과 같은 일부 특수 서비스를 처리할 수 있도록 표준 HTTP 기능을 확장하는 데 주로 사용됩니다.

  • 메일 서비스 모듈: 주로 POP3 프로토콜, IMAP 프로토콜 및 SMTP 프로토콜 지원을 포함하여 Nginx 메일 서비스를 지원하는 데 사용됩니다.

  • 스트림 서비스 모듈: TCP 프로토콜 프록시를 포함한 역방향 프록시 기능 구현

  • 타사 모듈: Nginx 서버 애플리케이션을 확장하고 Json 지원, Lua 지원 등과 같은 개발자 정의 기능을 완성하는 것입니다.

2. 엔진엑스 설치

Nginx 버전

  • 메인라인 버전은 기본 개발 버전이며 일반적으로 1.19와 같이 홀수 버전 번호입니다.

  • 안정 버전은 최신 안정 버전으로, 일반적으로 1.20과 같이 짝수 버전입니다.

  • 레거시 버전 안정적인 이전 버전, 일반적으로 짝수 버전(예: 1.18)

Nginx는 yum이나 소스코드를 이용해 설치할 수 있지만, 컴파일과 설치에는 소스코드를 이용하는 것을 권장합니다.

  • yum 버전이 이전 버전입니다.

  • 컴파일 및 설치를 통해 관련 경로를 보다 쉽게 ​​커스터마이징할 수 있으며, 소스코드 컴파일을 이용하면 관련 기능을 커스터마이징할 수 있어 업무상 더욱 편리하게 사용할 수 있습니다.

  • Docker 컨테이너가 직접 실행됨

2.1 yum 기반 Nginx 설치
[root@Rocky8 ~]#vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[root@Rocky8 ~]#yum -y install nginx
[root@Rocky8 ~]#rpm -q nginx
nginx-1.26.1-2.el8.ngx.x86_64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
2.2 Nginx 컴파일 및 설치

Nginx는 C 언어로 작성되었기 때문에 Nginx 소스 코드를 설치하려면 사전에 표준 컴파일러를 준비해야 합니다. GCC의 전체 이름은 GNU에서 개발되었으며 GPL 또는 LGPL에서 라이센스를 받은 것입니다. -예: Apple 컴퓨터 Mac OS용 표준 컴파일러 다른 언어의 경우 Makefile의 자동 생성을 완료하려면 Automake 도구도 필요합니다. Nginx의 일부 모듈은 다음과 같은 타사 라이브러리에 의존해야 합니다. pcre(재작성 지원) ), zlib(gzip 모듈 지원) 및 openssl(ssl 모듈 지원) 등

공식 소스코드 패키지 다운로드 주소: https://nginx.org/en/download.html

# 安装依赖包
[root@Ubuntu2204 ~]#apt update
[root@Ubuntu2204 ~]#apt -y install gcc make libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev

[root@Ubuntu2204 ~]#useradd -r -s /sbin/nologin nginx
[root@Ubuntu2204 ~]#cd /usr/local/src/
[root@Ubuntu2204 src]#wget https://nginx.org/download/nginx-1.22.1.tar.gz
[root@Ubuntu2204 src]#tar xf nginx-1.22.1.tar.gz
[root@Ubuntu2204 src]#cd nginx-1.22.1/
[root@Ubuntu2204 nginx-1.22.1]#./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
[root@Ubuntu2204 nginx-1.22.1]#make && make install
[root@Ubuntu2204 nginx-1.22.1]#chown -R nginx.nginx /apps/nginx
[root@Ubuntu2204 nginx-1.22.1]#ln -s /apps/nginx/sbin/nginx /usr/sbin/

# 启动nginx
[root@Ubuntu2204 nginx-1.22.1]#cd
[root@Ubuntu2204 ~]#nginx 
[root@Ubuntu2204 ~]#ss -nlt

# 关闭nginx
[root@Ubuntu2204 ~]#nginx -s stop
[root@Ubuntu2204 ~]#ss -nlt

# 创建 Nginx 自启动文件
复制同一版本的nginx的yum安装生成的service文件
[root@Ubuntu2204 ~]#vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/apps/nginx/run/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

# 创建pid文件存放的目录
[root@Ubuntu2204 ~]#mkdir /apps/nginx/run/

# 修改配置文件
[root@Ubuntu2204 ~]#vim /apps/nginx/conf/nginx.conf
pid         /apps/nginx/run/nginx.pid;

# 验证 Nginx 自启动文件
[root@Ubuntu2204 ~]#systemctl daemon-reload
[root@Ubuntu2204 ~]#systemctl enable --now nginx.service 
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
[root@Ubuntu2204 ~]#ll /apps/nginx/run/
-rw-r--r--  1 root  root     6 Jul 11 09:45 nginx.pid
[root@Ubuntu2204 ~]#ss -nlt
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process    
LISTEN    0         511                0.0.0.0:80               0.0.0.0:*                 
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*                 
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*                 
LISTEN    0         128                   [::]:22                  [::]:*                 
[root@Ubuntu2204 ~]#systemctl stop nginx.service 
[root@Ubuntu2204 ~]#systemctl status nginx.service
[root@Ubuntu2204 ~]#ss -nlt
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process    
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*                 
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*                 
LISTEN    0         128                   [::]:22                  [::]:*                 

# 验证 Nginx 自启动
[root@Ubuntu2204 ~]#reboot
[root@Ubuntu2204 ~]#ss -nlt
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process    
LISTEN    0         511                0.0.0.0:80               0.0.0.0:*                 
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*                 
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*  
[root@Ubuntu2204 ~]#systemctl status nginx.service 
● nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-07-11 09:48:58 CST; 1min 5s ago
       Docs: https://nginx.org/en/docs/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83