프로젝트 배포를 위해 인스턴스를 받았는데 회사에서 주로 사용하고 있는 CentOS 서버로 받았다. 나한테는 Ubuntu가 서버 중에서는 그나마 익숙했어서 낯선 서버에 오들바들 떨기는 했는데, 업무하는 겸 공부하는 겸 작성해본다.
CentOS
CentOS는 Community ENTerprise Operating System의 약자로, 레드햇 엔터프라이즈 리눅스 (Red Hat Enterprise Linux, RHEL)을 기반으로 하는 오픈 소스 리눅스 배포판입니다. CentOS는 RHEL의 소스 코드를 기반으로 하며, RHEL과 거의 동일한 기능을 제공하지만 무료로 제공됩니다.
CentOS는 기업 및 개발자들이 안정적이고 신뢰성 있는 서버 환경을 구축할 수 있도록 설계되었습니다. RHEL과 동일한 기능과 패키지를 제공하므로, RHEL에서 제공하는 엔터프라이즈 레벨의 지원이 필요하지 않는 경우 CentOS를 선택할 수 있습니다. CentOS는 서버 운영체제로 많이 사용되며, 웹 서버, 데이터베이스 서버, 네트워크 서버 등 다양한 용도로 활용됩니다.
Ubuntu
Ubuntu는 데비안(Debian)을 기반으로 한 데스크톱 및 서버 용도의 오픈 소스 리눅스 배포판입니다. Canonical Ltd.에 의해 개발되고 유지보수되며, 사용자 친화적인 환경과 다양한 소프트웨어 패키지, 강력한 커뮤니티 지원을 특징으로 합니다.
Ubuntu는 다양한 데스크톱 환경을 지원하며, 그 중 GNOME이 기본적으로 제공됩니다. 데스크톱 버전인 Ubuntu Desktop은 사용자가 쉽게 사용할 수 있는 그래픽 사용자 인터페이스를 제공하며, 일반적인 데스크톱 및 노트북 컴퓨팅 환경에서 많이 사용됩니다.
또한, Ubuntu Server는 서버 환경에서 사용되며, 안정성, 보안성, 확장성 등을 강조하고 있습니다. Ubuntu Server는 다양한 서버 응용 프로그램 및 서비스를 호스팅하는 데 이상적이며, 클라우드 환경에서도 많이 사용됩니다.
Ubuntu는 무료로 제공되며, 강력한 패키지 관리 시스템을 통해 다양한 소프트웨어를 손쉽게 설치, 업데이트할 수 있습니다. Ubuntu는 개발자, 기업, 개인 사용자 등 다양한 환경에서 널리 사용되고 있습니다.
✍︎
그래서 nginx를 설치할 때나 가이드라인을 따를 때 사용하고 있는 서버가 어떤 기반을 가지고 있는지 꼭꼭 체크하자!
배포판의 기반:
CentOS: RHEL(Red Hat Enterprise Linux)을 기반으로 하며, 레드햇 계열의 엔터프라이즈 환경과의 호환성을 갖추고 있습니다.
Ubuntu: Debian을 기반으로 하며, Debian 계열의 운영체제로서 사용자 중심의 데스크톱 및 서버 환경을 제공합니다.
패키지 관리 시스템:
CentOS: YUM (Yellowdog Updater, Modified) 패키지 관리자를 사용합니다.
Ubuntu: APT (Advanced Package Tool) 패키지 관리자를 사용합니다.
버전 및 업데이트 주기:
CentOS: 안정성과 신뢰성을 중시하며, 주로 엔터프라이즈 환경에서 사용됩니다. 업데이트 주기가 더 길고, 새로운 기능보다는 안정성을 우선시합니다.
Ubuntu: 비교적 짧은 업데이트 주기를 가지며, 최신 소프트웨어 및 기술을 빠르게 적용하는 경향이 있습니다. 개발자와 데스크톱 사용자를 대상으로 하는 것이 특징입니다.
사용자 인터페이스 및 커뮤니티:
CentOS: 주로 서버 환경에서 사용되며, 그에 따라 CLI (Command Line Interface) 위주의 환경을 가지고 있습니다.
Ubuntu: 데스크톱 및 서버 환경에서 모두 사용되며, 사용자 친화적인 GUI (Graphical User Interface)와 CLI를 모두 제공합니다. 또한, 대규모의 활발한 커뮤니티가 있습니다.
라이선스 및 비용:
CentOS: 오픈 소스이며 무료로 제공됩니다. RHEL과 달리 상용 지원이 아닌 커뮤니티 지원만을 받을 수 있습니다.
Ubuntu: 무료로 제공되며, 커뮤니티 버전과 기업을 위한 유료 지원을 제공하는 서버 버전이 있습니다.
선택은 사용하려는 환경, 요구 사항, 개인 선호도 등에 따라 다를 수 있습니다. CentOS는 주로 서버 및 엔터프라이즈 환경에서 사용되는 반면, Ubuntu는 다양한 환경에서 사용되며 특히 데스크톱 및 개발자 커뮤니티에서 널리 사용됩니다.
✍︎
할 수 있는 일, 돌아가는 원리는 크게 다르지 않지만
명령어, 디렉토리 구조 등이 다르기 때문에
하나의 회사, 혹은 하나의 서비스에서 여러 종류의 서버를 사용하는 것은
디버깅, 유지보수 측면에서 지양한다.
pem 키의 파일 권한 확인하고 바꿔주기!
chmod 600 filename
: filename에 대한 권한을 나(사용자)에게만 읽기쓰기 권한으로 변경
⤷ nginx.org installation instructions / RHEL
yum-utils
설치 후 /etc/yum.repos.d/nginx.repo
에 안내된 내용 추가
sudo yum install yum-utils
sudo vi /etc/yum.repos.d/nginx.repo
기본 설정으로는 stable 버전의 nginx 패키지가 설치됨.
만약 mainline 버전을 설치하고 싶다면 아래 명령어로 config 변경
sudo yum-config-manager --enable nginx-mainline
⤷ 패키지 관리자를 통해 NGINX 최신 버전(Mainline/Stable) 설치하기
Mainline (메인라인) 버전:
Mainline 버전은 Nginx의 최신 기능과 개선 사항이 포함된 최신 릴리스를 의미합니다.
새로운 기능이나 실험적인 변경 사항이 빠르게 적용되는 버전입니다.
최신 기능을 경험하고 테스트하려는 사용자 또는 개발자를 위한 릴리스입니다.Stable (스테이블) 버전:
Stable 버전은 더 검증되고 안정된 릴리스입니다.
특정 버전에서 발생한 버그를 수정하고, 보안 패치를 추가한 안정화된 버전입니다.
프로덕션 환경에서 안정성이 우선되는 경우에 권장되는 릴리스입니다.
sudo yum install nginx
Nginx를 설치하고나면 /etc/nginx/nginx.conf
에 Nginx 자체의 기본 설정 파일이, /etc/nginx/conf.d/default.conf
에 가상 호스트 설정 파일이 기본 설정 값으로 생성된다.
✍︎
하나의 Nginx에서 여러개의 호스트(사이트,프로젝트)를 실행시킬 수 있기 때문에
여러 개의 config 파일을 관리해야한다.이 때
호스트이름.conf
로 관리하는 것이 일반적이며,
그래서 Nginx 설정 파일에include /etc/nginx/conf.d/*.conf
설정이 있다.
etc/nginx/conf.d
디렉토리 하위에 있는config
확장자 파일을 모두 포함한다는 뜻!
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
default config
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
chatGPT 버전 default config
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
위의 설정은 기본적인 예시이며, 상황에 따라서 실제 환경에 맞게 수정해야 할 수 있습니다. Nginx 설정을 수정한 후에는 nginx -t
명령을 사용하여 설정 파일의 유효성을 검사하고, 변경된 설정을 반영하기 위해 Nginx를 재시작 systemctl restart nginx
해야 합니다.
systemctl status nginx
로 Ngnix가 active 상태인지 체크합니다.
브라우저에서 인스턴스 ip로 접속했을 때 아래 화면이 뜨면 됩니다!