nginx는 if 문을 제거합니다.

nginx는 if 문을 제거합니다.

여기서 nginx 멍청한 놈에 대한 약간의 조언을 찾고 있습니다. 나는 nginx에서 if 문이 너무 느리다는 것을 읽었으므로 이를 변환하는 데 약간의 도움이 되기를 바랐습니다. 여러 가지 방법을 시도했지만 모두 실패했기 때문에 질문을 던져야겠다고 생각했습니다.

server_name *.noconformity.co noconformity.co;
# remove all sub domains and www
if ($http_host !~* "^(ftp|ssh)\.noconformity\.co$"){
    set $rule_0 1$rule_0;
}
if ($http_host ~ "^([^.]+)\.noconformity\.co$"){
    set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
    rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
    break;
}
# Login Short Cut
if ($uri ~* "/login") {
    rewrite ^/login(/.*)? /wp-admin$1;
}

답변1

완전히 테스트되지 않았으므로 실수가 있을 가능성이 매우 높지만 개념이 유효하기를 바랍니다.

아래 구성은 귀하의 목표를 다음과 같이 해석한 것입니다. 'ftp' 및 'ssh'를 제외한 모든 하위 도메인을 기본 사이트로 리디렉션합니다. /login을 /wp-admin으로 리디렉션

ftp 및 ssh 하위 도메인에 대한 연결을 허용하는 서버 블록을 생성한 다음 여기에서 작업을 수행합니다(예: 거부 또는 403 반환 등). 이는 정적 server_name이므로 와일드카드 server_name보다 우선합니다.

server {
    server_name ftp.noconformity.co ssh.noconformity.co;
    #additional options
}

메인 서버 블록 - 위치 블록에 재작성 추가

server{
    server_name noconformity.co;
    #root ....; 
    #your main config

    location ~* /login/ {
        rewrite ^/login/(.*)? /wp-admin$1;
    }
}

{내장된 WP 로그 리디렉션으로 인해 루프에 빠지는 것을 방지하기 위해 /login/ rewrite를 변경해야 했습니다.}

마지막으로 와일드카드 server_name - 이는 모든 하위 도메인(이미 일치하는 도메인 제외)과 일치하여 경로를 캡처하고 기본 사이트에 다시 작성합니다.

server {
    server_name *.noconformity.co;
    rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
}

nginxserver_names 페이지다양한 server_name 표현식의 우선순위를 설명하므로 읽어볼 가치가 있습니다.

답변2

이 질문에 대한 더 나은 대답은 다음을 사용하는 것입니다.HTTP 맵 모듈. 위의 예는 그들이 보여준 것과 거의 동일한 사례 사용입니다. 훨씬 깨끗하고 관리하기 쉽습니다.

관련 정보