외부 소스에서 nginx의 리디렉션 유지


15

마케팅 부서에 자신의 리디렉션을 유지할 수있는 기회를 제공하는 상황에 처해 있습니다. 지금까지 그들은 IT 부서에 정보를 전달했으며 우리는이를 위해 정보를 유지했습니다 nginx.conf.

이 사람들 중 일부는 IIS 또는 Apache의 리디렉션에 대해 잘 알고 있지만 nginx 구성에 직접 액세스하는 옵션은 없습니다.

내가 .htaccess액세스 할 수있는 파일에 대한 nginx 지원이 없으며 nginx에 포함 된 conf 파일에 대한 쓰기 권한을 부여하지 않는 것이 좋습니다. 우리 마케팅이 몇 시간 안에 nginx 설정을 깨뜨릴 것으로 기대합니다 ...

로드 밸런서의 핵심에 액세스하지 않고도 안전한 가능성이 있습니까?

답변:


24

다시 쓰기 구성을 올바르게 격리하는 방법은 없습니다. 취할 수있는 세 가지 접근 방식이 있습니다.

지도 모듈 포함

지도 모듈은 별도의 파일에서 매핑을 포함 할 수 있습니다. 파일을 변경 한 후에도 Nginx를 다시로드해야하며 매핑 파일이 구문 상 정확해야하지만 수행 할 수있는 작업이 제한됩니다.

nginx.conf:

map $uri $new {
    include /etc/nginx/marketing.map;
}

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}

marketing.map:

/about  /company/about-us;
~^/people/(?<person>.*)$    /company/people/$person;

전처리 구성

첫 번째는 리디렉션을 사용자가 정의한 형식에서 nginx 구성으로 변환하는 스크립트를 작성하는 것입니다. 예를 들어, 공백으로 구분 된 리디렉션 목록이 제공된 경우 :

/foo/(.*) /bar/$1

그리고 스크립트 :

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

다음 구성을 구성하십시오.

rewrite /foo/(.*) /bar/$1 permanent;

그런 다음 nginx -t전체 구성 에서 실행 하여 다시로드하기 전에 구성이 유효한지 확인하려고합니다.

즉각적인 처리

두 번째 옵션은 ngx_lua , ngx_perl 또는 ngx_js 를 사용하여 nginx 자체에서 리디렉션 구성을 읽고 처리하는 것입니다. 예를 들어, rewrite_by_lua지시문을 사용하면 Lua 코드를 실행 하여 재 작성을 구성 할 수 있습니다 . 모든 요청에 ​​대한 코드를 해석하므로 사전 성능에주의해야합니다.


1
지도 모듈은 리디렉션을 구성하는 약간 제한된 방법을 제공했습니다.
mgorven

1
지도 방법은 매우 유망 해 보입니다! 그래서 맵 파일을 유지하기 위해 간단한 웹 사이트를 작성하기 시작합니다. 감사합니다!
Sascha

2
안타깝게도이 시점 (2014 년 가을)에 ngx_js 프로젝트는 2 년 전에 마지막으로 다루어졌습니다. 그러나 ngx_lua는 매우 활동적이고 잘 유지됩니다.
Ville

이제 js의 하위 세트를 사용할 수 있는 nginScript (알파 품질)를 사용할 수 있습니다.
lifeisfoo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.