Rocky Linux에 최신 Nginx 설치 방법¶
소개¶
Nginx는 빠르고 효율적이며 상상할 수 있는 거의 모든 환경과 호환되는 웹 서버입니다. 개인적으로 자주 사용하며, 사용법을 익히면 설정과 설치가 꽤 쉽습니다. 이에 따라 초보자를 위한 이 가이드를 작성했습니다.
다음은 Nginx의 주요 기능입니다:
- 기본 웹 서버 기능
- 다중 사이트로 트래픽을 연결하는 역방향 프록시
- 다중 웹 사이트의 트래픽을 관리하는 내장 로드 밸런서
- 속도를 위한 내장 파일 캐싱
- 웹 소켓
- FastCGI 지원
- 물론 IPv6
정말 훌륭합니다! 그러면 sudo dnf install nginx만 하면 되는 걸까요? 사실은 그렇지 않습니다. 먼저 "mainline" 브랜치를 활성화하여 최신 버전의 Nginx를 사용할 수 있도록 올바른 모듈을 활성화해야 합니다.
참고 사항
"stable" 브랜치라는 다른 브랜치가 있지만, 대부분의 사용 사례에는 조금 오래된 상태입니다. 이 브랜치는 개발 중인 새로운 기능을 받지 않으며, 가장 긴급한 버그 수정과 보안 업그레이드만 받습니다.
Nginx 개발자는 "mainline" 브랜치가 모든 새로운 기능, 모든 보안 수정 및 모든 버그 수정을 제공하므로 일반적인 사용을 위해 잘 테스트되고 안정적이라고 생각합니다.
"stable" 브랜치를 사용하는 유일한 이유는 다음과 같습니다: * 당신은 진짜* 새로운 기능과 큰 수정 사항이 타사 코드나 사용자 정의 코드를 손상시키지 않는지 확인하고 싶습니다. * Rocky Linux 소프트웨어 저장소만 사용하고 싶을 때
이 가이드의 끝에는 "stable" 브랜치를 최소한의 노력으로 활성화하고 설치하는 방법에 대한 튜토리얼이 있습니다.
전제 조건 및 가정¶
다음이 필요합니다:
- 인터넷에 연결된 Rocky Linux 장치 또는 서버
- 명령 줄에 대한 기본적인 이해
- root 사용자 또는
sudo를 사용하여 명령을 실행할 수 있는 권한 - 그래픽 또는 명령 줄 기반의 텍스트 편집기. 이 튜토리얼에서는
nano를 사용합니다.
저장소 설치 & 모듈 활성화¶
먼저, 시스템을 업데이트합니다:
sudo dnf update
그런 다음 epel-release 소프트웨어 저장소를 설치합니다:
sudo dnf install epel-release
그리고 최신 버전의 nginx에 대한 올바른 모듈을 활성화합니다. 이 모듈은 항상 nginx:manline이라고 불립니다. 따라서 다음과 같이 dnf를 사용하여 활성화합니다:
sudo dnf module enable nginx:mainline
이것은 Gary Gygax가 직접 참여하는 2판 D&D가 아니므로, 예를 선택하세요. 물론입니다. 확인하려면 y를 누르세요.
Nginx 설치 및 실행¶
그런 다음 이전에 추가한 저장소에서 nginx 패키지를 설치합니다:
sudo dnf install nginx
터미널에서 저장소의 GPG 키를 설치하겠냐는 메시지가 표시됩니다. 필요하므로 Y를 선택하세요.
설치가 완료되면, 다음 명령을 사용하여 nginx 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다:
sudo systemctl enable --now nginx
최신 버전의 Nginx가 설치되었는지 확인하려면 다음 명령을 실행하세요:
nginx -v
그런 다음, 간단한 정적 웹 사이트를 구축하기 위해 HTML 파일을 /usr/share/nginx/html/ 디렉토리에 넣을 수 있습니다. 기본 웹사이트/가상 호스트의 설정 파일은 "nginx.conf"로, /etc/nginx/에 있습니다. 이 파일에는 기본 Nginx 서버 설정 외에도 다른 여러 가지 설정이 포함되어 있습니다. 실제 웹 사이트 설정을 다른 파일로 이동하더라도 "nginx.conf"의 나머지 부분은 그대로 두는 것이 좋습니다.
방화벽 구성¶
참고 사항
LXD/LXC 또는 Docker와 같은 컨테이너에 Nginx를 설치하는 경우, 일단이 부분은 건너뛰어도 됩니다. 방화벽은 호스트 운영 체제에서 처리해야 합니다.
다른 컴퓨터에서 해당 장치의 IP 주소 또는 도메인 이름으로 웹 페이지를 보려고 시도하면 아무것도 표시되지 않을 것입니다. 왜냐하면 방화벽이 실행 중이기 때문입니다.
실제로 웹 페이지를 "보기" 위해 필요한 포트를 열기 위해 Rocky Linux의 내장 방화벽인 firewalld를 사용할 것입니다. 이를 수행하는 firewalld 명령은 firewall-cmd입니다. 두 가지 방법이 있습니다: 공식 방법과 메뉴얼 방법. 이 경우에는 공식 방법이 가장 좋지만, 차후 참고를 위해 두 가지 방법을 알아두는 것이 좋습니다.
공식 방법은 방화벽을 http 서비스에 개방하며, 당연히 웹 페이지를 처리하는 서비스입니다. 다음 명령을 실행하세요:
sudo firewall-cmd --permanent --zone=public --add-service=http
이것을 자세히 살펴보겠습니다:
-–permanent플래그는 방화벽이 재시작되거나 서버 자체가 재시작될 때마다 이 구성이 사용되도록 방화벽에 알려줍니다.–-zone=public는 이 포트로 들어오는 연결을 모든 사용자로부터 받도록 방화벽에 지시합니다.- 마지막으로,
--add-service=http는firewalld가 모든 HTTP 트래픽을 서버로 전달하도록 합니다.
Now here's the manual way to do it. 거의 동일하지만 HTTP가 사용하는 포트인 80번을 명시적으로 열어줍니다.
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
–-add-port=80/tcp이 경우에 원하는 대로, 포트 80을 통해 들어오는 연결을 받아들이도록 방화벽에 지시합니다.
SSL/HTTPS 트래픽에 대해 위와 동일한 프로세스를 반복하려면 명령을 다시 실행하고 서비스 및/또는 포트 번호를 변경하세요.
sudo firewall-cmd --permanent --zone=public --add-service=https
# 또는 다른 경우에는:
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
이러한 구성은 강제로 적용되기 전까지는 적용되지 않습니다. 이를 위해 firewalld에게 구성을 다시 불러오도록 알려야 합니다.
sudo firewall-cmd --reload
참고
이제 이것이 작동하지 않을 가능성이 매우 적습니다. 드물게 발생하는 경우에는 예전 방식으로 "끄고 켜기"를 하여 firewalld에게 원하는 대로 동작하도록 할 수 있습니다.
systemctl restart firewalld
포트가 제대로 추가되었는지 확인하려면 firewall-cmd --list-all을 실행하세요. 올바르게 구성된 방화벽은 다음과 같이 표시됩니다:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp9s0
sources:
services: cockpit dhcpv6-client ssh http https
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
이것이 방화벽 측면에서 필요한 모든 것입니다.
이제 웹 페이지를 볼 수 있어야합니다. 다음과 같은 모습의 웹 페이지를 볼 수 있을 것입니다:

