IT STUDY LOG

nginx Web Server Hands-on 본문

devops bootcamp 4/pair/team log

nginx Web Server Hands-on

roheerumi 2023. 3. 24. 17:28

#해결 과제

❔ HTTP 기반의 서버를 생성하는 소프트웨어인 nginx를 사용하여, 웹 서버(Web Server)를 생성하여 정적 웹페이지 호스팅을 따라 해보세요.

❔ 다음과 같은 구조 중에서, 정적 웹페이지 호스팅의 경우에는 HTML, CSS등의 정적 파일만 전달하면 되기 때문에, 보다 단순한 구조인 Client - Web Server의 구조를 가집니다.

❔ nginx 샘플 정적 파일을 호스팅 하는 과정을 따라해보며, 환경 설정 파일을 작성하는 방법과 지시어에 대해서 학습하세요.

 

 

#과제 항목별 진행 상황

💡 nginx 설치

  • 데비안 저장소 정보를 업데이트하십시오.
  • sudo apt-get update
  • NGINX 오픈 소스 패키지를 설치합니다. sudo apt-get install nginx
  • 설치를 확인합니다. sudo nginx -v nginx version: nginx/1.6.2

💡 정적 콘텐츠 호스팅하기

  • sudo find / -name nginx.conf : 파일 위치 파악
  • cd /etc/nginx : 해당 폴더로 이동
  • tree . : tree 확인
    • tree 설치 : apt-get install tree
    • tree 설치 확인 : tree --version

💡 Hands-On) 기본 샘플 페이지 테스트

  • 필수 구성 요소를 설치합니다.
  • sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
  • 패키지 진위 여부를 확인할 수 있도록 공식 nginx 서명 키를 가져옵니다. 키를 가져옵니다.
  • curl <https://nginx.org/keys/nginx_signing.key> | gpg --dearmor \\ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
  • 다운로드한 파일에 적절한 키가 포함되어 있는지 확인합니다.
  • gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg #출력에는 다음과 같이 전체 지문이 포함되어야 함, 지문이 다른 경우 파일을 제거573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
  • 안정적인 nginx 패키지에 대한 리포지토리를 설정하려면 다음 명령을 실행합니다.
  • echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \\ <http://nginx.org/packages/debian> `lsb_release -cs` nginx" \\ | sudo tee /etc/apt/sources.list.d/nginx.list
  • nginx 패키지를 사용하려면 대신 다음 명령을 실행하십시오.
  • echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \\ <http://nginx.org/packages/mainline/debian> `lsb_release -cs` nginx" \\ | sudo tee /etc/apt/sources.list.d/nginx.list
  • 배포 제공 패키지보다 패키지를 선호하도록 저장소 고정을 설정합니다.
  • echo -e "Package: *\\nPin: origin nginx.org\\nPin: release o=nginx\\nPin-Priority: 900\\n" \\ | sudo tee /etc/apt/preferences.d/99nginx
  • NGINX 패키지를 설치합니다.
  • sudo apt update sudo apt install nginx
  • NGINX 오픈 소스 시작:
  • sudo nginx
  • NGINX 오픈 소스가 실행 중인지 확인합니다.
  • curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.23.2
  • 브라우저에 localhost (= localhost:80)
    • 샘플페이지는 /var/www/html/index.nginx-debian.html

💡 Hands-On) conf 파일에 Server 블록 작성

  • /home/linux/Desktop/Git/index.html 경로에 해당 파일 생성
  • /etc/nginx/nginx.conf 파일에서 server 추가 (포트 추가와 index.html을 수정하기 위해)
    • http 안의 gzip on; 아래에 넣음
    server {
    	listen 10024;
    	server_name localhost;
    
    	location / {
    		root <index.html이_있는_경로>;
    		index index.html;
      }
    }
    
  • sudo nginx -s reload = nginx 다시 실행

  • 특정 경로에 index.html 파일 생성
<!DOCTYPE html>
<html>
<head>
<title>My Awesome Web</title>
</head>
<body>

<h1>Hello World</h1>
<p>This is for Codestates DevOps Bootcamp!</p>

</body>
</html>
  • nginx.conf 파일 수정
# nginx.conf 파일의 http 블럭에 server 관련 블럭 추가
$ sudo vim nginx.conf
$ sudo nginx -s reload
$ cat nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

 ... 중략 ...

	server {
		listen 10024; # port
		server_name localhost;

		location / {
			root /home/roheerumi/devops/nginx_study;
			index index.html;
		}
	}
}

브라우저로 localhost:10024 접속

#실습 자료

 

#TROUBLE SHOOTING LOG

📝 문제 1 : 실습 과제 중 local:10024 연결 시 index.html 파일을 읽어오지 못하고 403 forbidden error 발생

원인 : index.html 파일의 경로 관련 권한(퍼미션) 문제

정상 실행이 되었던 디렉토리 퍼미션 : drwxr-xr-x

접근 불가했던 디렉토리 퍼미션 : drwxr-x—-

 

해결 방안

방안 (1) nginx.conf 파일의 user를 www-data에서 root로 변경

-> root 권한으로 해당 서비스를 기동할 경우 보안상 이슈가 있을 수 있다는 문제점

방안 (2) 해당 파일이 위치한 디렉토리(해당 디렉토리 뿐 아니라 최상위 디렉토리부터)의 접근 권한을 변경

$ chmod 755 <해당 디렉토리 경로>

 

기억해둘 부분

디렉터리 vs 파일에서의 rwx 의미

  디렉토리 파일
r 디렉토리의 내용을 볼수 있는 권한 (ex) ls 읽기
w 디렉터리 내 파일이나 디렉터리를 생성, 삭제할 수 있는 권한 (ex) touch, mkdir, rmdir, rm 등 쓰기
x 디렉터리 안으로 이동할 수 있는 권한 (ex) cd 실행

'devops bootcamp 4 > pair/team log' 카테고리의 다른 글

Sprint - Cozstory WAS 개발  (0) 2023.03.28
Mini WAS 개발 hands-on  (0) 2023.03.28
CozStory 클라이언트 호스팅  (0) 2023.03.27
블로그 애플리케이션 REST API 작성  (0) 2023.03.23
simple git log  (0) 2023.03.21
Comments