Nginx 설정 다운로드 파일 을 위 한 예제 코드

가끔 씩 nginx 로 파일 업로드 와 다운 로드 를 실현 한 다 는 말 을 들 었 습 니 다.그 전에 nginx 실천 을 보면 대체적으로 본 적 이 있 고 자세히 연구 하지 않 았 습 니 다.그래서 오늘 은 nginx 에서 파일 의 업로드 와 다운 로드 를 실현 하고 직접 시작 하여 로 컬 서비스 가 시작 되 는 것 을 연구 하고 자 합 니 다.여기에 배치 와 구덩이 밟 기 기록 을 기록 합 니 다.
배치

http {
 ...
 server: {
 #     
  location /download {
   root D:\\download;
   autoindex on;
   autoindex_exact_size off;
  }
 }
 ...
}

이것 은 디 렉 터 리 에 마음대로 놓 인 몇 개의 파일 로 성공 을 볼 수 있다.
여기 몇 개의 구 덩이 를 밟 았 습 니 다.아래 에 힌트 를 드 리 겠 습 니 다.
1.루트 경로 설정 문제
처음 설정 한 alias D:\download,오류 보고:2020/08/14 10:36:06[emerg]26396\#16140:invalid number of arguments in"alias"directive in D:\Program Fileginxginx-1.13.12/conf/nginx.conf:74
그렇다면 74 줄 을 조사해 보 니 점수 가 줄 어 든 데다 문 제 는 여전 하 다.루트 D 로 바 꾸 기:\\download;,오류:2020/08/14 10:44:20[emerg]21376\#17156:D:\\Program Fileginxginx-1.13.12/conf/ngix.conf:74
문 제 는 여전 하 다.나중에 경로 에 문제 가 있다 는 것 을 알 게 되 었 다.잘못 썼 다 면 아마...

root D:/download;
//   
root D:\\download;
이 유 는 다 알 고 있 습 니 다.그냥 전의 문자 입 니 다.
2.루트 와 alias 의 차이
ok,이렇게 설정 하면 됩 니 다.하지만 내 가 입력 하면:http://localhost/download/404 오류 가 발생 했 습 니 다.제 D 디스크 디 렉 터 리 아래 는 D:/다운 로드/*이 고 다른 파일 입 니 다.
시작 오류:2020/08/14 11:02:49[error]9928\#12876:*11 CreateFile()"D:\download\\/download"failed(2:시스템 이 지 정 된 파일 을 찾 을 수 없 음),client:127.0.0.1,server:,request:"GET/download HTTP/1.1",host:"localhost"
이 경 로 를 보 니 D:\download\/download 에 문제 가 있 습 니 다.그래서 루트 D:/download/를 설정 합 니 다.다음/지 웠 습 니 다.다시 시도 하 시 겠 습 니까?오류:2020/08/14 11:04:15[error]3128\#11636:*1 Create File()"D:\download/download"failed(2:The system cannot find the file specified),client:127.0.0.1,server:,request:"GET/download HTTP/1.1",host:"localhost"
그래서 경로 가 아 닌 문 제 를 감안 하면 문제 의 원인 은 어디 에 있 습 니까?루트 와 alias 설정 의 차이 점 에 있 습 니 다.

즉,rootD:/download;부탁http://localhost/download/그 가 찾 는 것 은 D:\download\download
alias D:/download;부탁http://localhost/download/D:\download
그러면 로 컬 경 로 를 바 꾸 겠 습 니 다.D:/다운 로드/다운 로드/*,그리고 다른 파일 이 있 으 면 성공 합 니 다.
3.중국어 파일 문제
그리고 구 덩이 는 전체 영문 이름 파일 을 클릭 하면 정상적으로 미리 보기 하여 다운로드 한 것 이 고 중국어 이름 파일 이 잘못 되 었 습 니 다.server 세그먼트 에 charset utf-8 추가 하기;안 되 거나charset gbk,utf-8;안 됩 니 다.분명 한 것 이 있 습 니 다.번 거 로 우 시 겠 지만 아낌없이 가르쳐 주 십시오.감사합니다.
오랫동안 생각하면 nginx 설정 의 문제 가 아 닐 것 입 니 다.왜냐하면 많은 곳 에서 이렇게 설정 하면 중국 어 를 표시 할 수 있다 고 말 하기 때 문 입 니 다.그리고 시스템 인 코딩 문제 가 아 닐 까 생각 했 어 요.나 는 로 컬 로 서버 를 만든다.chcp 명령 을 사용 하여 시스템 인 코딩 을 확인 하여 936 을 표시 합 니 다.일반적으로 중국 어 를 정상적으로 표시 할 수 있 는 것 은 936 인 데,그것 은 문제 가 없다 는 것 을 설명 한다.
중국 어 는 정상 적 인 것 으로 나 타 났 지만**의 것 은 한 시 에 잘못 신고 하거나 어 지 럽 히 거나 404 입 니 다.중국어 이름 파일 다운 로드 를 직접 클릭 하거나 중국어 이름 디 렉 터 리 를 탐색 할 수 없습니다.
중국어 이름 파일 다운 로드 는 파일 이름 을 복사 한 다음 브 라 우 저 url 뒤에 붙 이면 다운로드 할 수 있 습 니 다.중국어 이름 디 렉 터 리 는 정말 탐색 할 수 없습니다!!
이 유 는 windows 서버 의 중국 어 는 gbk 인 코딩 입 니 다.nginx 의 이러한 페이지 의 href 는 gbk 로 urlencode 를 한 다음 에 일반 브 라 우 저 는 utf-8 을 사용 하기 때문에 당연히 방문 할 수 없습니다.
4.브 라 우 저가 파일 을 다운로드 하지 않 고 자동 으로 파일 을 여 는 것 을 방지 하려 면 추가

add_header Content-Disposition "attachment;";

//         
location / {
 add_header Content-Disposition "attachment;filename*=utf-8'zh_cn'$arg_n";
}
일반적으로 서버 에 저 장 된 파일 은 원래 이름 을 사용 하지 않 기 때문에 다운로드 할 때 이름 을 바 꿔 야 합 니 다.url 에 인 자 를 추가 한 다음 nginx 에서 매개 변수 에 따라 이름 을 바 꿀 수 있 습 니 다.
예:인 자 는 n=xxx.jpg 입 니 다.
url:https"//xxxx?n=xxx.jpg//다운로드 한 파일 이름 을 xxx.jpg 로 바 꾸 는 것 을 의미 합 니 다.
nginx 설정 필요

location / {
  if ($request_uri ~* ^.*\?n=([^&]+)$) {
    add_header Content-Disposition "filename*=$arg_n";
  }
}
설명:안의 utf-8 은 일부 브 라 우 저 에서 자동 으로 파일 을 urlencode 형식 으로 바 꿉 니 다.
보통 1,2 는 다 같이 해 야 돼 요.

location / {
  if ($request_uri ~* ^.*\?n=([^&]+)$) {
    add_header Content-Disposition "attachment;filename*=$arg_n";
  }
}
여기 서 Nginx 설정 이 다운로드 파일 을 실현 하 는 예제 코드 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 Nginx 다운로드 파일 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기