It’s not much at all, but it means the server is working. 또한 다음 명령을 사용하여 명령 줄에서 웹 페이지가 작동하는지 테스트할 수 있습니다:
curl -I http://[your-ip-address]
서버 사용자 생성 및 웹 사이트 루트 폴더 변경¶
기본 디렉토리에 웹 사이트 파일을 놓고 가는 것도 가능하지만 (이는 컨테이너 내에서 실행되거나 테스트/개발 서버에서 실행될 때 Nginx에 대해서는 괜찮을 수 있습니다), 이는 우리가 베스트 프랙티스라고 부르지 않습니다. 대신, 웹 사이트를 위해 시스템에 특정한 Linux 사용자를 생성하고 해당 사용자를 위해 디렉토리를 만드는 것이 좋습니다.
여러 웹 사이트를 구축하려는 경우 조직화 및 보안을 위해 여러 사용자 및 루트 디렉토리를 생성하는 것이 좋습니다.
이 가이드에서는 "www"라는 멋진 사용자 하나만 만들 것입니다. 웹 사이트 파일을 어디에 둘지 결정하는 것은 더 복잡해집니다.
서버 설정에 따라 웹 사이트 파일을 여러 가지 위치에 둘 수 있습니다. 물리적인 서버 (bare-metal)에 있거나 VPS에 직접 nginx를 설치하는 경우 보안 강화된 Linux (SELinux)가 실행 중인 경우가 있습니다. SELinux는 기계를 보호하기 위해 많은 작업을 수행하지만 웹 페이지와 같은 특정 항목을 둘 수 있는 위치를 결정하기도 합니다.
따라서 기계에 직접 nginx를 설치하는 경우 웹 사이트를 기본 루트 폴더의 하위 디렉토리에 두는 것이 좋습니다. 이 경우 기본 루트는 /usr/share/nginx/html이므로 "www" 사용자의 웹 사이트는 /usr/share/nginx/html/www로 들어갈 수 있습니다.
그러나 LXD/LXC와 같은 컨테이너에서 nginx를 실행하는 경우 SELinux가 설치되지 않을 가능성이 높으며 파일을 원하는 위치에 둘 수 있습니다. 이 경우 일반적인 홈 폴더의 디렉토리 아래에 사용자의 모든 웹 사이트 파일을 두는 것이 좋습니다. 예를 들어 /home/www/와 같이 하위 디렉토리에 사용자의 웹 사이트 파일을 모두 두는 방식입니다.
하지만 이 가이드에서는 SELinux가 설치된 것으로 가정하고 진행하겠습니다. 사용 사례에 따라 필요한 부분을 변경하십시오. SELinux의 작동 방식에 대한 자세한 내용은 SELinux 학습 가이드에서 자세히 알아볼 수 있습니다.
사용자 생성¶
먼저 사용할 폴더를 만듭니다:
sudo mkdir /usr/share/nginx/html/www
그런 다음 www 그룹을 생성합니다:
sudo groupadd www
sudo adduser -G nginx -g www -d /usr/share/nginx/html/www www --system --shell=/bin/false
해당 명령은 다음과 같이 작동합니다:
- "www"라는 사용자를 생성합니다 (중간 텍스트 부분에 따라),
- 모든 파일을
/usr/share/nginx/html/www에 저장합니다, - 다음 그룹에 추가합니다: 보충적으로 "nginx", 주로 "www"로 설정합니다.
--system플래그는 사용자가 인간 사용자가 아닌 시스템에 예약된 사용자임을 나타냅니다. 다른 웹 사이트를 관리하기 위해 인간 사용자 계정을 생성하려면 별도의 가이드가 필요합니다.--shell=/bin/false는 누구도 "www" 사용자로 로그인을 시도할 수 없도록 합니다.
"nginx" 그룹은 실제로 매우 중요한 역할을 수행합니다. 이 그룹은 웹 서버가 "www" 사용자와 "www" 사용자 그룹에 속하는 파일을 읽고 수정할 수 있도록 합니다. 자세한 내용은 Rocky Linux의 사용자 관리 가이드에서 확인할 수 있습니다.
서버 루트 폴더 변경¶
새로운 멋진 사용자 계정을 갖게 되었으므로 nginx가 해당 폴더에서 웹 사이트 파일을 찾도록 설정해야 합니다. 즐겨 사용하는 텍스트 편집기를 다시 사용하십시오.
지금은 다음 명령을 실행하십시오:
sudo nano /etc/nginx/conf.d/default.conf
파일이 열리면 root /usr/share/nginx/html;과 비슷한 라인을 찾으세요. 이를 원하는 웹사이트 루트 폴더로 변경합니다. 예를 들어, root /usr/share/nginx/html/www; 로 변경하거나 (또는 저처럼 nginx를 컨테이너에서 실행 중인 경우 /home/www로 변경합니다.) 파일을 저장하고 닫은 다음 nginx 구성을 테스트하여 세미콜론을 누락하지 않았는지 등을 확인합니다.
nginx -t
다음과 같은 성공 메시지가 표시되면 모든 것이 올바르게 진행된 것입니다:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
그런 다음 다음 명령으로 서버에 소프트 재시작을 수행하십시오:
sudo systemctl reload nginx
참고 사항
소프트 재시작이 작동하지 않을 경우 다음 명령으로 nginx를 강제로 재시작할 수 있습니다:
sudo systemctl restart nginx
새 루트 폴더에 있는 HTML 파일은 이제 브라우저에서 탐색할 수 있어야 합니다.
파일 권한 변경¶
nginx가 웹사이트 디렉토리의 모든 파일을 읽고 쓰고 실행할 수 있도록 하려면 파일 권한을 올바르게 설정해야 합니다.
먼저, 루트 폴더의 모든 파일이 서버 사용자와 사용자 그룹에게 소유되도록 다음 명령을 실행합니다:
sudo chown -R www:www /usr/share/nginx/html/www
그리고 실제로 웹사이트를 탐색하려는 사용자가 페이지를 볼 수 있도록 다음 명령을 실행해야 합니다 (네, 세미콜론이 중요합니다):
sudo find /usr/share/nginx/html/www -type d -exec chmod 555 "{}" \;
sudo find /usr/share/nginx/html/www -type f -exec chmod 444 "{}" \;
That basically gives everyone the right to look at files on the server, but not modify them. 루트 사용자와 서버 사용자만이 수정할 수 있습니다.
사이트에 대한 SSL 인증서 가져오기¶
현재, nginx를 사용하여 SSL 인증서를 가져오는 방법에 대한 certbot을 사용한 SSL 인증서 생성 가이드가 일부 기본 지침으로 업데이트되었습니다. certbot 설치 및 인증서 생성에 대한 자세한 지침이 포함되어 있으므로 확인하시기 바랍니다.
인증서가 없으면 브라우저에서 사이트를 볼 수 없게 될 수도 있으므로 모든 사이트에 대해 인증서를 획득하는 것이 좋습니다.
추가 구성 옵션 및 가이드¶
- Nginx를 PHP와 특히 PHP-FPM과 함께 사용하는 방법을 알고 싶다면 Rocky Linux에서 PHP 설정 가이드를 확인해보세요.
- 여러 웹사이트를 위해 Nginx를 설정하는 방법을 배우고 싶다면 해당 주제에 대한 가이드를 참조하세요.
Rocky의 공식 저장소에서 안정 버전 설치¶
"stable" 브랜치의 nginx를 사용하려면 다음과 같이 진행하세요. 먼저, 운영 체제를 최신 상태로 업데이트합니다:
sudo dnf update
그런 다음 다음 명령을 사용하여 기본 저장소에서 사용 가능한 최신 nginx 버전을 찾습니다:
sudo dnf module list nginx
이렇게 하면 다음과 같은 목록이 표시됩니다:
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nginx 1.14 [d] common [d] nginx webserver
nginx 1.16 common [d] nginx webserver
nginx 1.18 common [d] nginx webserver
nginx 1.20 common [d] nginx webserver
리스트에서 가장 높은 숫자를 선택하고 다음과 같이 해당 모듈을 활성화합니다:
sudo dnf module enable nginx:1.20
이 작업을 수행하겠냐는 확인 메시지가 나타날 것이므로 일반적으로 Y를 선택합니다. 그런 다음 다음 명령을 사용하여 nginx를 설치합니다:
sudo dnf install nginx
그런 다음 서비스를 활성화하고 위에서 설명한 대로 서버를 구성할 수 있습니다.
참고 사항
이 경우, 기본 구성 파일은 /etc/nginx/nginx.conf에 있는 기본 nginx 구성 폴더에 있습니다. 루트 웹사이트 폴더는 동일합니다.
SELinux 규칙¶
강제 적용된 경우 nginx proxy_pass 지시문은 "502 Bad Gateway" 오류가 발생합니다.
개발 목적으로 setenforce를 비활성화할 수 있습니다.
sudo setenforce 0
또는 /var/log/audit/audit.log에서 nginx와 관련된 http_d 또는 다른 서비스를 활성화할 수 있습니다.
sudo setsebool httpd_can_network_connect 1 -P
결론¶
nginx의 기본 설치 및 구성은 최신 버전을 얻기 위해 해야 할 작업이 조금 복잡할 수 있지만 쉽습니다. 단계를 따르기만 하면 빠르게 사용할 수 있는 최고의 서버 옵션 중 하나를 구축할 수 있습니다.
이제 웹사이트를 구축하기만 하면 됩니다. 또 다른 10분 정도 걸릴까요? 웹 디자이너로서 조용히 웁니다
Author: Ezequiel Bruni
Contributors: Antoine Le Morvan, Steven Spencer