발생일: 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..
발생일: 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 에 / 가 없는 ..
발생일: 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..
발생일: 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 플래그의 차이점..
발생일: 2014.05.13 키워드: nginx, server_name, http_host, host 내용: nginx 에서 서버 관련 변수 중에 헷갈리는 몇 가지가 있어 정리해둔다. $http_host: HTTP Request 의 Host 헤더값 $host - Host 헤더가 없다면, server_name - Host 헤더를 사용하되, 포트값은 제외하고 모두 소문자로 표시 $server_name: 해당 서버 블럭의 이름 $hostname: nginx가 구동되는 머신 이름
발생일: 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/ 에서 찾는다. 논의: 위와 같..
발생일: 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..
발생일: 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로 설정되어 나온다.. 왜 그런 걸까…? 해결..
발생일: 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` 블럭 안에 아래와 같이 ..
발생일: 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 한 개의 서버에서 손쉽게 여러 개의 노드앱을 실행할 수 ..