리눅스 22

php extension (확장자 .iso)

php 를 통해 개발을 할 시 프레임워크를 사용하게 된다. 프레임워크에는 팔콘, 라라벨, 코드이그나이터 등 여러가지 있는데 현재까지 3개를 설치하고 예제만 깔짝거려 봤다. 초반에는 iso관련 오류에 많은 시간을 허비했는데, 대충 가닥이잡히고 마지막으로 코드이그나이터를 할땐 금방 해결했다. 일단 확장자는 php.ini 파일에서 설정하며 vi 찾기 기능이나 VScode를 연동하면 쉽게 수정가능하다. 그럼 ini파일이 어디 있느냐... 가 중요한데 그건 패키지 설치 버전등에 따라 다르다 즉 서버설정마다 다르다. 하지만 확장자를 쉽게 설치하는 방법으로 간단하게 apt install 을 사용하는 것이다 이렇게 패키지를 설치하게되면 자동으로 ini파일에 추가된다 !! 굿

리눅스/php 2023.10.12

CDN - 컨텐츠 딜리버리 네트워크

CDN 컨텐츠 딜리버리 네트워크 CDN 이란 컨텐츠를 대용량으로 전송 시 (웹에서는 주로 동영상 스트리밍이나 이미지 파일이 해당됨) 웹 서버까지 직접 도달하면 시간이 오래걸린다. ( 트랙픽이 발생해서 비용적으로도 손해임 ) 따라서 CDN이라는 기술을 도입하게 되는데 CDN의 개념은 웹서버로 요청 시 DNS 프로토콜에서 웹서버의 IP를 알려주는게 아니라 캐시서버 IP를 알려주게 된다.

리눅스/nginx 2023.09.18

캐시

1. 캐시 선언 proxy_cache_path /var/nginx/cache # 경로지정 http 블록에서 사용가능 keys_zone=CACHE:60m # 공유 메모리 영역 60MB levels=1.2 # 디렉토리 구조의 레벨 지정 inactive=3h # 캐시 후 3시간 동안 유지 max_size=20g; # 캐시 영역 크기 20GB로 제한 proxy_cache CACHE; # 어떤 캐시 영역을 사용할지 결정 http, location, server 블록에서 사용가능 2. 캐시 락 동일한 리소스에 대한 요청이 여러 개 들어오면 하나의 요청만 보내서 캐시를 생성함 ( 업스트림을 한번만 하게됨 ) proxy_cache_lock on; # 생성중인 캐시에 대한 요청이 들어올 시 해당 요청을 대기했다가 캐시가..

리눅스/nginx 2023.09.12

upstream 블럭 / stream 블럭

upstream 은 http 블럭 사용되는 블럭 stream은 TCP, UDP 연결에의한 프로토콜처리에 사용되는 블럭 둘의 차이는 뭘까 그냥 http는 upstream을 쓰고 UDP, TCP는 stream을 쓴다?? 왜 그런지 >> 그냥은 없다... 당장 떠오르는 HTTP와 UDP,TCP의 차이는 연결을 유지하느냐 안하느냐 인줄 알고 그차이로 뭔가 있는줄 알음 근데 아님 HTTP와 UDP,TCP는 다른 전송 계층으로 서로 무관함 HTTP는 UDP 기반과 TCP 기반 둘 다 있음 TCP를 많이 쓰는 듯함 결론 nginx 에서 HTTP를 처리하기위해 http 블록을 만들었다. 나중에 TCP와 UDP를 처리하기위해 stream 블록을 만들었다. 그리고 부하분산을 위해 upstream 으로 데이터를 분산하는 블..

리눅스/nginx 2023.09.12

트래픽 관리

처음엔 트래픽이란 말을 정확히 몰랐다. 검색해보니 그냥 전송되는 데이터를 말하는 듯하다. 트래픽 관리 > 전송되는 데이터 양 관리 책에서는 데이터 관리하는 방법들을 소개하고 있다. 1. 사용자에 따라 서비스 분산 - 서비스를 업데이트하고 한번에 모든 사용자에 새로운 버전을 서비스할 경우 오류가 발생하면 모든 사용자가 오류를 경험하게된다 이때 트래픽을 분산해 이전 버전도 함께 서비스하여 오류를 발생을 줄일 수 있다. split_clients " {관리할 데이터 구분자} " $경로 예시 ) split_clients "${remote_addr}AAA" $variant { 20% "backendv2"; * "backendv1"; } location { proxy_pass http://$variant } 2. G..

리눅스/nginx 2023.09.11

고성능 부하분산

nginx 는 고성능 부하분산 기능을 제공한다. 리버스 프록시 서버라고도 한다. upstream 블록 그냥 안에 서버 블록 여러개랑 가중치 해서 분산해준다. stream{ upstream backend{ server 10.10.12.45:80weight = 1; server app.example.com:80 weight = 2; } server { location / { proxy_pass https://backend; } } } server 블록 listen이랑 root이랑 location 그런거 설정하는 블록 http TCP UDP 에서 차이점 기본 디폴트를 http로 해놔서 upstream 이랑 server 블록만 하면 됨 다른애들은 stream 블록으로 감싸줘야됨 그리고 각각 server 블록 설..

리눅스/nginx 2023.09.07

리눅스 0, 1 / PIPESTATUS

리눅스에서 0은 성공, 1은 실패이다. true echo $? false echo $? 확인해보면 알 수 있다. 성공 여부는 마지막 실행 문장에 대해서만 저장된다. 그리고 파이프 문으로 연결될 시 파이프가 실패해도 성공 여부는 알 수 없다. cat dslakmdas | wc -l echo $? cat 로 존재하지 않는 파일명을 출력하게 하고 파이프로 넘긴 뒤, 행의 갯수를 확인했다. 존재하지않는 다는 파이프문의 오류가 있음에도 ws는 실행되고 성공 값을 확인했다. 사실 파이프 문의 실패 여부를 확인하는 방법이 있는데 그것은 PIPESTATUS 이다. cat asdasdas | wc -l echo "${PIPESTATUS[0]} ${PIPESTATUS[1]}" 1 0으로 출력되는 것을 확인할 수 있다. 그..

명령어 - set [옵션] [옵션명]

리눅스 쉘 스크립트 코드는 디버깅이 없고, 오류가 발생해도 무시하고 진행된다. 이럴 경우 값이 제대로 들어가지 않아 뒤에 코드가 오류가 생기는 경우가 있다. 이럴때 set 옵션을 줘서 디버깅하는 효과를 줄 수 있다. 우선 set를 설명하기 전에 PIPESTATUS에 대해 알아야한다. https://aif0921.tistory.com/43 리눅스 0, 1 / PIPESTATUS 리눅스에서 0은 성공, 1은 실패이다. true echo $? false echo $? 확인해보면 알 수 있다. 성공 여부는 마지막 실행 문장에 대해서만 저장된다. 그리고 파이프 문으로 연결될 시 파이프가 실패해도 성공 aif0921.tistory.com set 에는 e, o, u, x 가 많이 사용되는 듯 하다. 다른 옵션은 찾아..