CentOS에 Nginx 설치하기

minkyung·2023년 12월 7일
0
post-thumbnail

🏃 start

프로젝트 배포를 위해 인스턴스를 받았는데 회사에서 주로 사용하고 있는 CentOS 서버로 받았다. 나한테는 Ubuntu가 서버 중에서는 그나마 익숙했어서 낯선 서버에 오들바들 떨기는 했는데, 업무하는 겸 공부하는 겸 작성해본다.


🧑‍💻 what is CentOS

CentOS vs 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를 설치할 때나 가이드라인을 따를 때 사용하고 있는 서버가 어떤 기반을 가지고 있는지 꼭꼭 체크하자!


differences

  1. 배포판의 기반:
    CentOS: RHEL(Red Hat Enterprise Linux)을 기반으로 하며, 레드햇 계열의 엔터프라이즈 환경과의 호환성을 갖추고 있습니다.
    Ubuntu: Debian을 기반으로 하며, Debian 계열의 운영체제로서 사용자 중심의 데스크톱 및 서버 환경을 제공합니다.

  2. 패키지 관리 시스템:
    CentOS: YUM (Yellowdog Updater, Modified) 패키지 관리자를 사용합니다.
    Ubuntu: APT (Advanced Package Tool) 패키지 관리자를 사용합니다.

  3. 버전 및 업데이트 주기:
    CentOS: 안정성과 신뢰성을 중시하며, 주로 엔터프라이즈 환경에서 사용됩니다. 업데이트 주기가 더 길고, 새로운 기능보다는 안정성을 우선시합니다.
    Ubuntu: 비교적 짧은 업데이트 주기를 가지며, 최신 소프트웨어 및 기술을 빠르게 적용하는 경향이 있습니다. 개발자와 데스크톱 사용자를 대상으로 하는 것이 특징입니다.

  4. 사용자 인터페이스 및 커뮤니티:
    CentOS: 주로 서버 환경에서 사용되며, 그에 따라 CLI (Command Line Interface) 위주의 환경을 가지고 있습니다.
    Ubuntu: 데스크톱 및 서버 환경에서 모두 사용되며, 사용자 친화적인 GUI (Graphical User Interface)와 CLI를 모두 제공합니다. 또한, 대규모의 활발한 커뮤니티가 있습니다.

  5. 라이선스 및 비용:
    CentOS: 오픈 소스이며 무료로 제공됩니다. RHEL과 달리 상용 지원이 아닌 커뮤니티 지원만을 받을 수 있습니다.
    Ubuntu: 무료로 제공되며, 커뮤니티 버전과 기업을 위한 유료 지원을 제공하는 서버 버전이 있습니다.

선택은 사용하려는 환경, 요구 사항, 개인 선호도 등에 따라 다를 수 있습니다. CentOS는 주로 서버 및 엔터프라이즈 환경에서 사용되는 반면, Ubuntu는 다양한 환경에서 사용되며 특히 데스크톱 및 개발자 커뮤니티에서 널리 사용됩니다.

✍︎

할 수 있는 일, 돌아가는 원리는 크게 다르지 않지만
명령어, 디렉토리 구조 등이 다르기 때문에
하나의 회사, 혹은 하나의 서비스에서 여러 종류의 서버를 사용하는 것은
디버깅, 유지보수 측면에서 지양한다.


🔑 setting pem key

pem 키의 파일 권한 확인하고 바꿔주기!
chmod 600 filename : filename에 대한 권한을 나(사용자)에게만 읽기쓰기 권한으로 변경

⤷ 맥 터미널 권한 설정하기



💾 install Nginx

⤷ nginx.org installation instructions / RHEL

  1. yum-utils 설치 후 /etc/yum.repos.d/nginx.repo 에 안내된 내용 추가

    1. sudo yum install yum-utils
    2. sudo vi /etc/yum.repos.d/nginx.repo
  2. 기본 설정으로는 stable 버전의 nginx 패키지가 설치됨.
    만약 mainline 버전을 설치하고 싶다면 아래 명령어로 config 변경
    sudo yum-config-manager --enable nginx-mainline

⤷ 패키지 관리자를 통해 NGINX 최신 버전(Mainline/Stable) 설치하기

