Nginx의 정적 서비스 구성 --- 자세한 설명 루트 및 별명

Nginx의 정적 서비스 구성 --- 자세한 설명 루트 및 별명

(96)

정적 파일

Nginx에는 높은 성능 알려져 있으며, 일반적인 프론트 엔드 리버스 프록시 서버를 확인합니다. 한편의 nginx는 고성능 정적 파일 서버입니다. 의 nginx 프로세스를 사용하여 정적 파일의 보통 응용 프로그램입니다.

Nginx의 정적 구성 파일은 두 지시, 루트 및 별칭을 가지고있다. 이 두 가지 지침은 경로에 대한 필요가 백 슬래시와 함께, 종종 쉽게보다 일반적인 구성에 요약 다른 일치하는 규칙을 시도하여 본 Fanyun합니다.

기본 구성

그리고 간결 Nginx에 위치 URL 구성 노트 동일한 테스트 위치 URL 구성에 관한 기사, 우리는의 nginx의 방랑 가상 머신을 사용합니다. 다음과 같이 기본 구성은 다음과 같습니다

/etc/nginx/sites-enabled/pro.conf

server {
        listen 80 default_server;


        server_name localhost;

        access_log /var/log/nginx/pro/access.log;
        error_log /var/log/nginx/pro/error.log;

        error_page 404 /404.html;

        root /vagrant/pro;
        index index.html index.htm;

}

다음과 같이 프로젝트의 디렉토리는 다음과 같습니다

☁  pro  tree
.
├── 403.html
├── 404.html
├── index.html
├── static
│   ├── flask
│   │   └── m.png
│   └── stc.jpg
└── upload
    └── up.png

3 directories, 6 files

두 개의 폴더가 여전히 있었다, 하나는 정적이며, 다른 하나는 업로드입니다.

아는 사람 루트

루트는 지정된 항목, 애플리케이션, 서버 및 위치의 루트 디렉토리입니다. 당신은 locaiton가 지정되지 않은 경우, 서버 또는 http 자사의 외부 층을 상속 모양, 여러 지정할 수 있습니다.

액세스 http://192.168.33.10/static/stc.jpg사진을 찾을 수는 반환했습니다. 우리는 당신이 바로 파일을 찾을 이유 위치를 구성되지 않은? 학습 root또는 alias시간 명령, 가장 좋은 방법은 당신이 할 수에서, 파일이 하드 드라이브에 존재하지 않도록, 문자와 파일 이름을 확장하는 것입니다 파일의 nginx보기를 참조하십시오.nginxerror.log

액세스 http://192.168.33.10/static/stc.jpgx및보기 /var/log/nginx/pro/error.log파일은 다음과 같은 오류 메시지가 나타날 수 있습니다 :

2016/09/28 07:41:48 [error] 4416#0: *70 open() "/vagrant/pro/static/stc.jpgx" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpgx HTTP/1.1", host: "192.168.33.10"

/vagrant/pro/static/stc.jpgx파일이 존재하지 않습니다. 우리는이 파일을 가지고 있지 않았다. 파일 이름이 올바른 경우, 서버에 지정된에 의한이며, 방문 할 수 있습니다 root /vagrant/pro,이 시간의 nginx는 디렉토리에있는 파일 및 URL을 주소로 일관 경로, 단지 및 파일을 찾습니다

 http://192.168.33.10  /static/stc.jpg 
 /vagrant/pro          /static/stc.jpg

나는 사실, 교체, 지시 루트에, Nginx에 주소를 추측 할 수 일치 한 후 호스트에 URL을.

루트 명령

위의 추측을 확인하기 위해 필요는 실험 몇 위치를 작성합니다. 다음과 같이 구성된 위치를 추가합니다 :

location ^~ /static {
    root /vagrant/pro/static;
}

액세스 다시 http://192.168.33.10/static/stc.jpg, 결과는 다음과 같이하는 error.log가 돌려 볼 수있는 사진을 표시하지 않습니다 :

2016/09/28 07:48:57 [error] 5978#0: *71 open() "/vagrant/pro/static/static/stc.jpg" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpg HTTP/1.1", host: "192.168.33.10"

