ubuntu 22.04에 Nginx 설치하기

codeing999·2022년 9월 15일
3

ubuntu

목록 보기
2/2

참고 링크 : https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04#step-5-%E2%80%93-setting-up-server-blocks-

소개

Nginx는 세계에서 가장 유명한 웹서버 중 하나이다.

스텝1. nginx 설치

sudo apt update
sudo apt install nginx

스텝2. 방화벽 조정

nginx는 설치될 때 ufw에 자신을 서비스로서 등록한다.

sudo ufw app list

를 입력하면

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

이와 같이 nginx와 관련된 3개의 프로필이 있는 것이 보인다.
Nginx Full : 이 프로필은 80포트와 443 포트를 모두 연다.
Nginx HTTP : 80포트만 연다
Nginx HTTPS : 443포트만 연다.

이중에서 지금은 일단 80포트만 허용해본다.

sudo ufw allow 'Nginx HTTP'

이 변경을 다음을 통해 확인한다.

sudo ufw status

inactive라고 뜨면

sudo ufw enable

로 ufw 키고 하기.

혹시 몰라서 튜토리얼 대로 openssh까지 같이 allow함.

스텝3 : 내 웹서버 체크

서비스가 러닝하고 있는지 다음 명령어로 체크

systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-09-14 19:28:52 UTC; 8h ago
       Docs: man:nginx(8)
   Main PID: 82319 (nginx)
      Tasks: 2 (limit: 1143)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─82319 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─82320 nginx: worker process

이와 같이 뜨면 성공적으로 시작된 것.
하지만 가장 좋은 테스트방법은 실제로 요청을 날려보는 것.

ip 주소를 모른다면 다음 명령어를 치면 내 ip주소를 출력해줌

curl -4 icanhazip.com
http://your_server_ip

ip를 알아내면 위 형식으로 브라우저에 입력해보기.

나의 경우 추가로 한 것

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

나는 일단 바로는 안되는데 아마 ec2 띄웠을 때 위 룰을 iptable에 추가했어서 그런 것 같다.
일단 그 룰을 삭제하는 것부터 해야한다.
참고 자료 : https://www.cyberciti.biz/faq/linux-iptables-delete-prerouting-rule-command/

sudo iptables -t nat -v -L PREROUTING -n --line-number

위 명령어를 치면 프리라우팅 룰 리스트를 볼 수 있다.

-t nat 는 ip테이블들 중에 nat 테이블을 지정하는 것이고.
-L이 리스트를 출력하겠다는 것. 뒤에 프리라우팅 붙인 거는 그중에서도 프리라우팅 룰만 보겠다는 것.
--line-number는 리스트 앞에 숫자를 붙여서 출력한다는 것. 이 번호를 통해 지울 수 있다.
root@ip-172-31-47-239:/home/ubuntu# sudo iptables -t nat -v -L PREROUTING -n --line-number
Chain PREROUTING (policy ACCEPT 726 packets, 38204 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     2262  118K REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 3000

이와 같이 내가 만들었던 룰이 잘 나왔고.

root@ip-172-31-47-239:/home/ubuntu# sudo iptables -t nat -D PREROUTING 1
root@ip-172-31-47-239:/home/ubuntu# sudo iptables -t nat -v -L PREROUTING -n --line-number
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

위 첫번째 줄 명령어로 그 룰을 지웠다.
그뒤 다시 리스트 출력해서 삭제된 것 확인.

이제 다시 돌아가서 내 ip주소로 접속해보면

이와같이 nginx 페이지가 잘 뜬다.

스텝4 : Nginx 프로세스 관리

기본적 관리 명령어들

sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl restart nginx

//만약 설정 변경을 만들고만 싶다면 nginx는 다음 명령어를 통해 연결 드랍 없이 리로드 할 수 있다. 
sudo systemctl reload nginx

//디폴트로, Nginx는 서버가 부팅될 때 자동으로 스타트 되도록 설정되어 있다. 이것을 원하지 않으면 다음 명령어로 이 행동을 disable할 수 있다.
sudo systemctl disable nginx

//다시 위 설정 enable하기
sudo systemctl enable nginx

스텝5 : 서버 블럭 세팅하기

초반 생략

sudo nano /etc/nginx/sites-available/your_domain

위와 같은 경로에 내 도메인으로 파일을 nano로 만들어 아래 내용을 입력한다.
나는 nano말고 vi로 하긴 했다.

server {

	 listen 80;
   	 listen [::]:80;
	
    server_name your_domain www.your_domain;
	
	location / {
    		proxy_pass http://127.0.0.1:3000;
  	}

}

파일이름이 도메인이니까 혹시 저 줄을 입력안해도 통하지않을까해서 없애봤는데 그러면 안 먹힘.

그리고 이 파일을 /etc/nginx/sites-enabled/ 경로에 링크를 시킨다.
Nginx가 시작될때 읽는 곳이 여기라고 한다. 즉, 위에 작성한 건 나중에 sites-enabled에서 지우거나 링크함으로써 편하게 관리하기 위해서 따로 만든 것.

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

다음으로 이 파일을 변경해준다.

sudo nano /etc/nginx/nginx.conf

server_names_hash_bucket_size 64;
해당 구문 앞에 붙어있는 #을 제거하여 주석처리 취소

sudo nginx -t

이 명령어로 문법 오류가 없는지 확인.
나는 다음과 같이 오류 없다고 나왔다.

root@ip-172-31-47-239:/etc/nginx/sites-available# sudo 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 restart nginx

잘 요청이 되는 것을 확인.
이제 다음엔 https를 설정하려고 한다.

profile
코딩 공부 ing..

0개의 댓글