편집 요약 없음
편집 요약 없음
 
(같은 사용자의 중간 판 7개는 보이지 않습니다)
27번째 줄: 27번째 줄:
|비고    =  
|비고    =  
}}
}}
 
== 상세 ==
[[2002년]]부터 [[러시아]]의 [[프로그래머]] 이고르 시쇼브(Игорь Сысоев)가 아파치 코딩하다 아파치의 C10K 문제<ref>10K만큼의 소켓을 열게 된다면 하드웨어가 충분한데도 불구하고 I/O 처리방식의 문제때문에 프로세스가 제대로 처리하지 못한다는 문제</ref>를 보고 이를 극복하면서 네이티브 Win32환경에도 돌아갈 무설치 웹 서버 프로그램에 대한 개발을 시작하여 [[2004년]] [[스푸트니크 1호]] 발사일에 발표한 [[오픈소스]] [[서버]] 프로그램. 현재 이고르 시쇼브와 그가 설립한 회사인 Nginx Inc.가 이 프로젝트를 운영중에 있다. 목표는 가벼우면서도 강력한 프로그램이라고... HTTP와 리버스 프록시, IMAP/POP3등의 서버를 구동가능하다.
[[2002년]]부터 [[러시아]]의 [[프로그래머]] 이고르 시쇼브(Игорь Сысоев)가 아파치 코딩하다 아파치의 C10K 문제<ref>10K만큼의 소켓을 열게 된다면 하드웨어가 충분한데도 불구하고 I/O 처리방식의 문제때문에 프로세스가 제대로 처리하지 못한다는 문제</ref>를 보고 이를 극복하면서 네이티브 Win32환경에도 돌아갈 무설치 웹 서버 프로그램에 대한 개발을 시작하여 [[2004년]] [[스푸트니크 1호]] 발사일에 발표한 [[오픈소스]] [[서버]] 프로그램. 현재 이고르 시쇼브와 그가 설립한 회사인 Nginx Inc.가 이 프로젝트를 운영중에 있다. 목표는 가벼우면서도 강력한 프로그램이라고... HTTP와 리버스 프록시, IMAP/POP3등의 서버를 구동가능하다.


34번째 줄: 34번째 줄:
구조적으로는 아파치에서 사용하는 스레드/프로세스 기반 구조 대신 비동기 이벤트 기반 구조를 가진다. 이로 인해서 서버 부하시 성능 예측이 쉽다고... 이걸 사용하는 리눅스 웹서버의 경우 LAMP(Linux + Apache + MySQL / MariaDB + PHP or Python or Perl)대신 LEMP를 쓴다. 여러 서드파티 기능들(SSL, GeoIP등)을 모듈로 덧 붙이는 방식을 쓰고 있다. 그래서 모듈을 안 쓸 경우 제외해놓는데 단, 소스 컴파일시 모듈을 추가 안 하면 그 이후에 추가가 안 된다.
구조적으로는 아파치에서 사용하는 스레드/프로세스 기반 구조 대신 비동기 이벤트 기반 구조를 가진다. 이로 인해서 서버 부하시 성능 예측이 쉽다고... 이걸 사용하는 리눅스 웹서버의 경우 LAMP(Linux + Apache + MySQL / MariaDB + PHP or Python or Perl)대신 LEMP를 쓴다. 여러 서드파티 기능들(SSL, GeoIP등)을 모듈로 덧 붙이는 방식을 쓰고 있다. 그래서 모듈을 안 쓸 경우 제외해놓는데 단, 소스 컴파일시 모듈을 추가 안 하면 그 이후에 추가가 안 된다.