nginx를이 주소로 확인 /vargrant/pro/static/static/stc.jpg정적보다, 위의 규칙이 적용, 조합 192.168.33.10== /vagrant/pro/static, URL입니다 /static/stc.jpg. 교체 얻을 수 있습니다 /vagrant/pro/static+ /static/stc.jpg. 잘못된 오류과 일치. 이 솔루션은 즉시 사진에 액세스 할 수 있습니다, 정적의 뿌리를 제거하는 것입니다.

그 이후로 폴더가되어 static이름 stc, 결과가 일어날 것인가?

location ^~ /static {
    root /vagrant/pro;
}

액세스 http://192.168.33.10/static/stc.jpg오류를 얻을 :

2016/09/28 07:54:46 [error] 5992#0: *73 open() "/vagrant/pro/static/stc.jpg" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpg HTTP/1.1", host: "192.168.33.10"

경로를 계산 /vagrant/pro+ /static/stc.jpg찾기 수 없습니다, /vagrant/pro/static/stc.jpg규칙 이전에, 위치를 수정하려고했다 맞춰, 파일 :

location ^~ /stc {
    root /vagrant/pro;
}

URL이 변경되기 때문에, 액세스 http://192.168.33.10/stc/stc.jpg사진을 찾을 수 있습니다. 이제 다시 정적에 STC 폴더에 있습니다.

루트 및 슬래시

궁금해 많은 사람들이, 마지막으로 경로를 슬래시 /당신이 그것을 추가하려면? 슬래시와 유사한 관련 URL 뒤에 고정 위치는 생략한다. 루트의 경로에 슬래시 /다음 실험에 의해 결정될 수있다. 다음과 같이 위치가 구성된다 :

location ^~ /static/ {
   root /vagrant/pro/;
}

액세스 http://192.168.33.10/static/stc.jpg모든 일반 액세스 http://192.168.33.10/static/stc.jpg, 오류가 "/vagrant/pro/static/stc.jpgs"파일을 찾을 수 없습니다.

당신은 대체 호스트 루트의 규칙을 따라야 경우, 교체 과정이다

/vagrant/pro/+ /static/stc.jpg== /vagrant/pro//static/stc.jpg. 유닉스 용 시스템에있어서, 슬래시 복수은 즉 동등 슬래시 /vagrant/pro//static/stc.jpg/vagrant/pro/static/stc.jpg동일.

그 결과, 루트 경로는 다시, 같은 효과없이, 슬래시. 경우 인 것을 분명히 누군가가 이러한 구성의 생각 :

location ^~ static/ {
    root /vagrant/pro;
}

설치하기 전에입니다 위의 알고리즘은, 당신이해야하는 경우 /vagrant/pro+ static/stc.jpg, 합계해야 /vagrant/prostatic/stc.jpg하고, 일반적으로 잘못된해야하지만, 실제로 이미지에 액세스 할 수 있었다. 그 이상한?

이전 URL 매칭 이해하는 텍스트의 nginx 위치를 규칙 경우, 실제로 조심해야 ^~ static/와 일치 할 수 없다. 위치를 수정

location ^~ static/ {
    rewrite ^ http://google.com;
   # root /vagrant/pro;
}

액세스는 http://192.168.33.10/static/stc.jpg여전히 사진을 얻을 수 있습니다, 구글을 뛰어하지 않습니다 노트는 일치하지 않습니다 ^~ static/.

사실, 원리, 나는 아직도 우리의 첫 번째 실험은 또한 그림을 반환 할 수 있습니다, 위치를 설정하지 않은 매우 간단한 기억된다. 하지만 예, ^~ static/서버의 외부 층이 루트로 정의되는 동안 일치가 없다 /vagrant/pro, 그래서 정상으로 이미지가 다시 검색, 외부 루트 층 한 다음 다시 한 번 방문, 언급. 이 시간이 404이 될 것이다에서, 다음과 같은 오류를 참조하십시오

2016/09/28 08:18:15 [error] 6227#0: *82 open() "/usr/share/nginx/html/static/stc.jpg" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpg HTTP/1.1", host: "192.168.33.10"

