Woohan-TDD / book-aws-study

0 stars 0 forks source link

02장: 운영 서버 환경의 구성 #2

Open ksy90101 opened 3 years ago

mintjordy commented 3 years ago

서버 구성 환경

특이사항

# java, nginx  설치 커맨드
sudo amazon-linux-extras install nginx1
sudo amazon-linux-extras install java-openjdk11

기타 (알게된것)

# 친숙해지자 
sudo service nginx restart 
sudo service nginx start
sudo service nginx stop

~Java11로 설치한 이유는 JordyApplication을 Java11로 만들어서 ..~

ksy90101 commented 3 years ago

[질문]

  1. p10. 웹 애플리케이션은 특성상 다양한 IP 주소와 포트 번호에 대해 요청을 받을 수 있어야 한다.라는 말이 이해가 안되는데, 혹시 예제가 있을까요?
  2. p11 그러나 로드 밸런서가 장애가 나면 전체 서비스에 장애가 나기 때문에 나머지 서버들이 전체 서비스 장애로 이어지기 떄문에 주의해야 한다. 이 문제를 해결하기 위한 방법이 뭐가 있을까요?

    [해보고 싶은거]

    • 단순히 프로세스의 실행뿐만 아니라 서버 자원을 최적으로 사용하기 위해 프로세스의 수나 프로세스의 메모리를 조절하기도 한다.
KS-KIM commented 3 years ago

@ksy90101

  1. 데이터베이스는 연결되어 있는 특정 서버와의 통신만 하면 되는 반면에, 웹 어플리케이션은 모든 사용자의 IP를 허용해줘야 한다는 이야기같네요. 포트번호 또한 같은 맥락으로 생각하면 될 것 같아요. 웹 애플리케이션은 기본적으로 서비스를 제공하기 위한 80, 443포트 외에도 이메일 서비스를 위한 포트 등 여러가지 포트를 개방할 수 있지 않을까요? 반면에 데이터베이스를 운영하는 서버에서는 해당 포트들은 열어둘 필요가 없겠죠.

  2. 로드밸런서를 이중화하고 서로 Health Check를 하면서 Primary 로드밸런서가 죽었을 때만 Secondary가 작동하도록 만들 수 있을 것 같아요. (링크 참고 또는 loadbalancer failover 키워드 검색) Redis 캐시 사용할 때에도 장애 발생상황을 고려하여 이런 전략을 세우더라구요.

hongbin-dev commented 3 years ago

이슈

  1. 빌드하는데 메모리가 터짐
  2. nginx상에서 url prefix를 달아보고 싶었다.

    
    server {
        listen       80;
        listen       [::]:80;
        server_name  3.36.116.92;
        root         /usr/share/nginx/html;
    
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        location /v1 {
                proxy_pass http://localhost:8080;
    
        }
        location /v2 {
                proxy_pass http://localhost:8081;
        }
    
        location /v3 {
                default_type text/html;
                return 200 'gangnam style!';
        }
    
        location /v4 {
                rewrite /v4(.*) /$1 break;
                proxy_pass http://localhost:8080;
                proxy_redirect off;
        }
    }
    • v1, v2 같은경우는 애플리케이션에서 /v1/hello라는 url을 찾을 수 없어서 404가 뜨더라.
    • 그래서 v4같이 url을 한번 정재해서 proxy path에 넘기도록 할 수 있다고 한다.
    • https://serverfault.com/questions/379675/nginx-reverse-proxy-url-rewrite
    • 일반적으로 이런방법보다 서브도메인을 많이사용하는 것 같다. v1.domain.com/health

생각

KS-KIM commented 3 years ago

알게된 것


devel 패키지가 무엇일까?

nginx에 설정하는 헤더

nginx에서 제공하는 변수

ksy90101 commented 3 years ago

https://jojoldu.tistory.com/261

KS-KIM commented 3 years ago

Amazon Linux의 기반인 Redhat에서는 nginx 기본 설치시 sites-available이나 sites-enabled 디렉토리를 가지지 않는다고 합니다. 사용하고 싶다면 이 링크를 참고하세요. 우분투 AMI로 인스턴스 생성 시 기본적으로 제공됩니다.

aegis1920 commented 3 years ago

Nginx header 알아보기

nginx에서 사용하는 변수와 속성들을 알고 사용하고 싶어서 좀 더 찾아봤습니다 :)

찾다보니 좀 깊게 팠네요ㅎㅎ

location / {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

변수들

proxy_set_header 속성

헤더에 왜 X- 를 붙이나?

X-Real-IP

X-Forwarded-For

Host

즉, 위에 있는 3개의 헤더를 추가해준 이유는 로깅 및 통계를 위해 요청의 Host 요청의 클라이언트의 IP 지금까지 거쳐온 프록시 서버들의 IP와 클라이언트 IP 를 서버가 알 수 있도록 하기 위함입니다.

출처