어느 기관{{모호}}의 [[2012년]] 웹서버 조사에서, 웹서버 프로그램 중 조사한 사이트중 3위를 차지하였으며, 활동적인 웹 서버중 2위를 차지했다. 현재 [[네이버]]의 프론트엔드의 웹서버 엔진이 Nginx이다. (백엔드는 Apache HTTPd를 사용하는 것으로 보임) 그 밖에는 Netflix, WordPress.com, GitHub, SoundCloud, Zynga등이 Nginx를 돌린다고 한다. 현재 리브레 위키의 DDoS를 막아주는 클라우드플레어의 웹서버도 Nginx의 [[포크 (소프트웨어 개발)|포크]]를 사용하고 있다.
어느 기관의 [[2012년]] 웹서버 조사에서, 웹서버 프로그램 중 조사한 사이트중 3위를 차지하였으며, 활동적인 웹 서버중 2위를 차지했다. 현재 [[네이버]]의 프론트엔드의 웹서버 엔진이 Nginx이다. (백엔드는 Apache HTTPd를 사용하는 것으로 보임) 그 밖에는 Netflix, WordPress.com, GitHub, SoundCloud, Zynga등이 Nginx를 돌린다고 한다. [[클라우드플레어]][의 웹서버도 Nginx의 [[포크 (소프트웨어 개발)|포크]]를 사용하고 있다.


현재 Nginx의 안정버전은 1.23.4이다.
현재 Nginx의 안정버전은 1.23.4이다.
42번째 줄: 42번째 줄:
[https://quic.nginx.org/packages.html]
[https://quic.nginx.org/packages.html]
=== NGINX-QUIC 적용 방법 ===
=== NGINX-QUIC 적용 방법 ===
==== 유의사항 ====
nginx-quic용 사전 빌드 패키지는 현재 다음 운영체제 및 아키텍처에서 사용할 수 있다.
nginx-quic용 사전 빌드 패키지는 현재 다음 운영체제 및 아키텍처에서 사용할 수 있다.
  * 운영 체제 및 아키텍처:
  - [[RHEL]] 9 및 파생 제품: [[AMD64]], [[ARM]]64
* - [[RHEL]] 9 및 파생 제품: [[AMD64]], [[ARM]]64
  - [[우분투 22.04]]: amd64, arm64
  * - [[우분투 22.04]]: amd64, arm64
* nginx-quic 패키지는 quictls와 동적으로 연결된다.
* nginx-quic 패키지는 quictls와 동적으로 연결된다.
* 시스템 전체 openssl 패키지와 함께 런타임 종속성으로 설치된다.  
* 시스템 전체 openssl 패키지와 함께 런타임 종속성으로 설치된다.  
* quictls는 운영 체제에서 제공하는 openssl 패키지와 다르다. 그리고 시스템 전체의 암호화 정책을 따르지 않으며, 배포판별 패치가 적용되지 않는다.
* quictls는 운영 체제에서 제공하는 openssl 패키지와 다르다. 그리고 시스템 전체의 암호화 정책을 따르지 않으며, 배포판별 패치가 적용되지 않는다.
/etc/pki/quictls(RHEL9) 또는 /etc/quictls(Ubuntu 22.04)의 구성을 사용한다.  
/etc/pki/quictls(RHEL9) 또는 /etc/quictls(Ubuntu 22.04)의 구성을 사용합니다.  
nginx-quic 패키지는 nginx 또는 nginx-plus 패키지와 함께 설치할 수 없다.  
nginx-quic 패키지는 nginx 또는 nginx-plus 패키지와 함께 설치할 수 없습니다.  
nginx-quic를 설치하기 전에 구성 파일을 백업하라.  
nginx-quic를 설치하기 전에 구성 파일을 백업하라.  
 
* $ sudo cp -a /etc/nginx /etc/nginx-quic-backup  
$ sudo cp -a /etc/nginx /etc/nginx-quic-backup  
==== [[RHEL]] 9 ====
== [[RHEL]] 9 ==
* 1. 우선 다음 명령어를 사용하여 필수 구성 툴을 설치하라.
1. 우선 다음 명령어를 사용하여 필수 구성 툴을 설치하라.
* $ sudo dnf install yum-utils
$ sudo dnf install yum-utils
* 2. 그 다음 yum 리포지토리를 설정하려면 다음 코드를 사용하여 /etc/yum.repos.d/nginx-quic.repo라는 파일을 만든다.
2. 그 다음 yum 리포지토리를 설정하려면 다음 코드를 사용하여 /etc/yum.repos.d/nginx-quic.repo라는 파일을 만든다.
* [nginx-quic]
[nginx-quic]
* name=nginx-quic repo
name=nginx-quic repo
* baseurl=https://packages.nginx.org/nginx-quic/rhel/9/$basearch/
baseurl=https://packages.nginx.org/nginx-quic/rhel/9/$basearch/
* gpgcheck=1
gpgcheck=1
* enabled=1
enabled=1
* gpgkey=https://nginx.org/keys/nginx_signing.key
gpgkey=https://nginx.org/keys/nginx_signing.key
* 3. nginx-quic를 설치하려면 다음 명령을 실행한다:
3. nginx-quic를 설치하려면 다음 명령을 실행한다:
* $ sudo dnf install nginx-quic
$ sudo dnf install nginx-quic
* 4. GPG 키를 수락하라는 메시지가 표시되면 지문이 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62"와 일치하는지 확인한다. 일치하면 성공한 것이다.
4. GPG 키를 수락하라는 메시지가 표시되면 지문이 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62, 일치하는지 확인한다. 일치하면 성공한 것이다.
==== 우분투 22.04 ====
== 우분투 22.04 ==
* 1. 우선 다음 명령어를 사용하여 필수 구성 툴을 설치하라
* $ sudo apt update && sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
*  2. apt가 패키지 진위여부를 확인할 수 있도록 공식 nginx 서명 키를 가져온다.
* $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
*  | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
* 3. nginx-quic 패키지에 대한 apt 리포지토리를 설정 하려면 다음과 같은 명령어를 실행한다.
*  $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
*          https://packages.nginx.org/nginx-quic/ubuntu `lsb_release -cs` nginx-quic" \
*          | sudo tee /etc/apt/sources.list.d/nginx-quic.list
*4. nginx-quic를 설치하려면 다음 명령을 실행한다:
* $ sudo apt update
* $ sudo apt install nginx-quic
==== conf 설정문서에 적용 ====
위의 절차를 완료했다면 /etc/nginx/conf.d 디렉토리에 있는 conf 설정 파일에 추가 설정을 적용한다.
* listen 443 http3 reuseport;
NGINX에 HTTP/1.1 및 HTTP/2와 동일한 포트(여기서는 443)에서 HTTP/3 연결을 수신 대기하도록 지시하는 매개변수와 함께 listen에 http3 지시문을 추가한다.
이 reuseport매개변수는 NGINX 작업자 프로세스가 여러 개인 경우 올바른 작동을 위해 필요하다. 단 멀티 도메인을 사용하고 있다면 한 conf 파일에만 적용하고 다른 conf 파일들은 reuseport를 빼야한다.
* listen 443 http3;
또한, TLS 1.3 지원을 위해 아래 명령어를 추가한다.
* ssl_protocols TLSv1.3;
마지막으로, 다음과 같은 지시문을 추가한다.
* add_header Alt-Svc 'h3=":$server_port"; ma=86400';
아래 예시를 참조하고 적용하면 된다.
* server {
*  # for better compatibility we recommend
*  # using the same port number for QUIC and TCP
*  listen 443 http3 reuseport; # QUIC
*  listen 443 ssl;            # TCP
*
*  ssl_certificate    certs/example.com.crt;
*  ssl_certificate_key certs/example.com.key;
*  ssl_protocols      TLSv1.3;
*
*  location / {
*      # advertise that QUIC is available on the configured port
*      add_header Alt-Svc 'h3=":$server_port"; ma=86400';
*             
*      #proxy_pass <upstream_group>;
*      #root      /<root_directory>;
*  }
* }
저장한 후 vim을 빠져나와 아래의 명령어를 실행해서 nginx를 재시작한다.
* sudo systemctl restart nginx
에러와 함께 실패 메세지가 되지 않았다면 성공한것이다.


{{각주}}
{{각주}}

2023년 5월 7일 (일) 22:55 기준 최신판

NGINX
Nginx logo.svg
소프트웨어 정보
원작자 이고르 시쇼브
출시 2004년 10월 4일
언어 C
웹사이트 http://www.nginx.org/

상세[편집 | 원본 편집]

2002년부터 러시아프로그래머 이고르 시쇼브(Игорь Сысоев)가 아파치 코딩하다 아파치의 C10K 문제[1]를 보고 이를 극복하면서 네이티브 Win32환경에도 돌아갈 무설치 웹 서버 프로그램에 대한 개발을 시작하여 2004년 스푸트니크 1호 발사일에 발표한 오픈소스 서버 프로그램. 현재 이고르 시쇼브와 그가 설립한 회사인 Nginx Inc.가 이 프로젝트를 운영중에 있다. 목표는 가벼우면서도 강력한 프로그램이라고... HTTP와 리버스 프록시, IMAP/POP3등의 서버를 구동가능하다.

이를 지칭할 땐 엔진 X라고 부른다. (ENginex) 이는 러시아도 마찬가지.

구조적으로는 아파치에서 사용하는 스레드/프로세스 기반 구조 대신 비동기 이벤트 기반 구조를 가진다. 이로 인해서 서버 부하시 성능 예측이 쉽다고... 이걸 사용하는 리눅스 웹서버의 경우 LAMP(Linux + Apache + MySQL / MariaDB + PHP or Python or Perl)대신 LEMP를 쓴다. 여러 서드파티 기능들(SSL, GeoIP등)을 모듈로 덧 붙이는 방식을 쓰고 있다. 그래서 모듈을 안 쓸 경우 제외해놓는데 단, 소스 컴파일시 모듈을 추가 안 하면 그 이후에 추가가 안 된다.

어느 기관의 2012년 웹서버 조사에서, 웹서버 프로그램 중 조사한 사이트중 3위를 차지하였으며, 활동적인 웹 서버중 2위를 차지했다. 현재 네이버의 프론트엔드의 웹서버 엔진이 Nginx이다. (백엔드는 Apache HTTPd를 사용하는 것으로 보임) 그 밖에는 Netflix, WordPress.com, GitHub, SoundCloud, Zynga등이 Nginx를 돌린다고 한다. 클라우드플레어[의 웹서버도 Nginx의 포크를 사용하고 있다.

현재 Nginx의 안정버전은 1.23.4이다.

QUIC+HTTP/3 적용 방법[편집 | 원본 편집]

원 출처[편집 | 원본 편집]

이제 프리뷰 NGINX QUIC+HTTP/3 구현에 사용할 수 있는 바이너리 패키지(영문) [1]

NGINX-QUIC 적용 방법[편집 | 원본 편집]

유의사항[편집 | 원본 편집]

nginx-quic용 사전 빌드 패키지는 현재 다음 운영체제 및 아키텍처에서 사용할 수 있다.

- RHEL 9 및 파생 제품: AMD64, ARM64
- 우분투 22.04: amd64, arm64
  • nginx-quic 패키지는 quictls와 동적으로 연결된다.
  • 시스템 전체 openssl 패키지와 함께 런타임 종속성으로 설치된다.
  • quictls는 운영 체제에서 제공하는 openssl 패키지와 다르다. 그리고 시스템 전체의 암호화 정책을 따르지 않으며, 배포판별 패치가 적용되지 않는다.

/etc/pki/quictls(RHEL9) 또는 /etc/quictls(Ubuntu 22.04)의 구성을 사용한다. nginx-quic 패키지는 nginx 또는 nginx-plus 패키지와 함께 설치할 수 없다. nginx-quic를 설치하기 전에 구성 파일을 백업하라.

* $ sudo cp -a /etc/nginx /etc/nginx-quic-backup 

RHEL 9[편집 | 원본 편집]

  • 1. 우선 다음 명령어를 사용하여 필수 구성 툴을 설치하라.
* $ sudo dnf install yum-utils
  • 2. 그 다음 yum 리포지토리를 설정하려면 다음 코드를 사용하여 /etc/yum.repos.d/nginx-quic.repo라는 파일을 만든다.
* [nginx-quic]
* name=nginx-quic repo
* baseurl=https://packages.nginx.org/nginx-quic/rhel/9/$basearch/
* gpgcheck=1
* enabled=1
* gpgkey=https://nginx.org/keys/nginx_signing.key
  • 3. nginx-quic를 설치하려면 다음 명령을 실행한다:
* $ sudo dnf install nginx-quic
  • 4. GPG 키를 수락하라는 메시지가 표시되면 지문이 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62"와 일치하는지 확인한다. 일치하면 성공한 것이다.

우분투 22.04[편집 | 원본 편집]

  • 1. 우선 다음 명령어를 사용하여 필수 구성 툴을 설치하라
* $ sudo apt update && sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
  • 2. apt가 패키지 진위여부를 확인할 수 있도록 공식 nginx 서명 키를 가져온다.
* $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
*  | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
  • 3. nginx-quic 패키지에 대한 apt 리포지토리를 설정 하려면 다음과 같은 명령어를 실행한다.
*  $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
*           https://packages.nginx.org/nginx-quic/ubuntu `lsb_release -cs` nginx-quic" \
*           | sudo tee /etc/apt/sources.list.d/nginx-quic.list
  • 4. nginx-quic를 설치하려면 다음 명령을 실행한다:
* $ sudo apt update
* $ sudo apt install nginx-quic

conf 설정문서에 적용[편집 | 원본 편집]

위의 절차를 완료했다면 /etc/nginx/conf.d 디렉토리에 있는 conf 설정 파일에 추가 설정을 적용한다.

* listen 443 http3 reuseport;

NGINX에 HTTP/1.1 및 HTTP/2와 동일한 포트(여기서는 443)에서 HTTP/3 연결을 수신 대기하도록 지시하는 매개변수와 함께 listen에 http3 지시문을 추가한다. 이 reuseport매개변수는 NGINX 작업자 프로세스가 여러 개인 경우 올바른 작동을 위해 필요하다. 단 멀티 도메인을 사용하고 있다면 한 conf 파일에만 적용하고 다른 conf 파일들은 reuseport를 빼야한다.

* listen 443 http3;

또한, TLS 1.3 지원을 위해 아래 명령어를 추가한다.

* ssl_protocols TLSv1.3;

마지막으로, 다음과 같은 지시문을 추가한다.

* add_header Alt-Svc 'h3=":$server_port"; ma=86400';

아래 예시를 참조하고 적용하면 된다.

* server {
*   # for better compatibility we recommend
*   # using the same port number for QUIC and TCP
*   listen 443 http3 reuseport; # QUIC
*   listen 443 ssl;             # TCP
*
*  ssl_certificate     certs/example.com.crt;
*  ssl_certificate_key certs/example.com.key;
*  ssl_protocols       TLSv1.3;
*
*  location / {
*       # advertise that QUIC is available on the configured port
*       add_header Alt-Svc 'h3=":$server_port"; ma=86400';
*               
*       #proxy_pass <upstream_group>; 
*       #root       /<root_directory>; 
*   }
* }

저장한 후 vim을 빠져나와 아래의 명령어를 실행해서 nginx를 재시작한다.

* sudo systemctl restart nginx

에러와 함께 실패 메세지가 되지 않았다면 성공한것이다.

각주

  1. 10K만큼의 소켓을 열게 된다면 하드웨어가 충분한데도 불구하고 I/O 처리방식의 문제때문에 프로세스가 제대로 처리하지 못한다는 문제
이 문서의 일부는 리브레 위키Nginx 문서를 원출처로 합니다.