/usr/share/nginx/html/static/stc.jpg당신이 루트를 지정하지 않은 경우에도, nginx를 기본도 뿌리를 가지고 있음을 나타냅니다 /usr/share/nginx/html. 물론,이 구성과 ^~ static/는 문제가되지 않습니다.

경우 ~ static/stc.jpgs?당신이 칠 수있다, 그림이 시간 액세스, 아직 정확한 해상도는, 그러므로 존재하지 않는 수 /vagrant/pro+ static/stc.jpg케이스. 루트 키는 이러한 다른 호스트와 일치하는 URL을 첨가가 매칭 과정 전방 슬래시 포함되는 URL을 이해해야한다, URL 일치 부분이 아니다.

를 들어 ~ static/stc.jpgs?모델, 방문 URLhttp://192.168.33.10/static/stc.jpg

  • URL 경기가 /static/stc.jpg이 후
  • URL과 일치하는 부분이 정적 / stc.jpg

이는 직접 뒷면 관련된 마스터 매우 중요 alias명령어와 슬래시 관계.

루트 명령의 경우, 우리는 요약 할 수 있습니다.

  1. 경기 후 URL 주소를 들어, 루트 경로 위치는 URL이 파일의 실제 주소를 가져 호스트 액세스를 대체 일치합니다. (사실 다중 슬래시 슬래시 상당)
  2. 당신이 위치와 일치하지 않는 경우, 대체 할 더 많은 일을 할 수있는 루트의 외부 층을 찾습니다.
  3. 마지막 명령 루트 슬래시가 증가하는 시간에서 추가 할 수 있습니다.

alias 명령

루트의 경우, 작동에는 대체 호스트 루트 주소가 하드 경로에있는 파일 (실제 주소)와 같이 매우 간단합니다. ALISE를 들어, URL 주소 매칭, 대신 일치하는 부분 URL을 대체하지 않습니다. 지침 복수의 별칭도 할 수있다.

위치, 거의 같은 방식의 루트를 추가 :

location ^~ /upload {
   alias /vagrant/pro;
}

액세스 http://192.168.33.10/upload/up.png없이 사진, 오류를 볼 수 :

2016/09/28 08:36:18 [error] 6312#0: *90 open() "/vagrant/pro/up.png" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /upload/up.png HTTP/1.1", host: "192.168.33.10"

이 모델은 볼 수 별칭하지 /vagrant/pro+ /upload/up.png그러나 /vagrant/pro+ /up.png.

단어 그대로 "별칭"를 의미하는 컴퓨터에서 매우 일반적인 별칭 구 이름 인크레더블 다른 이름이있다. 실제 교체 규칙은 URL 주소와 일치하는 별명의 경로를 대체하는 것입니다. 예를 들어, 다음과 같이 상기 예 대체 공정을 시뮬레이션 할 수있다 :

방법 모드 또는 URL
URL 모드 ^ ~ / 업로드
별칭 경로 / 방랑 / 프로
액세스 주소 http://192.168.33.10/upload/up.png
주소 경기의 일부 업로드 / + /up.png
교체 업로드 / == / 방랑 / 프로
결과 / 방랑 / 프로 + /up.png

다음과 같이 locaton을 수정, 액세스 사진을 수정하기 위해 :

location ^~ /upload {
    alias /vagrant/pro/upload;
}

이 경우 액세스는 http://192.168.33.10/upload/up.png다음과 같이가, 위의 계산을 복사 할 권리 사진을 얻을 수있을 것입니다 :

방법 모드 또는 URL
URL 모드 ^ ~ / 업로드
별칭 경로 / 방랑 / 프로 / 업로드
액세스 주소 http://192.168.33.10/upload/up.png
주소 경기의 일부 업로드 / + /up.png
교체 / == / 방랑 / 프로 / 업로드를 업로드
결과 / 방랑 / 프로 / 업로드 + /up.png

결과에서 볼 수 있듯이, 우리는 alias 명령 경로 슬래시 경우, 파일 경로 계산 과정은 다음과 같다, 올바른 파일 경로를 찾을 수 :

