티스토리

꿀벌개발일지
검색하기

블로그 홈

꿀벌개발일지

ohgyun.com/m

천천히, 그러나 끊임없이.

구독자
2
방명록 방문하기

주요 글 목록

  • nginx: 허용하지 않은 도메인에서 접속이 되는 경우 발생일: 2017.12.06 키워드: nginx, default_server, 기본 server 문제: 엥?? 도메인이 다른 전혀 관련 없는 웹페이지가 우리 서비스를 프록시로 걸어 제공하고 있었다. 어처구니가 없는 행동이지만, 그 전에 왜 nginx는 도메인이 다른 접근에 응답하고 있었던 걸까? nginx 설정의 서버 블럭에는 아래와 같이 server_name 이 명시되어 있었다. server { server_name ohgyun.com; ... } 해결책: nginx의 "첫 번째" 서버 블럭은 server_name 이 매칭되지 않았을 때 동작하는 기본 서버 블럭이다. 서버 블럭을 하나만 정의했었기 때문에, 도메인이 매칭되지 않았을 때에도 동일하게 첫 번째 블럭이 실행된 것이 문제였다. 아래와 같이 기본.. 공감수 0 댓글수 0 2019. 4. 13.
  • nginx: 로그 때문에 서버 용량이 찼을 때 처리 방법 발생일: 2017.07.31 키워드: nginx, 용량, 로그 용량, copytruncate, logrotate, 로그 로테이트 문제: 서버 용량이 가득 차서 리스타트에 실패하는 문제가 발생했다. nginx 로그 때문으로 추측되는데, 실제로 로그 디렉토리 내의 로그 파일의 용량은 문제가 될 만큼 크지 않다. 뭐가 문제일까? 해결책: nginx 로그는 로테이트해 S3로 업로드한 후에 삭제한다. 확인해보니, 원인은 로그가 제대로 로테이트되지 않고 프로세스가 삭제된 기존 파일을 계속 물고 있었기 때문이다. 로그 로테이트 옵션에 copytruncate 을 추가하는 것으로 해결했다. 아래는 작업과 관련된 스크립트: # 현재 머신의 용량을 확인해본다 df -h # 어떤 디렉토리에서 가장 많이 차지하는지 확인한다 s.. 공감수 1 댓글수 0 2019. 3. 26.
  • X-Forwared-For 헤더에서 실제 요청 IP 판단하기 발생일: 2017.01.05 키워드: AWS ELB, x-forwarded-for, IP 스푸핑, IP Spoofing 문제: 우린 앱서버로 node.js의 express를 사용한다. express 로그에서 요청 IP를 파악할 땐, X-Forwarded-For 헤더의 값을 참조한다. 헌데, 로그를 살펴보니 X-Forwarded-For 헤더에 예상했던 것보다 많은 IP가 포함되어 있는 경우가 있다. 프록시를 여러 번 걸쳐 들어온 것 같은 요청도 있고, IP 스푸핑으로 보이는 것들도 있다. X-Forwarded-For 헤더의 여러 IP 중에서 어떤 걸 진짜 사용자의 IP라고 보면 될까? 해결책: 우리는 express 서버 앞 단에 AWS ELB(엘라스틱 로드밸런서)와 nginx를 뒀다. Client -> E.. 공감수 0 댓글수 0 2017. 7. 28.
  • nginx: 로그 로테이트 적용하기 + 상세 설정 발생일: 2016.10.19 키워드: nginx log rotation, logrotate, logrotated, 로그 로테이트, log rotate, midsize, maxsize, size 문제: nginx 로그를 특정 주기로 저장해서 AWS의 S3에 저장하고 싶다. 어떻게 접근하면 될까? 해결책: 로그를 주기적으로 분리 저장하는 목적의 모듈이 있다. log rotate 모듈이고, 대부분의 유닉스 시스템엔 이미 설치되어 있다. 검색해보니, 워낙 잘 작성한 포스트가 많아 링크로 대체한다. How To Configure Logging and Log Rotation in Nginx on an Ubuntu VPS - https://www.digitalocean.com/community/tutorials/ho.. 공감수 0 댓글수 0 2017. 7. 27.
  • nginx: 로그가 제대로 출력되지 않을 때 발생일: 2016.10.21 키워드: nginx, log, access log, nginx logging is not working 문제: nginx 에서 access_log가 제대로 출력되지 않는다. 해결책: 몇 가지 의심되는 부분이 있다. 아래 사항을 체크해보자. 1. nginx의 설정 파일에서 access_log off 로 해둔 것은 아닌지 확인해보자. 2. 권한 이슈일 수 있다. nginx 의 worker process 가 로그 파일에 쓰기 권한이 있는지 확인해본다. nginx 설정에서 user 에 할당한 사용자가, access_log 파일이 있는 디렉토리와 파일에 쓰기 권한이 있는지 확인해보면 된다. 아래 명령으로 워커 프로세스의 사용자를 확인해보자. $ ps -eo "%U %G %a" | gr.. 공감수 0 댓글수 0 2016. 11. 25.
  • nginx: SSI 구문에서 중첩 if문 구현하기 발생일: 2016.07.14 키워드: nginx, ssi, 중첩 if 문, multiple condition, server side include 문제: nginx 의 SSI에서 중첩으로 if 구문을 넣으려고 한다. 아래처럼 넣어봤는데 잘 되지 않는다. ... 이상하다. 아래처럼 && 연산자로 추가해봤는데도 잘 되지 않는다. ... 여러 방법으로 테스트해봤는데, 어떤 경우엔 [an error occurred while processing the directive] 와 같이 구문 오류라고 나오고, 어떤 경우엔 바깐 if 문을 타는 등 의도치 않게 동작한다. 왜 그럴까? 해결책: nginx SSI 모듈 API에 따르면 if 구문은 1뎁스만 가능하다고 한다. > Only one level of nesting .. 공감수 0 댓글수 0 2016. 6. 14.
  • nginx: 413 Request Entity Too Large 발생일: 2015.12.31 키워드: nginx, 413 문제: nginx 에서 413 코드에 아래와 같은 응답을 내려준다. 413 Request Entity Too Large 해결책: 말 그대로 요청 사이즈가 너무 커서 nginx 에서 잘라버린 요청이다. 더 허용해도 괜찮다면 nginx.conf 파일에서 요청 바디의 최대 사이즈를 정의해주면 된다. client_max_body_size 16M; 논의: nginx의 설정을 변경한 후에도 Entity Too Large 오류가 난다면, 앱 서버의 설정 때문일 수 있다. node.js express 서버를 사용하고 있다면, bodyParser에서 limit을 설정할 수 있다. var bodyParser = require('body-parser');app.use.. 공감수 0 댓글수 0 2016. 6. 6.
  • nginx: 설정의 상속 모델 발생일: 2015.07.20 키워드: nginx, 설정, 디렉티브, directive 문제: nginx 설정의 상속 모델에 대해 잘 설명한 포스트가 있어 요약해봤다. 해결책: nginx에서는 아래 6개의 컨텍스트가 존재한다. - Global. - Http. - Server. - If. - Location. - Nested Location. - If in location. - limit_except. 기본 상속 모델은 부모 블럭에서 자식 블럭으로 상속받는 순이다. 형제 블럭이나 부모 블럭으로 전달되는 경우는 없다. nginx에서 상속이 동작하는 방식은 아래 4개의 타입으로 구분할 수 있다. - Normal directive 컨텍스트 당 한 개의 값 (예: root, index) - Array directi.. 공감수 0 댓글수 0 2016. 6. 6.
  • nginx: https 로 proxy_pass 설정하기 발생일: 2015.02.25 키워드: nginx, 엔진엑스, proxy_pass, ssl 문제: nginx로 리버스 프록시를 구성할 때, upstream 디렉티브에서 https 서버를 사용해 설정하고 싶다. 해결책: upstream 으로 정의할 때, 포트를 정의해주면 된다. 리버스 프록시를 호출할 때엔 https 로 정의한다. upstream example_api { server example.com:443; } location … { proxy_pass https://example_api; } 공감수 0 댓글수 0 2016. 6. 6.
  • nginx: 웹 폰트 설정하기 발생일: 2014.04.14 키워드: nginx, 웹 폰트, web font, mime type, 마임 타입 문제: 서버에 웹 폰트 리소스를 올려두고 서빙하려고 하는데, nginx 가 제대로 응답하지 못해 웹 폰트가 적용되지 않는다. 해결책: nginx 의 기본 마임 타입에 웹 폰트 리소스의 타입이 포함되어 있지 않기 때문이다. nginx의 conf/mime.types 파일에 아래 타입을 추가해주면 된다. font/ttf ttf; font/opentype otf; application/font-woff woff; application/vnd.ms-fontobject eot; - 기본 타입에 `eot` 확장자는 `application/octet-stream`으로 정의되어 있는데, 이 라인은 삭제해준다. -.. 공감수 1 댓글수 0 2016. 6. 6.
  • nginx: URI 중 매칭된 값을 proxy_pass 에 전달하기 발생일: 2015.11.05 키워드: nginx, proxy_pass, location, regexp, regex, group, variable, 변수, 정규식 그룹 문제: location 블럭에 매칭된 값 중에 일부를 프록시 서버의 파라미터로 전달하고자 한다. 예를 들어, 아래와 같이 주소를 전달받은 후에, http://example.com/user/1234/a/b/c?x=y&x2=y2 프록시 서버로 아래와 같이 전달하고자 한다. http://localhost:3000/a/b/c?user_id=1234&x=y&x2=y2 해결책: nginx 문서의 proxy_pass 항목에는 아래처럼 정의되어 있다. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#p.. 공감수 4 댓글수 0 2015. 11. 5.
  • nginx: proxy_pass 의 마지막 슬래시 여부에 따른 처리 발생일: 2015.11.05 키워드: nginx, proxy_pass, 엔진엑스, 프록시 문제: nginx 에서 proxy_pass 의 마지막 슬래시 여부에 따라 전달되는 주소가 달라지는 것 같다. 잘 이해하고 가자. 해결책: proxy_pass 에 URI를 생략하는 경우, 요청으로 들어온 전체 Path가 프록시 서버로 전달된다. proxy_pass 에 URI를 정의하는 경우(`/` 포함), location 블럭에서 매칭된 나머지 주소만 프록시 주소에 정의된 URI에 붙어 전달된다. 요청 URL이 아래와 같다고 가정하면, http://example.com/foo/bar/baz 각 룰 케이스 별로 프록시로 전달되는 path는 아래와 같다. Case) location 과 proxy_pass 에 / 가 없는 .. 공감수 9 댓글수 1 2015. 11. 5.
  • nginx: error_page 디렉티브의 기준 경로는 / 이다. 발생일: 2015.03.15 키워드: nginx, error page 문제: nginx 에서 html 페이지를 에러 페이지로 설정하고, 인터널로 해당 룰을 처리하려고 한다. error_page 404 404.html; ... location ~* "^\w+\.html$” { internal; … } 위와 같이 룰을 설정했는데 의도한 대로 라우팅되지 않는다. 왜일까... 해결책: error_page 404 404.html; 위와 같이 처리할 경우, 404 에러가 발생하면, `404.html`이 아니라, `/404.html`로 라우팅된다. error_page 디렉티브의 기준 경로가 루트 (/)인 모양이다. 헷갈리지 않게 아래와 같이 룰을 수정했다. error_page 404 /404.html; ... loc.. 공감수 0 댓글수 0 2015. 10. 13.
  • nginx: if 디렉티브 이해하기 발생일: 2015.07.07 키워드: nginx, 엔진엑스, if, rewrite, last, return, if directive, if 디렉티브, if is eval 문제: nginx 위키에서는 if 디렉티브의 동작이 일관적이지 않고, 요청 케이스마다 동작하는 것이 다를 수도 있기 때문에 가능하면 사용하지 않기를 추천하고 있다. (nginx 위키: If is eval) 위키에서는, `location` 블럭의 `if`에서는 `return`과 `last` 플래그가 붙은 `rewrite`만 안전하다고 설명한다. - return ...; - rewrite ... last; (`rewrite`의 `last` 플래그는 rewrite 직후 현재 블럭의 프로세싱을 종료한다. nginx rewrite 플래그의 차이점.. 공감수 2 댓글수 0 2015. 7. 7.
  • nginx: http_host, host, server_name, hostname 변수의 차이점 발생일: 2014.05.13 키워드: nginx, server_name, http_host, host 내용: nginx 에서 서버 관련 변수 중에 헷갈리는 몇 가지가 있어 정리해둔다. $http_host: HTTP Request 의 Host 헤더값 $host - Host 헤더가 없다면, server_name - Host 헤더를 사용하되, 포트값은 제외하고 모두 소문자로 표시 $server_name: 해당 서버 블럭의 이름 $hostname: nginx가 구동되는 머신 이름 공감수 2 댓글수 0 2015. 6. 17.
  • nginx: root vs alias 발생일: 2015.01.02 키워드: nginx, root, alias 문제: `root` 디렉티브와 `alias` 디렉티브는 쓸 때마다 헷갈린다. 이참에 정리! 해결책: root: location 으로 넘어온 부분을 root로 설정한 경로에 추가한다. alias: location 에 매칭된 부분을 제거하고, alias 로 설정한 경로에서 찾는다. location /static/ { root /var/www/app/static; autoindex off; } /var/www/app/static/static 경로에서 찾는다. location /static/ { alias /var/www/app/static/; autoindex off; } /var/www/app/static/ 에서 찾는다. 논의: 위와 같.. 공감수 2 댓글수 0 2015. 1. 18.
  • nginx rewrite 플래그의 차이점: last 와 break 발생일: 2014.12.17 키워드: nginx rewrite flags, last, break 문제: nginx 의 rewrite 디렉티브에는 4가지 플래그(last, break, redirect, permanent)가 있는데, 그 중 last 와 break 는 자꾸 봐도 헷갈린다. 나중에 봐도 헷갈리지 않게 자세히 정리했다. 해결책: API 문서에 있는 정의는 다음과 같다. (http://wiki.nginx.org/HttpRewriteModule) Flags can be any of the following: last - completes processing of current rewrite directives and restarts the process (including rewriting) wit.. 공감수 3 댓글수 0 2014. 12. 17.
  • nginx 에서 proxy_set_header 재정의할 때 주의할 점 발생일: 2014.12.09 키워드: nginx, proxy_set_header, proxy_pass, remote_addr, Remote IP, 프록시 문제: 아래와 같은 nginx 리버스 프록시 설정이 있었다. location /some/path { proxy_pass http://localhost:8000; } 프록시 서버에 특정 헤더를 전달하기 위해서 아래와 같이 `proxy_set_header` 디렉티브로 설정을 추가했다. location /some/path { proxy_set_header foo foo; proxy_pass http://localhost:8000; } 그런데, 서버 로그를 확인해보니 잘 넘어오던 Remote IP가 127.0.0.1로 설정되어 나온다.. 왜 그런 걸까…? 해결.. 공감수 3 댓글수 0 2014. 12. 11.
  • nginx 호스트 개수 제한 변경하기 발생일: 2014.12.05 키워드: nginx, host, 호스트, server_names_hash_bucket_size 문제: nginx 로 여러 호스트를 처리하고 있는 서버를 한 대 운영하고 있다. 오늘은 호스트를 하나 더 추가했는데, 아래와 같은 오류가 나면서 리스타트가 되지 않는다. could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 뭐가 문제일까? 해결책: nginx 에서 처리할 수 있는 호스트의 최대 개수를 설정하는 옵션이 있었다. `server_names_hash_bucket_size` 속성인데, 필요한 만큼 이 속성의 값을 설정하면 된다. `http` 블럭 안에 아래와 같이 .. 공감수 0 댓글수 0 2014. 12. 11.
  • Passenger 이해하기 발생일: 2014.01.18 키워드: Passenger, 패신저, 노드, node, nginx, 엔진엑스 문제: 이번 프로젝트에는 노드로 서버를 띄우고 앞 단에 엔진엑스를 두려고 한다. 알아보니, 패신저라는 모듈이 있고, 이 모듈로 nginx와 node를 효율적으로 관리할 수 있다고 한다. 아래는 패신저에 대해 리서치하면 정리해둔 노트이다. 해결책: https://github.com/phusion/passenger/wiki/Phusion-Passenger%3A-Node.js-tutorial ## 특징 Phusion Passenger 는 앱과 웹서버를 겸하고 있다. 즉, node.js 와 nginx의 기능을 모두 제공한다. - Multitenancy 한 개의 서버에서 손쉽게 여러 개의 노드앱을 실행할 수 .. 공감수 0 댓글수 1 2014. 8. 2.
  • Nginx HTTP Server - 6. 참고/주의 ## if 지시어 내에 다른 지시어를 넣지 마라 http://docs.ngx.cc/en/latest/topics/depth/ifisevil.html if 지시어 안에서 안전한 건, `return`, `rewrite` 지시어 뿐이다. 같은 조건의 if 구문이 여러 개 존재한다면, 마지막으로 정의한 것만 호출될 것이고, if 구문이 호출되면 if 구문 외부의 지시어는 호출되지 않을 수 있다. ## if 구문보단 `try_files`를 사용하라. http://stackoverflow.com/questions/869001/how-to-serve-all-existing-static-files-directly-with-nginx-but-proxy-to-apache ## 서비스 적용 예제http://blog.argt.. 공감수 1 댓글수 0 2014. 1. 26.
  • Nginx HTTP Server - 5. 모듈 환경설정 엔진엑스의 풍부한 기능은 모듈에서 나오고,애플리케이션 전체가 모듈을 기반으로 작동한다. 각 모듈의 사용 여부는 컴파일 때 결정된다. ## 재작성 모듈 (rewrite 모듈) URL 재작성을 목적으로 만든 모듈이다.재작성 모듈을 이용해서 웹사이트의 페이지 속성을 나타내는 유용한 정보가 포함된 링크 주소를 사용할 수 있다.예) http://website.com/article-1234-economy-strenghens.html 이런 해법으로 방문자 뿐 아니라 검색 엔진의 관심도 끌 수 있기 때문에,URL 재작성은 검색 엔진 최적화(SEO)를 위해서 핵심적인 요소다. 클라이언트가 요청한 URI를 웹 서버가 수신하고, 해당 파일을 서비스하기 전에 URI를 재작성하는 매커니즘이다. 그런 후 재작성된 URI를 loc.. 공감수 2 댓글수 0 2014. 1. 26.
  • Nginx HTTP Server - 4. HTTP 환경설정 ## HTTP 코어 모듈 HTTP 서버의 핵심적인 블럭, 지시어, 변수를 포함한다.엔진엑스를 빌드할 때 기본적으로 포함된다. ## 대표 블럭 ### 구조 블럭 HTTP 모듈은 아래와 같은 세 가지 새 논리적 블럭을 제공한다.프로토콜 수준(http 블럭), 서버 수준(server 블럭), 요청 URI 수준(location) - http 이 블럭 안에서 엔진엑스의 HTTP 부문과 관련된 모든 모듈의 지시어와 블럭을 정의한다. - server 하나의 웹사이트를 선언하는 데 사용한다. (호스트별) http 블럭 안에서만 사용할 수 있다. - location 웹사이트의 특정 위치에 적용할 설정 그룹을 정의한다. server 블럭이나 다른 location 블럭 안에 삽입할 수 있다. ## 모듈 지시어 표현 방법: .. 공감수 0 댓글수 0 2014. 1. 26.
  • Nginx HTTP Server - 3. 환경설정 ## 기본 설정 기본 설정 파일의 경로는 `/usr/local/nginx/conf/nginx.conf` - `#`는 주석- 지시어는 항상 세미콜론(`;`)으로 끝난다.- 엔진엑스는 모듈 구조로 작동하며, 각 모듈은 특정 지시어의 묶음 형태로 제공된다. 가장 기본적인 지시어들은 코어 모듈에 포함돼 있다.- `include` 지시어는 특정 파일을 포함하는 기능 파일 글로빙을 지원한다. 예) include /sties/*.conf- `include`를 할 때 파일이 존재하지 않으면 환경 설정 테스트에 실패한다. - 설정 파일의 관습 - nginx.conf : 기본 환경 설정 - mime.types : 파일 확장명과 MIME 타입 목록 - fastcgi.conf : FastCGI 관련 설정 - proxy.con.. 공감수 0 댓글수 3 2014. 1. 26.
  • Nginx HTTP Server - 2. 설치 ## 소스 코드를 통한 설치 패키지 매니저를 통해 설치할 수도 있지만, 옵션 등을 제어하려면 소스 코드를 직접 컴파일하는 것이 좋다. ## 의존 라이브러리 ### pcre 엔진엑스를 컴파일하려면 펄 호환 정규표현식(PCRE, Perl Compatible Regular Expression)이 필요하다. 재작성 모듈(rewrite)과 HTTP 코어 모듈이 PCRE 구문에 따른 정규표현식을 사용하기 때문이다. `pcre`와 `pcre-devel` 의 설치가 필요하다.`pcre`는 컴파일된 버전의 라이브러리이고, `pcre-devel`은 프로젝트를 컴파일하기 위한 개발용 헤더와 소스코드이다. $ yum install pcre pcre-devel $ apt-get install libpcre3 libpcre3-d.. 공감수 0 댓글수 1 2014. 1. 26.
  • Nginx HTTP Server - 1. 작업환경 준비하기 발생일: 2013.12.06 키워드: nginx, 엔진엑스 문제: 이번 프로젝트에선 nginx 로 웹서버를 운영하기로 했다.아직 한 번도 사용해본 적이 없었는데, 마침 옆자리 D가 예전에 사둔 책이 있다며 가져다줬다. Nginx HTTP Server 라는 책이었는데, 이해하기 쉽게 설명도 잘 되어있고 좋았다.(지금 찾아보니 평점이 썩 좋진 않다. 난 좋던데... -_-a ㅎㅎ) 책 보며 정리했던 것에 몇 가지 설명을 덧붙여 옮겨둔다. 해결책: ## nginx 를 구동할 사용자 계정 생성 사용자 계정 확인$ cat /etc/passwd 쉘 접근 권한이 없는 상태로 홈 디렉토리를 지정해 추가하기$ useradd --shell /sbin/nologin --home-dir /usr/local/nginx ngin.. 공감수 2 댓글수 0 2014. 1. 26.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.