웹사이트 검색

가상 호스트 및 SSL 인증서를 사용하여 Nginx를 설치하는 방법


Nginx(Engine-x의 약어)는 무료 오픈 소스, 강력하고 확장 가능한 고성능 HTTP 및 역방향 프록시 서버, 메일 및 표준 TCP/UDP 프록시입니다. 섬기는 사람. 간단한 구성 언어로 사용 및 구성이 쉽습니다. Nginx는 이제 확장성과 성능으로 인해 로드가 많은 사이트를 구동하는 데 선호되는 웹 서버 소프트웨어입니다.

이 기사에서는 Nginx를 HTTP 서버로 사용하고, 웹 콘텐츠를 제공하도록 구성하고, 이름 기반 가상 호스트를 설정하고, Ubuntu 및 CentOS의 자체 서명 인증서를 포함하여 보안 데이터 전송을 위해 SSL을 생성 및 설치하는 방법을 설명합니다. .

Nginx 웹 서버를 설치하는 방법

먼저 표시된 대로 패키지 관리자를 사용하여 공식 리포지토리에서 Nginx 패키지를 설치하여 시작하세요.

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

Nginx 패키지가 설치된 후에는 다음 명령을 사용하여 지금 서비스를 시작하고 부팅 시 자동 시작되도록 활성화하고 상태를 확인해야 합니다. Ubuntu에서는 패키지가 사전 구성되는 동안 자동으로 시작되고 활성화되어야 합니다.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

이 시점에서 Nginx 웹 서버가 실행 중이어야 하며 netstat 명령을 사용하여 상태를 확인할 수 있습니다.

sudo netstat -tlpn | grep nginx

시스템에 방화벽이 활성화되어 있는 경우 HTTPHTTPS 트래픽을 허용하려면 포트 80443을 열어야 합니다. 각각 그것을 통해 실행합니다.

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

Nginx 설치를 테스트하고 실행 중이고 웹 페이지를 제공할 수 있는지 확인하는 이상적인 방법은 웹 브라우저를 열고 서버의 IP를 가리키는 것입니다.

http://Your-IP-Address
OR
http://Your-Domain.com

작동 중인 설치는 다음 화면에 표시되어야 합니다.

Nginx 웹 서버를 구성하는 방법

Nginx의 구성 파일은 CentOS와 Ubuntu 모두에서 /etc/nginx 디렉터리에 있고 전역 구성 파일은 /etc/nginx/nginx.conf에 있습니다.

Nginx는 지시문이라고 알려진 다양한 구성 옵션에 의해 제어되는 모듈로 구성됩니다. 지시문은 단순(;로 끝나는 형식 이름 및 값) 또는 차단(로 묶인 추가 명령 포함)일 수 있습니다. {}). 그리고 다른 지시문을 포함하는 블록 지시문을 컨텍스트라고 합니다.

모든 지시어는 프로젝트 웹사이트의 Nginx 문서에 포괄적으로 설명되어 있습니다. 자세한 내용은 이를 참조할 수 있습니다.

독립형 모드에서 Nginx를 사용하여 정적 콘텐츠를 제공하는 방법

기본 수준에서 Nginx는 기본 서버 블록만 사용되는 독립형 모드에서 HTML 및 미디어 파일과 같은 정적 콘텐츠를 제공하는 데 사용할 수 있습니다(가상 호스트가 구성되지 않은 Apache와 유사).

기본 구성 파일의 구성 구조를 간략하게 설명하는 것부터 시작하겠습니다.

 
sudo vim /etc/nginx/nginx.conf

이 Nginx 구성 파일을 살펴보면 다음과 같은 구성 구조가 나타나야 하며 이를 기본 컨텍스트라고 하며 다른 많은 단순 및 블록 지시문이 포함되어 있습니다. 모든 웹 트래픽은 http 컨텍스트에서 처리됩니다.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