/upload == /vagrant/pro/upload
/vagrant/pro/upload/ + /up.png

여러 슬래시는 합법적이다. 이 경우 슬래시 동등하다.

수정 내용의 locaiton은 다음과 같습니다

location ^~ /upload/ {
   alias /vagrant/pro/upload;
}

경기가 될 URL에서 /upload/ + up.jpg, 결과의 교체는 /vagrant/pro/upload+ up.png, 및 /vagrant/pro/uploadup.png경로가 불법 오류는 잘못된 교체에서 볼 수있다 :

2016/09/28 08:52:44 [error] 6452#0: *92 open() "/vagrant/pro/uploadup.png" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /upload/up.png HTTP/1.1", host: "192.168.33.10"

이 솔루션은 간단은 /vagrant/pro/upload변경 /vagrant/pro/upload/될 수있다. 따라서, 별명 최종 슬래시는 loacation와 일치하는 URL 패턴에 따라 필요한 경우, 루트 명령과 같은 비용 소비하지 않습니다.

전술 한 루트 모드는 뿌리 (없이 슬래시 고려 ~ static/stc.jpgs?상황이 오류를 잡기 어려울 것이다 별명이 경우 참조). 다음과 같이 locaion 구성하는 경우 :

location ^~ upload/ {
      alias /vagrant/pro/upload/;
}

파일 경로 교체해야합니다 교체 /vagrant/pro/upload/up.png하지만, 별칭 카탈로그가 열려 자동 색인이없는 경우 실제 시험이 구성 별칭은 항상 301 리디렉션을 초래할 것, 그것은 403 오류가 발생합니다. 구체적인 상황은 아직의 nginx의 버그 경우, 모르는 알려져 있지 않다. 이를 방지하려면 별칭을 사용의 위치를 구성하지 않으려 ^~ upload/모델, 루트에서 URL을 지정하지 않거나 물고기도 새도를 보인다.

ALISE 대신 호스트 매칭의 일부를 호스트를 교체하지만 때문에 ALISE 별명은 반드시 큰 장점에 비해 루트 URL의 경로 및 파일 경로와 동일하지 않습니다. 구성이 다음과 같은 수정 :

location ^~ /upload/ {
    alias /vagrant/pro/static/;
}

액세스 http://192.168.33.10/upload/stc.jpg또는 http://192.168.33.10/upload/flask/m.pngURL이 업로드하더라도, 정적 디렉토리에 올바른 파일을 액세스 할 수 있습니다.

교체 규칙은 매우 간단, /upload/== /vagrant/pro/static/얻을 /vagrant/pro/static/+ stc.jpg/vagrant/pro/static/+ flask/m.png.

개요

nginx를 정적 구성 파일, 루트 및 별칭 명령을 달성 할 수있다. 혼동을 피하기 위해, URL 모드가 루트 경로가 아닌 작성하지 않으려 고, 그 피하기 위해 static/이러한 시작을, 루트 경로슬래시가 유지 될 필요가 뿌리 경로는 실제로 매우 이상한 거기 없다.

별칭 부분 루트 사이에서, 그 주된 차이는, 루트 패스 후에 배치 루트 대체 모드, url은 호스트의 매칭을 대체 할 것이다. 그의 별명 지정된 경로, URL을 일치 교체 섹션을 넣어. 지침 ALISE가 일치 할 대체 규칙에 따라, 루트 명령에 영향을 슬래시 없습니다.

루트 명령

location /dir/ 
root root_path ->  http://host/dir/file.txt  -> root_path/dir/file.txt

alias 명령

location /dir
alias alias_path ->  http://host /dir /file.txt  -> alias_path/file.txt

location /dir/ 
alias alias_path/ ->  http://host /dir/ file.txt  -> alias_path/file.txt

루트 및 ALISE 알고, 일반적으로 가장 좋은 방법은, 다른 폴더는 결국 별칭, 별명을 사용하는 프로젝트 루트 루트를 구성, 더 유연

추천

출처www.cnblogs.com/suguangti/p/11334715.html