Nginx 정적 서비스 설정 - 루트 와 alias 명령 을 자세히 설명 합 니 다.
Nginx 는 고성능 으로 유명 하 며 전단 역방향 프 록 시 서버 를 자주 사용 합 니 다.또한 nginx 는 고성능 정적 파일 서버 이기 도 합 니 다.보통 정적 파일 을 nginx 로 처리 합 니 다.
nginx 의 정적 파일 을 설정 하 는 데 는 두 개의 명령 이 있 습 니 다. 하나의 root 와 하나의 alias 가 있 습 니 다.이 두 명령 에 대해 경로 뒤에 슬 래 쉬 를 붙 여야 하 는 지 여 부 는 사람 을 어 지 럽 히 기 쉽다. 본 고 는 서로 다른 일치 규칙 을 시도 함으로써 비교적 통용 되 는 설정 방식 을 요약 했다.
기본 설정
간단 한 Nginx Location Url 설정 노트 와 같이 본 고 는 vagrant 가상 컴퓨터 의 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
각각 두 개의 정적 폴 더 가 있 는데 하 나 는 static 이 고 다른 하 나 는 upload 입 니 다.
처음 본 루트
루트 는 지정 한 항목 의 루트 디 렉 터 리 로 server 와 location 에 적 용 됩 니 다.여러 개 를 지정 할 수 있 습 니 다. location 이 지정 되 지 않 으 면 외부 server 나 http 에서 계승 을 찾 습 니 다.
방문
http://192.168.33.10/static/stc.jpg
하면 그림 이 되 돌아 온 것 을 발견 할 수 있 습 니 다.우 리 는 아직 location 를 설정 하지 않 았 는데, 왜 파일 을 정확하게 찾 을 수 있 습 니까?root
또는 alias
명령 을 배 울 때 가장 좋 은 방법 은 파일 확장자 에 문 자 를 붙 여 하 드 디스크 에 존재 하지 않 게 하 는 것 이다. 그러면 nginx
의 error.log
에서 nginx 가 파일 을 찾 는 방식 을 볼 수 있다.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
파일 이 존재 하지 않 습 니 다.확실히 우 리 는 이 서류 가 없다.파일 이름 이 정확 하면 접근 할 수 있 습 니 다. server 에서 지정 한 root /vagrant/pro
때 문 입 니 다. 이 디 렉 터 리 에서 파일 을 찾 습 니 다. url 의 주 소 는 파일 의 경로 와 일치 하기 때 문 입 니 다. http://192.168.33.10 /static/stc.jpg
/vagrant/pro /static/stc.jpg
이 를 통 해 nginx 에서 root 명령 의 주 소 는 일치 하 는 url 의 host 를 바 꾼 것 으로 추정 된다.
루트 명령 어
위의 추측 을 검증 하기 위해 서 는 몇 개의 location 을 더 써 서 실험 을 해 야 한다.다음 위치 설정 을 추가 합 니 다:
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
하나의 static 로 인식 하고 위의 규칙 을 사용 합 니 다. 그 조합 은 192.168.33.10
= = /vagrant/pro/static
이 고 url 은 /static/stc.jpg
입 니 다.교환 하면 /vagrant/pro/static
+ /static/stc.jpg
를 얻 을 수 있 습 니 다.잘못된 error 와 일치 합 니 다.해결 방안 은 루트 의 static 를 제거 하면 바로 그림 에 접근 할 수 있 습 니 다.그렇다면 폴 더
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 을 수정 하려 고 시도 합 니 다.location ^~ /stc {
root /vagrant/pro;
}
url 이 바 뀌 었 기 때문에 방문
http://192.168.33.10/stc/stc.jpg
해 야 그림 을 찾 을 수 있 습 니 다.이제 stc 폴 더 를 static 로 바 꿉 니 다.루트 와 슬 래 쉬
많은 사람들 이 경로 의 마지막 평행봉
/
을 추가 해 야 하 는 지 의 심 스 러 울 것 이다.location 의 static 뒤의 슬 래 쉬 는 일치 하 는 url 과 관련 이 있 으 며 더 이상 군말 하지 않 습 니 다.루트 의 경로 의 슬 래 쉬 /
는 다시 실험 을 통 해 확인 할 수 있 습 니 다.위 치 를 다음 과 같이 설정 합 니 다:location ^~ /static/ {
root /vagrant/pro/;
}
접근
http://192.168.33.10/static/stc.jpg
모든 것 이 정상 입 니 다. 접근 http://192.168.33.10/static/stc.jpg
, error 는 "/ vagrant / pro / static / stc. jpgs" 파일 을 찾 을 수 없습니다.루트 에 따라 host 를 바 꾸 는 규칙 이 있다 면, 바 꾸 는 과정 은?
/vagrant/pro/
+ /static/stc.jpg
== /vagrant/pro//static/stc.jpg
。* nix 시스템 에서 여러 개의 철봉 과 하나의 철봉 은 등가 이다. 즉 /vagrant/pro//static/stc.jpg
은 /vagrant/pro/static/stc.jpg
와 같다.이렇게 되면 루트 경로 뒤의 슬 래 쉬 바 는 효과 가 없 는 것 과 같 습 니 다.그렇다면 이런 설정 을 생각 하 는 사람 이 있 을 것 이다.
location ^~ static/ {
root /vagrant/pro;
}
설치 하기 전에 위 에 있 는 알고리즘 이 있 으 면
/vagrant/pro
+ static/stc.jpg
일 것 입 니 다. 더 한 것 은 /vagrant/prostatic/stc.jpg
일 것 입 니 다. 이치 에 따 르 면 잘못된 것 같 지만 사실은 그림 에 접근 할 수 있 습 니 다.괴이 한 일?앞의 nginx location 의 url 일치 규칙 에 대해 알 고 있다 면 사실
^~ static/
이 일치 하지 않 음 을 알 수 있 을 것 입 니 다.위치 수정location ^~ static/ {
rewrite ^ http://google.com;
# root /vagrant/pro;
}
방문
http://192.168.33.10/static/stc.jpg
은 여전히 그림 을 얻 을 수 있 습 니 다. 구 글 을 뛰 지 않 았 다 는 것 은 일치 하지 않 았 다 는 것 을 의미 합 니 다 ^~ static/
.사실 원리 도 간단 합 니 다. 우리 의 첫 번 째 실험 을 기억 합 니 다. 패션 이 location 를 설정 하지 않 았 을 때 도 그림 으로 돌아 갈 수 있 습 니 다.맞습니다.
^~ static/
일치 하지 않 음 에 도 불구 하고 바깥쪽 server 는 root 를 /vagrant/pro
로 정의 하 였 으 므 로 그림 을 검색 하여 정상적으로 되 돌려 주 고 바깥쪽 root 를 주석 하여 다시 방문 합 니 다.404 를 얻 을 수 있 습 니 다. error 는 다음 과 같 습 니 다.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
이런 상황 은 존재 하지 않 는 다.이 곳 을 이해 하 는 관건 은 루트 가 host 를 교체 하고 일치 하 는 url 을 추가 하 는 것 입 니 다. 일치 하 는 url 은 당연히 앞의 슬 래 쉬 를 포함 하고 일치 하 는 부분의 url 은 그렇지 않 습 니 다.~ static/stc.jpgs?
모드 에 대해 url http://192.168.33.10/static/stc.jpg
방문이것 을 파악 하 는 것 은 매우 중요 하 며, 뒤쪽
alias
명령 과 평행봉 의 관계 와 직 결 된다.루트 명령 에 대해 우 리 는 귀납 할 수 있다.
alias 명령 어
루트 에 대해 서 는 루트 주 소 를 host 로 바 꾸 면 하 드 디스크 경로 (실제 주소) 에 파일 이 있 습 니 다.alise 에 대해 서 는 일치 하 는 url 주 소 를 바 꾸 는 것 이 아니 라 일치 하 는 부분의 url 을 바 꾸 는 것 입 니 다.alias 명령 도 여러 개 있 을 수 있 습 니 다.
location 을 추가 합 니 다. 루트 와 거의 같 습 니 다.
location ^~ /upload {
alias /vagrant/pro;
}
접근
http://192.168.33.10/upload/up.png
그림 이 없습니다. error 를 보면 다음 과 같 습 니 다.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"
이 를 통 해 알 수 있 듯 이 alias 의 모델 은
/vagrant/pro
+ /upload/up.png
가 아니 라 /vagrant/pro
+ /up.png
이다.alias 라 는 단 어 는 컴퓨터 에서 자주 사용 되 는데 글자 그대로 '별명' 이라는 뜻 으로 이름 을 바 꾸 는 것 이 바로 이름 을 바 꾸 는 것 이다.실제 교체 규칙 은 일치 하 는 url 주 소 를 alias 의 경로 로 바 꾸 면 됩 니 다.예 를 들 어 상기 사례 교체 과정 은 다음 과 같이 모 의 할 수 있다.
프로 세 스
패턴 또는 url
url 모드
^~ /upload
alias 경로
/vagrant/pro
접근 주소
http://192.168.33.10/upload/up.png
일치 하 는 부분 주소
/upload + /up.png
바꾸다
/upload == /vagrant/pro
결실
/vagrant/pro + /up.png
그림 접근 을 수정 하기 위해 locaton 을 다음 과 같이 수정 합 니 다.
location ^~ /upload {
alias /vagrant/pro/upload;
}
이때 방문
http://192.168.33.10/upload/up.png
하면 정확 한 그림 을 얻 을 수 있 습 니 다. 위의 계산 과정 을 모방 하면:프로 세 스
패턴 또는 url
url 모드
^~ /upload
alias 경로
/vagrant/pro/upload
접근 주소
http://192.168.33.10/upload/up.png
일치 하 는 부분 주소
/upload + /up.png
바꾸다
/upload == /vagrant/pro/upload
결실
/vagrant/pro/upload + /up.png
결 과 를 통 해 알 수 있 듯 이 파일 경 로 를 정확하게 찾 았 습 니 다. 만약 에 alias 명령 경로 에 슬 래 쉬 를 더 하면 처리 한 파일 경 로 는 다음 과 같 습 니 다.
/upload == /vagrant/pro/upload
/vagrant/pro/upload/ + /up.png
여러 개의 평행봉 은 합법적이다.평행봉 과 같은 상황.
아래 에서 location 을 다음 과 같이 수정 합 니 다.
location ^~ /upload/ {
alias /vagrant/pro/upload;
}
이 때 일치 하 는 url 은
/upload/ + up.jpg
로 바 뀌 었 습 니 다. 그러면 바 꾼 결 과 는 /vagrant/pro/upload
+ up.png
이 고 /vagrant/pro/uploadup.png
의 경 로 는 불법 입 니 다. error 에서 도 바 꾼 오 류 를 볼 수 있 습 니 다.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/
로 바 꾸 면 된다.이 를 통 해 알 수 있 듯 이 alias 의 마지막 슬 래 쉬 는 루트 명령 처럼 있 으 나 마 나 하지 않 습 니 다. 필요 한 지 여 부 는 loacation 의 url 매 칭 모드 에 달 려 있 습 니 다.앞의 루트 모드 에서 뿌리 가 없 는 슬 래 쉬
~ static/stc.jpgs?
를 고려 하면 alias 의 경우 오 류 를 포착 하기 어 려 울 수 있 습 니 다.location 설정 이 다음 과 같 으 면:location ^~ upload/ {
alias /vagrant/pro/upload/;
}
바 꾼 파일 경 로 는
/vagrant/pro/upload/up.png
이 어야 합 니 다. 그러나 실제 테스트 에서 alias 를 설정 하면 301 의 방향 을 바 꿀 수 있 습 니 다. alias 디 렉 터 리 가 autoindex 를 열지 않 으 면 403 오류 가 발생 합 니 다.구체 적 인 상황 은 아직 알려 지지 않 았 습 니 다. nginx 의 bug 인지 아 닌 지 모 르 겠 습 니 다.이러한 상황 을 피하 기 위해 alias 를 사용 할 때 location ^~ upload/
모드 를 설정 하지 않 고 루트 에서 url 을 지정 하지 않 아 도 이도 저도 아 닌 것 처럼 보 입 니 다.alise 는 별명 으로서 루트 보다 url 의 경로 가 파일 경로 와 같 지 않 아 도 된다 는 것 이 좋 습 니 다. alise 는 host 를 교체 하 는 것 이 아니 라 일치 하 는 부분의 host 를 교체 하 는 것 이기 때 문 입 니 다.설정 수정:
location ^~ /upload/ {
alias /vagrant/pro/static/;
}
url 에 upload 가 있 음 에 도 불구 하고 static 디 렉 터 리 에 있 는 파일 에 접근
http://192.168.33.10/upload/stc.jpg
하거나 http://192.168.33.10/upload/flask/m.png
할 수 있 습 니 다.교체 규칙 도 간단 하 다.
/upload/
= /vagrant/pro/static/
획득 /vagrant/pro/static/
+ stc.jpg
또는 /vagrant/pro/static/
+ flask/m.png
.총결산
nginx 의 정적 파일 설정 에서 루트 와 alias 명령 이 모두 실 현 됩 니 다.헷 갈 리 지 않도록 루트 경로 가 없 는 url 모드 를 쓰 지 마 세 요. 즉,
static/
와 같은 시작 을 피하 고 루트 경로 의 슬 래 쉬 는 유지 해 야 합 니 다. 루트 경로 가 없 는 것 도 이상 합 니 다.루트 와 alias 의 차 이 는 주로 교체 하 는 부분 에 있 습 니 다. 루트 모드 에 서 는 루트 설정 경 로 를 일치 하 는 url 의 host 로 바 꿉 니 다.alias 는 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 를 알 게 된 후에 가장 좋 은 것 은 프로젝트 의 루트 를 설정 하 는 것 이 고 다른 폴 더 는 alias 를 사용 합 니 다. 왜냐하면 alias 는 더욱 유연 하기 때 문 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.