Nginx 설정 관리

9375 단어 nginx설정 관리
이것 은 아주 오래 전에 gists 에 쓰 인 사고 이다.이전에 직접 읽 을 수 있 었 던 판본 이 최근 에 없어 져 서 한 편 을 붙 여 왔 다.
Nginx 는 효율 을 위해 htaccess 디 렉 터 리 설정 파일 을 버 렸 다 는 난처 한 문제 가 있 었 습 니 다.프로젝트 가 Nginx 를 사용 하여 HTTP 서 비 스 를 제공 하려 고 할 때 설정 파일 에 디 렉 터 리 정 보 를 대량으로 하 드 코딩 해 야 합 니 다. 이식 성과 유지 가능성 이 떨 어 집 니 다.그렇다면 상대 적 으로 변통 하 는 방법 을 찾 아 이식 성과 유지 가능성 을 높 일 수 있 을 까?
네트워크 노드 의 호스트 이름 에서 출발
전통 적 인 방법 에서 네트워크 시스템 이 여러 노드 에 배치 되 어 작업 을 협조 해 야 할 때 노드 간 의 통신 은 IP 가 아 닌 호스트 이름 을 부여 하여 이 루어 져 야 한다.IP 와 호스트 이름 의 대응 관 계 는 /etc/hosts 파일 이 유지 보 수 를 책임 집 니 다.
그 목적 은 디 결합 사고 에 따라 프로그램 코드 의 하 드 인 코딩 내용 (네트워크 노드 IP) 을 줄 이 는 것 이다.
이 방법 을 참고 하여 프로젝트 프로필 을 모두 심 볼 릭 링크 '가장' 으로 Nginx 시스템 설정 디 렉 터 리 /etc/nginx 에 저장 할 수 있 습 니까?
Nginx 설정
1.1 공용 설정
시스템 설정 디 렉 터 리 에 하위 디 렉 터 리 conf.d 가 있 습 니 다. 접미사 이름 .conf 의 파일 은 주 설정 파일 의 마지막 http 블록) 에 불 러 옵 니 다.
Nginx 는 동적 설정 조정 을 지원 하지 않 기 때문에 일부 성명 은 전체 설정 에서 우선 순 위 를 정의 하고 기능 사용 에 영향 을 주지 않 습 니 다.
그러면 일부 크로스 필드 의 공용 설정 은 이 디 렉 터 리 에 놓 을 수 있 습 니 다.예 를 들 어 /etc/nginx/conf.d/upstream-php.conf:
upstream php {
    server unix:/var/run/php5-fpm.sock;
}

이론 적 으로 upstream 뿐만 아니 라 http 블록 에 사용 할 수 있 는 모든 유 니 버 설 명령 은 이 디 렉 터 리 에 놓 을 수 있다.또한 이러한 사용자 정의 /etc/nginx/conf.d/types.conf (이렇게 하면 mime.types 파일 이 수정 되 지 않도록 보호 할 수 있 습 니 다):
types {
    text/html do;
}

1.2 도 메 인 설정
마찬가지 로 시스템 설정 디 렉 터 리 에 두 개의 sites-availablesites-enabled 하위 디 렉 터 리 가 있 습 니 다.다음 디 렉 터 리 에 있 는 모든 파일 이 불 러 옵 니 다.
Nginx 의 기본 VHOST 관리 방식 을 모방 하면 도 메 인 설정 파일 dummy.localsites-available/dummy.local 로 저장 한 다음 에 심 볼 릭 링크 sites-enabled/dummy.local 로 연결 하여 효력 을 발생 시 킬 수 있 습 니 다.
그러나 실제 생산 과정 에서 흔히 볼 수 있 는 상황 은 dummy.local 주 역 dummy.local, 정적 자원 자 역 s.dummy.local (static), 업무 인터페이스 자 역 api.dummy.local 과 데이터 자원 자 역 a.dummy.local (asset) 으로 나 뉜 다.그리고 서로 다른 네트워크 노드 에서 그 중의 하나 또는 여러 개 를 선택적으로 배치 하여 균형 적 인 부하 나 용 재 를 한다.
따라서 가장 신뢰 할 수 있 는 방법 은 모든 하위 영역 을 독립 적 으로 설정 하 는 것 이다 (독립 된 파일 로 만 드 는 것).모두 sites-available 하위 디 렉 터 리 에 저장 되 지만 site-enabled 에 심 볼 릭 링크 가 필요 한 지 여 부 는 노드 계획 에 따라 결정 합 니 다.
1.3 도 메 인 공용 설정
일부 경우, 일부 설정 은 주 영역의 다른 자 역 에 동시에 나타 날 수 있 습 니 다.예 를 들 어 앞에서 개성 있 는 파일 접미사, 예 를 들 어 CORS, 예 를 들 어 특수 한 PHP - FPM 설정 등 이 있 습 니 다.
가장 얕 은 이치 로 분석 하면 이러한 설정 을 분리 하 는 것 은 복용 을 향상 시 키 고 일치 성과 신뢰성 을 보장 하 는 데 도움 이 된다.그럼 어디 에 두 는 게 좋 을까요?
1.3.1 '호출 됨' 의 upstreamupstream 은 Nginx 에서 서버 그룹 (server group) 으로 정의 되 며 proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass 명령 에 의 해 호출 됩 니 다.파일 /etc/nginx/conf.d/upstream-php-dummy.local.conf 에 저장 하면 전체 설정 에 영향 을 주거 나 오염 되 지 않 습 니 다.
upstream php-dummy {
    server unix:/var/run/php5-fpm.sock;
}

