How to install latest official Nginx on Centos 8 / RHEL 8, instead using Nginx from Centos 8 or RHEL 8 repository.
Currently Centos / RHEL 8 repo using too old version of Nginx 1.14.1.
If you already install Nginx 1.14.1 remove it first
# dnf remove nginx
First install dnf-utils
# dnf install dnf-utils
Create file in /etc/yum.repos.d/nginx.repo and paste code below
[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
By default, the repository for stable nginx packages is used. If you would like to use mainline nginx packages, run the following command:
sudo yum-config-manager --enable nginx-mainline
If you running on production server, choose Nginx stable version.
To install nginx, run the following command:
# dnf install nginx
When prompted to accept the GPG key, accept it.
Enable Nginx start up and start Nginx.
# systemctl enable nginx
## systemctl start nginx코드를 입력하세요
1단계: 온라인 환경에서 Nginx 및 의존성 RPM 패키지 다운로드
먼저, 인터넷에 연결된 동일한 RHEL 8.6 시스템에서 필요한 파일들을 모두 다운로드해야 합니다.
Nginx 모듈 스트림 활성화:
RHEL 8에서는 AppStream 리포지토리를 통해 Nginx를 제공합니다. 먼저 원하는 Nginx 버전을 활성화합니다. 일반적으로 기본 버전을 사용합니다.
[appuser@apppkg-server nginx-rpms]$ sudo dnf download --resolve --destdir=. nginx
[appuser@apppkg-server nginx-rpms]$ ll
total 988
-rw-r--r--. 1 root root 1011100 Sep 14 10:21 nginx-1.29.1-1.el8.ngx.x86_64.rpm
[appuser@appdev nginx-rpms]$ sudo dnf install -y *.rpm
Failed to set locale, defaulting to C.UTF-8
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Dependencies resolved.
==============================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================
Installing:
nginx x86_64 1:1.29.1-1.el8.ngx @commandline 987 k
Transaction Summary
==============================================================================================================================
Install 1 Package
Total size: 987 k
Installed size: 3.3 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: nginx-1:1.29.1-1.el8.ngx.x86_64 1/1
Installing : nginx-1:1.29.1-1.el8.ngx.x86_64 1/1
Running scriptlet: nginx-1:1.29.1-1.el8.ngx.x86_64 1/1
----------------------------------------------------------------------
Thanks for using nginx!
Please find the official documentation for nginx here:
* https://nginx.org/en/docs/
Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* https://nginx.org/en/support.html
Commercial subscriptions for nginx are available on:
* https://nginx.com/products/
----------------------------------------------------------------------
Verifying : nginx-1:1.29.1-1.el8.ngx.x86_64 1/1
Installed products updated.
Installed:
nginx-1:1.29.1-1.el8.ngx.x86_64
Complete!
Nginx 서비스 활성화 및 실행
설치가 성공적으로 완료되면, Nginx 서비스를 시스템에 등록하고 시작합니다.
Nginx 서비스 시작:
sudo systemctl start nginx
Nginx 서비스 상태 확인:
sudo systemctl status nginx
active (running) 상태가 표시되면 정상적으로 실행된 것입니다.
부팅 시 자동 실행 설정 (권장):
서버가 재부팅되어도 Nginx가 자동으로 시작되도록 설정합니다.
sudo systemctl enable nginx
방화벽 설정:
외부에서 Nginx 웹 서버에 접속할 수 있도록 방화벽에서 HTTP(80) 및 HTTPS(443) 포트를 열어줍니다.
# HTTP (80번 포트) 허용
sudo firewall-cmd --permanent --add-service=http
# HTTPS (443번 포트) 허용
sudo firewall-cmd --permanent --add-service=https
# 방화벽 설정 다시 불러오기
sudo firewall-cmd --reload
이제 웹 브라우저에서 오프라인 서버의 IP 주소로 접속하면 Nginx 기본 환영 페이지가 나타나는 것을 확인할 수 있습니다.
작업 디렉토리
Linux (Ubuntu, CentOS, RHEL 등):
/etc/nginx/ 디렉터리
AI 개요
Nginx는 운영체제에 따라 기본적으로 다음과 같은 위치에 설치됩니다:
Linux (Ubuntu, CentOS, RHEL 등):
/etc/nginx/ 디렉터리
macOS (Homebrew 사용 시):
/usr/local/etc/nginx/
Windows:
설치 시 지정한 위치 (예: {설치 디렉터리}\nginx 형태)
설치 경로 확인 방법
Linux/macOS: 터미널에서 ls /etc/nginx 또는 ls /usr/local/etc/nginx와 같은 명령어를 입력하여 디렉터리 구조를 확인할 수 있습니다.
Windows: 설치 시 지정한 폴더를 직접 찾아보면 Nginx 실행 파일(.exe)과 설정 파일들이 들어있는 것을 확인할 수 있습니다.
주요 설정 파일 위치 (Linux/macOS 기준)
nginx.conf:
Nginx의 주 설정 파일로, 모든 설정이 이 파일에 포함됩니다.
/etc/nginx/conf.d/:
사용자 정의 설정 파일을 넣는 디렉터리입니다.
/etc/nginx/sites-available/ 및 /etc/nginx/sites-enabled/:
사이트별 설정을 분리하여 관리할 때 사용되는 디렉터리입니다.
Nginx 설치 경로가 중요한 이유
설정 변경:
Nginx의 설정을 변경하려면 해당 경로로 이동하여 nginx.conf와 같은 설정 파일을 수정해야 합니다.
웹사이트 콘텐츠:
웹사이트의 정적 파일(HTML, CSS, 이미지 등)은 일반적으로 /usr/share/nginx/html/와 같은 디렉터리에 위치하며, 이 경로를 통해 Nginx는 콘텐츠를 제공합니다.
로그 파일:
Nginx의 로그 파일 역시 /var/log/nginx/와 같이 특정 디렉터리에 저장되므로, 문제 해결 시 이 경로를 확인해야 합니다.
## 1. 파일 제공 디렉토리 생성 및 파일 준비
먼저, 파일 서버로 사용할 디렉토리를 만들고, 그 안에 공유할 파일들을 넣어주세요. 여기서는 예시로 /var/www/files 디렉토리를 사용하겠습니다.
Bash
# 파일 서버로 사용할 디렉토리 생성
sudo mkdir -p /var/www/files
# Nginx가 해당 디렉토리를 읽을 수 있도록 권한 부여
sudo chown -R nginx:nginx /var/www/files
# 테스트용 파일 생성 (또는 원하는 파일을 복사)
sudo touch /var/www/files/test-file-1.txt
sudo touch /var/www/files/sample-document.pdf
## 2. Nginx 설정 파일 수정
다음으로 Nginx 설정 파일을 수정하여 파일 서버 기능을 하도록 만듭니다. 설정은 보통 /etc/nginx/conf.d/ 디렉토리 안에 .conf 확장자로 된 새 파일을 만들어 관리하는 것이 좋습니다.
새 설정 파일 생성:
/etc/nginx/conf.d/file-server.conf 라는 이름으로 새 설정 파일을 엽니다.
Bash
sudo vi /etc/nginx/conf.d/file-server.conf
설정 내용 작성:
아래 내용을 복사하여 붙여넣으세요. 이 설정은 8080 포트를 통해 /var/www/files 디렉토리의 내용을 보여주는 파일 서버를 만듭니다.
Nginx
server {
# 8080 포트를 리슨합니다. 원하는 포트로 변경 가능합니다.
listen 8080;
server_name your_server_ip_or_domain; # 서버 IP 주소나 도메인을 입력하세요.
# 파일 서버의 루트 디렉토리를 지정합니다.
root /var/www/files;
location / {
# autoindex on; -> 이 부분이 핵심입니다. 디렉토리의 파일 목록을 보여줍니다.
autoindex on;
# autoindex_exact_size off; -> 파일 크기를 KB, MB, GB 단위로 보기 좋게 표시합니다. (기본값)
autoindex_exact_size off;
# autoindex_localtime on; -> 파일 시간을 서버의 현지 시간으로 보여줍니다.
autoindex_localtime on;
}
}
listen 8080;: 파일 서버가 사용할 포트입니다. 다른 서비스와 겹치지 않는 포트로 자유롭게 변경할 수 있습니다.
root /var/www/files;: 공유할 파일들이 있는 최상위 디렉토리를 지정합니다.
location / { ... }: 루트 URL(/)에 접속했을 때의 동작을 정의합니다.
autoindex on;: 이 설정이 바로 디렉토리 리스팅 기능을 활성화하는 핵심 지시어입니다. 만약 index.html 파일이 있다면 그 파일을 먼저 보여주고, 없을 경우 파일 목록을 보여줍니다.
## 3. Nginx 설정 적용 및 방화벽 설정
설정 파일 작성을 완료했다면, Nginx에 변경 사항을 적용하고 방화벽을 열어줍니다.
Nginx 설정 문법 검사:
설정 파일에 오타가 없는지 확인합니다.
Bash
sudo nginx -t
syntax is ok 와 test is successful 메시지가 나오면 정상입니다.
Nginx 재시작:
설정을 적용하기 위해 Nginx를 재시작합니다.
Bash
sudo systemctl restart nginx
방화벽 포트 열기:
위 설정에서 사용한 포트(예: 8080)를 방화벽에서 허용해 주어야 외부에서 접속할 수 있습니다.
Bash
# 8080/tcp 포트를 영구적으로 허용
sudo firewall-cmd --permanent --add-port=8080/tcp
# 방화벽 설정 다시 불러오기
sudo firewall-cmd --reload
## 4. 파일 서버 접속 확인
이제 웹 브라우저를 열고 http://<서버_IP_주소>:8080 으로 접속해 보세요.
위 그림처럼 /var/www/files 디렉토리에 넣어둔 파일들의 목록이 보이고, 각 파일을 클릭하면 바로 다운로드할 수 있습니다.
Nginx | bind() to 0.0.0.0:8000 failed (13: Permission denied)
개미606 2022. 3. 25. 13:48
SELinux가 활성화 되어 있는지 먼저 확인하면 좋다.
enforcing 상태라면 아래 오류가 발생할 것이다..
Nginx를 실행하니 bind() to 0.0.0.0:8000 failed (13: Permission denied) 해당 오류가 확인됐다.
8000포트에 권한이 없어서 발생한 오류로, semanage를 이용해 http 포트를 추가해주어야 한다.
먼저 http port로 설정된 값들을 확인한 뒤, 사용하려는 포트가 없다면 추가해준다.
# semanage port -l | grep http_port_t
# semanage port -a -t http_port_t -p tcp 8000
Modifying SELinux Settings for Full NGINX and NGINX Plus Functionality
When Security-Enhanced Linux (SELinux) is enabled for Red Hat Enterprise Linux (RHEL) and related distros, its default settings prevent NGINX and NGINX Plus from performing some operations. This article explains how to modify SELinux settings to permit ful
www.nginx.com
nginx: [emerg] bind() to 0.0.0.0:9070 failed (13: Permission denied) 오류는 Nginx가 9070번 포트에서 바인딩(연결)하려 했으나, 해당 포트 사용 권한이 없어 발생하는 문제입니다. 이 문제를 해결하려면 다음과 같은 방법들을 시도해 볼 수 있습니다:
1. SELinux 권한 확인 및 추가 (RHEL/CentOS 계열)
SELinux 상태 확인:
sestatus 명령어로 SELinux가 활성화되어 있는지 확인합니다.
semanage를 사용하여 포트 추가:
semanage port -l | grep http_port_t 명령어로 현재 http_port_t로 등록된 포트 목록을 확인하고, 9070번 포트가 없으면 sudo semanage port -a -t http_port_t -p tcp 9070 명령어로 추가합니다.
SELinux 비활성화 (임시 방편):
SELinux를 임시로 비활성화하려면 sudo setenforce 0 명령어를 사용할 수 있습니다.
2. 포트 권한 확인 및 실행 사용자 변경
저수준 포트 사용 여부 확인:
1024번 이하의 포트는 특별한 권한이 필요하므로, 9070번이 이 범위에 속하는지 확인합니다.
Nginx 실행 사용자 변경:
Nginx가 root 권한이 아닌 다른 사용자로 실행되고 있다면, nginx.conf 설정 파일에서 user 지시자를 확인하여 적절한 사용자로 변경하거나 해당 포트(9070)를 사용할 수 있도록 권한을 부여해야 합니다.
3. 포트 충돌 확인
sudo netstat -tulnp | grep 9070 또는 sudo ss -tulnp | grep 9070 명령어로 9070번 포트를 이미 사용하고 있는 다른 프로세스가 있는지 확인합니다. 이미 다른 프로세스가 사용 중이라면 해당 프로세스를 중지시키거나 다른 포트 번호를 사용해야 합니다.
4. Docker 환경에서의 문제 해결
Docker 환경에서 이 문제가 발생한다면, Docker 컨테이너에 할당된 포트 매핑이 올바른지 확인합니다. Dockerfile 또는 docker run 명령어에서 포트 매핑이 제대로 설정되었는지 확인하고, 0.0.0.0 대신 127.0.0.1 등으로 변경하여 시도해 볼 수 있습니다.
5. Nginx 설정 파일 확인
listen 지시자에 9070으로 설정되어 있는지 Nginx 설정 파일 (예: /etc/nginx/nginx.conf 또는 /etc/nginx/sites-available/default)을 확인하고, 올바르게 설정되었는지 검토합니다.