다음은 샘플 Nginx 기본 구성(/etc/nginx/nginx.conf) 파일입니다. 여기서 위의 http 블록에는 Nginx에 웹 사이트 구성 파일(가상 호스트 구성)을 찾을 수 있는 위치를 알려주는 include 지시문이 포함되어 있습니다. .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Ubuntu에서는 추가 include 지시문(include /etc/nginx/sites-enabled/*;)도 찾을 수 있습니다. 여기서 /etc 디렉토리는 /nginx/sites-enabled//etc/nginx/sites-available/에 생성된 웹사이트 구성 파일에 대한 심볼릭 링크를 저장하여 사이트를 활성화합니다. 그리고 심볼릭 링크를 삭제하면 해당 특정 사이트가 비활성화됩니다.

설치 소스에 따라 /etc/nginx/conf.d/default.conf에서 기본 웹사이트 구성 파일을 찾을 수 있습니다(공식 NGINX 저장소에서 설치한 경우) 및 EPEL) 또는 /etc/nginx/sites-enabled/default(Ubuntu 저장소에서 설치한 경우).

이는 테스트 시스템의 /etc/nginx/conf.d/default.conf에 있는 샘플 기본 nginx 서버 블록입니다.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

위 구성의 지시문에 대한 간략한 설명은 다음과 같습니다.

  • listen: 서버가 수신 대기하는 포트를 지정합니다.
  • server_name: 정확한 이름, 와일드카드 이름 또는 정규 표현식이 될 수 있는 서버 이름을 정의합니다.
  • 루트: Nginx가 웹 페이지 및 기타 문서를 제공할 디렉터리를 지정합니다.
  • 색인: 제공할 색인 파일의 유형을 지정합니다.
  • 위치: 특정 파일 및 폴더에 대한 요청을 처리하는 데 사용됩니다.

웹 브라우저에서 호스트 이름 localhost 또는 해당 IP 주소를 사용하여 서버를 가리키면 요청을 처리하고 /var/www/html/index.html 파일을 제공합니다. 을 실행하고 200(OK) 응답과 함께 이벤트를 액세스 로그(/var/log/nginx/access.log)에 즉시 저장합니다. 오류(실패한 이벤트)가 발생하면 오류 로그(/var/log/nginx/error.log)에 메시지를 기록합니다.

Nginx 로그인에 대해 자세히 알아보려면 Nginx에서 사용자 정의 액세스 또는 오류 로그 형식을 구성하는 방법을 참조하세요.

기본 로그 파일을 사용하는 대신 "이름 기반 가상 호스트(서버 블록) 설정" 섹션에서 나중에 살펴보겠지만 다양한 웹 사이트에 대한 사용자 정의 로그 파일을 정의할 수 있습니다.

Nginx를 사용하여 웹 페이지에 대한 액세스를 제한하는 방법

웹사이트/애플리케이션 또는 그 일부에 대한 액세스를 제한하기 위해 기본 HTTP 인증을 설정할 수 있습니다. 이는 본질적으로 전체 HTTP 서버, 개별 서버 블록 또는 위치 블록에 대한 액세스를 제한하는 데 사용될 수 있습니다.

htpasswd 유틸리티를 사용하여 액세스 자격 증명(사용자 이름/비밀번호)을 저장할 파일을 만드는 것부터 시작하세요.

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

예를 들어, 이 목록에 사용자 admin을 추가해 보겠습니다(가능한 한 많은 사용자를 추가할 수 있음). 여기서 -c 옵션은 비밀번호 파일을 지정하는 데 사용되며 -B 비밀번호를 암호화합니다. [Enter]를 누르면 사용자 비밀번호를 입력하라는 메시지가 표시됩니다.

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

그런 다음 비밀번호 파일에 적절한 권한과 소유권을 할당해 보겠습니다(Ubuntu에서 사용자 및 그룹 nginx를 www-data로 교체).

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

앞서 언급했듯이 웹 서버, 단일 웹사이트(서버 블록 사용) 또는 특정 디렉터리나 파일에 대한 액세스를 제한할 수 있습니다. 이를 달성하기 위해 두 가지 유용한 지시문을 사용할 수 있습니다.

  • auth_basic – 'HTTP 기본 인증 ' 프로토콜을 사용하여 사용자 이름과 비밀번호의 유효성을 검사합니다.
  • auth_basic_user_file – 자격 증명 파일을 지정합니다.

예를 들어, /var/www/html/protected 디렉토리를 비밀번호로 보호하는 방법을 보여드리겠습니다.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

이제 변경 사항을 저장하고 Nginx 서비스를 다시 시작하세요.

sudo systemctl restart nginx 

다음에 브라우저를 위 디렉터리(http://localhost/protected)로 지정하면 로그인 자격 증명(사용자 이름 admin 및 선택한 비밀번호)을 입력하라는 메시지가 표시됩니다. ).

성공적으로 로그인하면 디렉토리의 내용에 액세스할 수 있습니다. 그렇지 않으면 '401 인증 필요' 오류가 발생합니다.

Nginx에서 이름 기반 가상 호스트(서버 블록)를 설정하는 방법

서버 컨텍스트를 사용하면 여러 도메인/사이트를 동일한 물리적 시스템 또는 가상 사설 서버(VPS)에 저장하고 서비스할 수 있습니다. 여러 서버 블록(가상 호스트를 나타냄)은 각 사이트/도메인의 http 컨텍스트 내에서 선언될 수 있습니다. Nginx는 수신된 요청 헤더를 기반으로 요청을 처리하는 서버를 결정합니다.

우리는 각각 지정된 디렉토리에 위치한 다음 더미 도메인을 사용하여 이 개념을 시연할 것입니다.

  • wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

그런 다음 각 사이트의 디렉터리에 적절한 권한을 할당합니다.

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

이제 각 public_html 디렉토리 내에 샘플 index.html 파일을 만듭니다.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

다음으로, /etc/httpd/conf.d 디렉터리 내부에 각 사이트에 대한 서버 블록 구성 파일을 만듭니다.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

wearelinux-console.net.conf 파일에 다음 서버 블록 선언을 추가합니다.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

다음으로 welovelinux.com.conf 파일에 다음 서버 블록 선언을 추가합니다.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

최근 변경 사항을 적용하려면 Nginx 웹 서버를 다시 시작하세요.

sudo systemctl restart nginx

웹 서버를 위의 주소로 지정하면 더미 도메인의 기본 페이지가 표시됩니다.

http://wearelinux-console.net
http://welovelinux.com

중요: SELinux를 활성화한 경우 기본 구성에서는 Nginx가 잘 알려진 승인된 위치(예: 구성의 경우 /etc/nginx, 로그의 경우 /var/log/nginx, 웹 파일의 경우 /var/www/html 등..) .

SELinux를 비활성화하거나 올바른 보안 컨텍스트를 설정하여 이를 처리할 수 있습니다. 자세한 내용은 Nginx Plus 웹 사이트에서 SELinux와 함께 Nginx 및 Nginx Plus 사용 가이드를 참조하세요.

Nginx로 SSL을 설치하고 구성하는 방법

SSL 인증서는 사이트에서 보안 http(HTTPS)를 활성화하는 데 도움이 됩니다. 이는 정보를 암호화하여 최종 사용자와 서버 간에 신뢰할 수 있고 안전한 연결을 설정하는 데 필수적입니다. 귀하의 사이트에서 또는 귀하의 사이트 내에서 전송됩니다.

자체 서명된 인증서를 생성 및 설치하는 방법과 인증서 서명 요청(CSR)을 생성하여 인증 기관(CA)으로부터 SSL 인증서를 획득하는 방법을 다룹니다. Nginx와 함께 사용합니다.

자체 서명된 인증서는 무료로 생성할 수 있으며 실제로 테스트 목적 및 내부 LAN 전용 서비스용으로 사용하기에 좋습니다. 공용 서버의 경우 CA(예: Let’s Encrypt)에서 발급한 인증서를 사용하여 신뢰성을 유지하는 것이 좋습니다.

자체 서명된 인증서를 생성하려면 먼저 인증서를 저장할 디렉터리를 생성하세요.

sudo mkdir /etc/nginx/ssl-certs/

그런 다음 openssl 명령줄 도구를 사용하여 자체 서명된 인증서와 키를 생성합니다.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

위 명령에 사용된 옵션을 간략하게 설명하겠습니다.

  • req -X509 – x509 인증서를 생성 중임을 나타냅니다.
  • -nodes (NO DES) – '키를 암호화하지 않음'을 의미합니다.
  • -days 365 – 인증서가 유효한 일수를 지정합니다.
  • -newkey rsa:2048 – RSA 알고리즘을 사용하여 생성된 키가 2048비트여야 함을 지정합니다.
  • -keyout /etc/nginx/ssl-certs/nginx.key – RSA 키의 전체 경로를 지정합니다.
  • -out /etc/nginx/ssl-certs/nginx.crt – 인증서의 전체 경로를 지정합니다.

다음으로, 가상 호스트 구성 파일을 열고 포트 443에서 수신 대기하는 서버 블록 선언에 다음 줄을 추가합니다. 가상 호스트 파일 /etc/nginx/conf.d/wearelinux-console.net.conf로 테스트하겠습니다.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

그런 다음 nginx 구성 파일에 ssl 지시어를 추가하면 아래와 비슷하게 보일 것입니다.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

이제 Nginx를 다시 시작하고 브라우저에서 다음 주소를 지정하십시오.

https://www.wearelinux-console.net

CA에서 SSL 인증서를 구매하려면 표시된 대로 인증서 서명 요청(CSR)을 생성해야 합니다.

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

기존 개인 키에서 CSR을 생성할 수도 있습니다.

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

그런 다음 생성된 CSRCA에 보내 CA 서명 SSL 인증서 발급을 요청해야 합니다. CA로부터 인증서를 받으면 위와 같이 구성할 수 있습니다.

추가 읽기: Nginx 웹 서버의 보안, 강화 및 성능 향상을 위한 궁극적인 가이드

요약

이 기사에서는 Nginx를 설치하고 구성하는 방법을 설명했습니다. 웹 서버와 클라이언트 간의 데이터 전송을 보호하기 위해 SSL을 사용하여 이름 기반 가상 호스팅을 설정하는 방법을 다루었습니다.

nginx 설치/구성 프로세스 중에 문제가 발생했거나 질문이나 의견이 있는 경우 아래 피드백 양식을 사용하여 당사에 문의하세요.