Apache 와 nginx웹서버 이해

이진영·2022년 10월 10일
0

Docker

목록 보기
10/10
post-thumbnail

생성일: 2022년 2월 20일 오후 8:03
태그: nginx

  1. 웹서버

    • 웹서버는 HTTP요청을 읽어서, 응답을 해주는 프로그램
    • 그 중 apache / nginx를 사용함
  2. Apache 구동방식

    • apache는 꾸준히 성능을 개선하고 있으며, 다음과 같은 두 가지 기본적인 방식을 지원함
      • Prefork MPM (Multi Processing module)
        • HTTP요청이 올 때마다, 프로세스를 복제하여, 각각 별도 프로세스에서 해당 HTTP요청 처리
      • Worker MPM (Multi Processing module)
        • 하나의 HTTP연결 후 , 여러 요청을 처리하기 위해, 복제된 프로세스 내에서 여러 쓰레드를 생성하여, 여러 HTTP요청을 처리하는 방식
  3. Nginx 구동 방식

    • Event Driven방식
      • 하나의 프로세스로 동작하여, HTTP 요청을 event로 비동기식으로 처리함

        • 대부분의 HTTP응답은 결국 HTML파일을 제공하는 것이므로, IO작업
        • 따라서, IO작업으로 EVENT를 포워딩하고, 요청 순이 아닌 요청이 끝난 순으로 처리함
      • HTTP요청마다, 프로세스든 쓰레드든 생성이 필요없으므로, 시스템자원 관리에 장점이 있음

        단, 웹서버는 다양한 추가 기능과 함께 동작하므로, 종합적인 성능에는 큰 차이를 보이지 않음

    3.1 Nginx 기본 사용법(참고용) —> 요즘 많이 사용함

    1. ubuntu 다운로드

      docker run -dit -p 80:8080 --name myos ubuntu:20.04

    2. 백그라운드 실행

      docker exec -it myos /bin/bash

    3. update

      apt-get update

      apt-get install nginx=1.18.0-0ubuntu1

      =” “ nginx다음 버전 이름을 적을 수도 있다.

    4. 시간을 적으라 하는데!!

      6 : 아시아에

      69 : 서울

    5. vim설치

    이제 설정은 끝!


    1. nginx.conf

      find -name nginx.conf # 가볍게 위치확인

      경로를 확인한 다음 파일을 실행하자!

      user: 유저가 누구냐?

      worker_proccess : 프로세스가 갯수 설정 —> 최적의 성능에 영향이 갈수 있음

      빨간색 부분은 우리가 일반적으로 설정하는 공간이라고 보시면 된다.

    2. 아래 내리다 보면 아래의 포함 이라는 항목을 볼 수 있다.

      • /etc/nginx/conf.d/*.conf 형태로 웹서비스별 설정을 별도 파일로 할 수 있다.
      • 실제로 conf.d폴더로 들어가면 아무것도 없다 반대로 sites-enabled 로 가면

      • default가 있다 이게 뭐냐 sites-enabled/* 로 되어 있는데 아무 파일이나 넣겠다는 뜻이 된다. 그렇게 되면 nginx 설치시 기본적인 디폴트로 생성이 된다. vi로 들어간 모습
        vi로 들어간 모습
        
        ![](https://velog.velcdn.com/images/dkwktm45/post/2724b3e7-6c90-4148-91f5-23cc32c0e0e6/image.png)

        
        **설정된 이유는 심볼링 링크 설정이 되어있기 때문이다.!!**
        

### 3.2 default파일의 server설정

- listen은 http 요청을 받을 포트 설정
- 아래 코드는 listen 은 IPv6 포트 관련 설정이 default로 되어 있지만 우리는 8080을 사용하기 때문에 바꿔 주겠다.

```docker
listen 8080 default_server; # 몇번 포트를 사용여부를 표현한 문장
listen [::]:80 default_server;# 
```

- server_name: 요청 받을 도메인 이름 설정

```docker
**# 서버 네임 다음 사용할 도메인 이름을 적어주면 되고, 아래 처럼 두개를 나열할 수 있다.**
# ex) server_name fun-coding.org www.fun-coding.org;

# 아래는 default로 _ 를 사용한다.
server_name _;
```

- root
    
    만약 내가 
    
    ![](https://velog.velcdn.com/images/dkwktm45/post/6b358f55-9077-4598-a06d-a4b20a0fd701/image.png)

    
    **위 그림처럼 요청을 보낸다면 어디에서 html파일을 읽어올거야?라는게 경로의 의미가 된다.**
    
    ![](https://velog.velcdn.com/images/dkwktm45/post/116b92f8-65f5-4f47-9737-432a6d27a962/image.png)

    
    <aside>
    🧐 [**login.do](http://login.do) 이러한 특정 페이지를 입력한게 아니라 ip만 입력한 경우  위 사진 처럼 순차적으로 실행해서 없는 경우  계속 아래 목록들을 찾는다.**
    
    </aside>
    

- location
    
    **경로에 따라서 다양한 서버를 실행하게 해주는 설정이 location의 역할이다.**
    
    ![](https://velog.velcdn.com/images/dkwktm45/post/06780494-8872-49fb-b3ae-e2cd3eb1b9ca/image.png)

    
    ![](https://velog.velcdn.com/images/dkwktm45/post/cac22983-e6b6-4bdf-92b9-d11d011651d4/image.png)

    
    **더 나아간다면 13.23.353.342/blog/ 라는 경로의 요청이 있다면**
    
    **nginx에서 그 경로를 찾아봐라 없다면 404에러를 내겠다 이런 말이다.—>** `try_files $uri $uri/ =404;`
    
    **tip 경로를 추가하고 싶을 때는 `location /blog {}` 추가를 해주면 된다.**
    

또 이러한 server설정이 안될 경우가 있다.

—> service nginx restart 를 해주자! (vi 를 나가서 실행해야한다.)

이렇게 server 설정이 끝났다면 잘 실행되는 것을 알 수 있다.

WHY?

  1. default파일로 가면

    Untitled

    해당 경로에 html파일을 리턴 해주라고 명시가 되어 있다는 것

  2. 경로로 들어가 보자!

    실제로 보니 있는것을 확인할 수 있었다.

location_2 —>location을 새로 만들어 보자!


default에서 아래와 같이 location을 새로 만들어 주자!

				location /blog {
                root /var/www;
        }
				location /flask{
                root /var/www;
        }
  • blog같은 경우는 실제 요청은 “ip구간”/blog/aaa.hml —>root는 /var/www/blog/aaa.html를 찾게될 것이고 blog경로를 만들어주고 html파일을 이름을 바꿔서 만들어 줬다.
  • flask같은 경우는 실제 요청은 “ip구간”/flask/aaa.hml —>root는 /var/www/flask/aaa.html를 찾게될 것이고 flask경로를 만들어주고 html파일을 이름을 바꿔서 만들어 줬다.

이렇게 설정해준 다음 restart해서 실행해준다면 —>잘 실행되는 것을 볼 수 있다.

profile
내가 공부한 것들을 적는 공간

0개의 댓글