파일 은 식별 과 관리 에 편리 하도록 <directive>-<purpose>-<root domain>.conf 형식 으로 3 단 으로 명명 하 는 것 을 권장 합 니 다.
1.3.2 "인 용 됨" 의 다른 설정
상기 지역 upstreamlocation @name 을 제외 하고 다른 설정 은 도 메 인 설정 의 해당 위치 에서 중복 참조 로 불 러 와 야 합 니 다.그래서 보관 /etc/nginx/sites-available/dummy.local.d/cors.conf 은 좋 은 선택 이 고 인용 도 편리 합 니 다.
include sites-available/dummy.local.d/cors.conf;

디 렉 터 리 와 파일 을 sites-available/<root domain>.d/<purpose>.conf 두 단락 으로 명명 하여 식별 과 관리 에 편리 하도록 권장 합 니 다.
1.4 하위 항목 설정
다른 상황 에서 같은 지역 의 체험 표현 은 사실은 여러 프로젝트 가 조합 되 어 이 루어 진 것 이다.예 를 들 어 주 체 는 CMS 이 고 /bbs/ 는 BBS 를 걸 었 다.후자 의 프로필 은 관리 하기 위해 어디 에 두 어야 합 니까?
나의 개인 적 인 방법 은 그것 을 /etc/nginx/sites-available/s.dummy.local.d/50-bbs.sub 로 보관 하 는 것 이다.이렇게 하면 도 메 인 설정 파일 의 모든 location 전에 대량으로 참조 하면 됩 니 다.
include sites-available/s.dummy.local.d/*.sub;

디 렉 터 리 와 파일 을 sites-available/<sub-domain>.d/<priority>-<root-uri>.sub 세 단락 으로 명명 하 는 것 을 권장 합 니 다.
게다가 어색 한 우선 순위 번호 의 원인 은 /bbs/lib/ 하위 항목 의 설정 이 반드시 /bbs/ 하위 항목 설정 전에 인용 되 어야 정상적으로 작 동 할 수 있 지만 대량 인용 시 bbs-lib.subbbs.sub 보다 늦 기 때문이다.우선 순위 번호 가 있 으 면 05-bbs-lib.sub50-bbs.sub 이전에 인용 되 었 음 을 확보 할 수 있다.
1.5 총 결, 역방향 검색 및 후속 유지보수
이 때 Nginx 시스템 설정 디 렉 터 리 는 다음 과 같 아야 합 니 다.
/etc/nginx
├── conf.d
│   ├── upstream-php.conf               #       
│   └── upstream-php-dummy.local.conf   #   upstream     
├── sites-available
│   ├── dummy.local                     #       
│   ├── dummy.local.d
│   │   ├── 05-bbs-lib.sub              #          
│   │   ├── 50-bbs.sub                  #          
│   │   └── cors.conf                   #        
│   ├── s.dummy.local                   #           
│   └── s.dummy.local.d
│       ├── 05-bbs-lib.sub              #              
│       └── 50-bbs.sub                  #              
└── sites-enabled
    ├── dummy.local                     # -> ../sites-available/dummy.local
    └── s.dummy.local                   # -> ../sites-available/s.dummy.local

도 메 인 코드 배치
2.0 모방 Linux 디 렉 터 리 구조
최근 몇 년 동안 저 는 리 눅 스 의 디 렉 터 리 구 조 를 참고 하여 프로젝트 코드 의 디 렉 터 리 구 조 를 나 눌 것 입 니 다. 이렇게 하면 가장 잘 식별 되 기 때 문 입 니 다.
PROJECT
├── bin                         #      
├── etc                         #   
│   ├── cron.d                  #       
│   └── nginx                   #    Nginx   
│       ├── conf.d              #         Nginx   
│       └── sites-available     #   Nginx   
│           ├── ROOT-DOMAIN.d   #        Nginx          Nginx   
│           └── SUB-DOMAIN.d    #       Nginx   
├── include                     #       
├── lib                         #       
│   ├── Controller              #         
│   ├── Model                   #        
│   │   └── DAO                 #           
│   ├── Utility                 #        
│   └── View                    #        
│       └── Helper              #         
├── libexec                     # XGI     
├── share                       #       
│   ├── cron                    #       
│   ├── public                  #       
│   │   ├── .cache              # -> ../../var/cache
│   │   └── .cgi-bin            # -> ../../libexec
│   ├── scss                    #    SCSS     
│   └── static                  #         
└── var                         #   
    ├── cache                   #       
    ├── db                      #      
    └── log                     #   

2.1 잘 사용 하기 /var/www생산 노드 에 배 치 된 후에 다음 과 같 아야 한다.
/var/www
└── dummy.local                         #    
    ├── _bbs.git                        #           
    │   ├── etc
    │   │   └── nginx
    │   │       └── sites-available
    │   │           ├── dummy.local.d
    │   │           │   └── 50-bbs.sub  #          
    │   │           └── s.dummy.local.d
    │   │               └── 50-bbs.sub  #              
    │   └── share
    │       ├── public                  #       
    │       └── static                  #         
    ├── _main.git                       #           
    │   ├── etc
    │   │   └── nginx
    │   │       └── sites-available
    │   │           ├── dummy.local     #          
    │   │           └── s.dummy.local   #              
    │   └── share
    │       ├── public                  #          
    │       │   └── bbs                 # -> ../../../_bbs.git/share/public
    │       └── static                  #            
    │           └── bbs                 # -> ../../../_bbs.git/share/static
    ├── @                               # -> _main.git/share/public
    ├── s                               # -> _main.git/share/static
    ├── www                             # -> @
    └── ~log                            # Nginx     

도 메 인 디 렉 터 리 에서,
  • 모든 _ 기호 가 시 작 된 디 렉 터 리 는 코드 패키지 입 니 다.
  • ~log 디 렉 터 리 는 데이터 발굴 작업 에 필요 한 모든 HTTP 로 그 를 기록 하 는 데 사 용 됩 니 다.
  • 다른 디 렉 터 리 는 모두 자 역 디 렉 터 리 이 고 @ DNS 규약 에 따라 주 역 (근 역) 에서 사용 하 며 내부 파일 과 구 조 는 실제 체험 과 일치 합 니 다.

  • 그러나 주 항목 코드 가 버 전 라 이브 러 리 를 검출 하지 않 으 면 어떻게 해 야 합 니까?같은 디 렉 터 리 구조 에 따라 _ 라 는 디 렉 터 리 를 만들어 대체 하면 된다.보기 만 해도 딱 이지 ~
    이 때 대응 하 는 Nginx 시스템 설정 디 렉 터 리 파일 구 조 는 다음 과 같 습 니 다.
    /etc/nginx
    ├── sites-available
    │   ├── dummy.local                     # -> /var/www/dummy.local/_main.git/etc/nginx/sites-available/dummy.local
    │   ├── dummy.local.d
    │   │   └── 50-bbs.sub                  # -> /var/www/dummy.local/_bbs.git/etc/nginx/sites-available/dummy.local.d/50-bbs.sub
    │   ├── s.dummy.local                   # -> /var/www/dummy.local/_main.git/etc/nginx/sites-available/s.dummy.local
    │   └── s.dummy.local.d
    │       └── 50-bbs.sub                  # -> /var/www/dummy.local/_bbs.git/etc/nginx/sites-available/s.dummy.local.d/50-bbs.sub
    └── sites-enabled
        ├── dummy.local                     # -> ../sites-available/dummy.local
        └── s.dummy.local                   # -> ../sites-available/s.dummy.local

    좋은 웹페이지 즐겨찾기