Mainline (메인라인) 버전:
Mainline 버전은 Nginx의 최신 기능과 개선 사항이 포함된 최신 릴리스를 의미합니다.
새로운 기능이나 실험적인 변경 사항이 빠르게 적용되는 버전입니다.
최신 기능을 경험하고 테스트하려는 사용자 또는 개발자를 위한 릴리스입니다.

Stable (스테이블) 버전:
Stable 버전은 더 검증되고 안정된 릴리스입니다.
특정 버전에서 발생한 버그를 수정하고, 보안 패치를 추가한 안정화된 버전입니다.
프로덕션 환경에서 안정성이 우선되는 경우에 권장되는 릴리스입니다.

  1. nginx 설치
    sudo yum install nginx


⚙️ setting Nginx config

Nginx를 설치하고나면 /etc/nginx/nginx.confNginx 자체의 기본 설정 파일이, /etc/nginx/conf.d/default.conf가상 호스트 설정 파일이 기본 설정 값으로 생성된다.

✍︎

하나의 Nginx에서 여러개의 호스트(사이트,프로젝트)를 실행시킬 수 있기 때문에
여러 개의 config 파일을 관리해야한다.

이 때 호스트이름.conf 로 관리하는 것이 일반적이며,
그래서 Nginx 설정 파일에 include /etc/nginx/conf.d/*.conf 설정이 있다.
etc/nginx/conf.d 디렉토리 하위에 있는 config 확장자 파일을 모두 포함한다는 뜻!

nginx.cof 예시

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/*;
}
  1. user: Nginx 프로세스가 실행될 사용자를 지정합니다.
  2. worker_processes: Nginx가 사용할 워커 프로세스의 수를 지정합니다.
  3. events: 워커 프로세스가 어떻게 이벤트를 처리할지에 대한 설정을 담고 있습니다.
  4. http: HTTP 서버의 전반적인 설정을 담고 있습니다.
  5. sendfile: 정적 파일 전송을 위해 sendfile을 사용할지 여부를 결정합니다.
  6. tcp_nopush, tcp_nodelay: TCP 송수신에 관련된 설정입니다.
  7. keepalive_timeout: 클라이언트와의 Keep-Alive 연결 시간을 설정합니다.
  8. types_hash_max_size: MIME 타입 해시 테이블의 최대 크기를 설정합니다.
  9. include /etc/nginx/mime.types: MIME 타입 정의를 포함합니다.
  10. default_type: 기본 MIME 타입을 설정합니다.
  11. access_log, error_log: 액세스 로그와 에러 로그의 위치를 지정합니다.
  12. gzip: Gzip 압축 사용 여부를 설정합니다.
  13. include /etc/nginx/conf.d/.conf; 및 include /etc/nginx/sites-enabled/;: 추가적인 설정 파일을 포함합니다.

default.conf 예시

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;
}
  1. listen: Nginx가 요청을 받을 포트를 지정합니다. 여기서는 80 포트로 설정되어 있습니다.
  2. server_name: 가상 호스트에 대한 도메인을 설정합니다. 여기서는 언더스코어(_)를 사용하여 기본 서버를 나타냅니다.
  3. root: 웹 문서 루트 디렉터리를 지정합니다.
  4. index: 디렉터리에서 인덱스 파일로 사용할 파일을 지정합니다.
  5. location: 특정 URL 경로에 대한 처리 규칙을 정의합니다.
  6. error_page: 오류 페이지에 대한 경로를 지정합니다.
  7. location ~ .php$: PHP 파일에 대한 처리를 설정합니다. 이 부분은 PHP가 사용되는 경우에만 필요합니다.
  8. location ~ /.ht: .ht 파일에 대한 액세스를 차단합니다.
  9. access_log, error_log: 액세스 로그와 에러 로그의 경로를 지정합니다.

위의 설정은 기본적인 예시이며, 상황에 따라서 실제 환경에 맞게 수정해야 할 수 있습니다. Nginx 설정을 수정한 후에는 nginx -t 명령을 사용하여 설정 파일의 유효성을 검사하고, 변경된 설정을 반영하기 위해 Nginx를 재시작 systemctl restart nginx 해야 합니다.



💮 check browser

systemctl status nginx 로 Ngnix가 active 상태인지 체크합니다.

브라우저에서 인스턴스 ip로 접속했을 때 아래 화면이 뜨면 됩니다!

profile
프론트엔드 개발자

0개의 댓글