nginx+lua를 사용하여 파일 업로드 및 다운로드 서비스 설정 문제를 해결하는 방법
Main logic
Upload
프론트엔드는 nginx 서비스를 요청하고, nginx는 업로드 스크립트를 호출하며, 스크립트는 다음과 같은 방법으로 해당 논리적 저장소 경로와 에이전트의 IP 및 물리적 저장소 머신의 포트를 찾습니다. 구성을 검색하고 tcp를 통해 패키지를 해당 에이전트로 전송하며, 해당 머신에 배포된 에이전트는 데이터를 수신하여 로컬 파일에 씁니다.
Download
http 다운로드 요청 nginx, nginx는 다운로드 스크립트를 호출하고, 스크립트는 링크 매개변수를 구문 분석하고, 매개변수에 따라 해당 에이전트 주소를 찾고, 파일 바이너리 콘텐츠를 반환하도록 요청합니다. 스크립트는 반환된 데이터를 받습니다. 에이전트에 의해 요청 측으로 반환됩니다.
Configure nginx++lua
다음으로 nginx 설치 구성에 대해 주로 설명하겠습니다. (여기에는 lua의 바이너리 스트림 처리 lpack, md5 계산, mysql 작업, json 작업이 포함됩니다.)
1 nginx 설치
Download
Unziptar -xvf nginx-1.10.3.tar.gz
2. luajit(경량 lua) 설치
makefile 내보내기 접두사 = /usr/local/luajit
에서 설치 경로를 수정한 다음 make를 설치하고 make install
3 nginx_lua_module을 설치합니다
Download
Unzip
4. ngx_devel_kit을 설치합니다(ndk는 일부 기본 작업을 처리하기 위한 함수와 매크로를 제공하여 타사 모듈 개발을 위한 코드 양을 줄입니다)
Download
5 설치 및 컴파일, 가져오기
export luajit_lib=/usr/local/luajit/lib export luajit_inc=/usr/local/luajit/include/luajit-2.0 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/home/oicq/jeffzhuang/ngx_devel_kit-0.3.0 --add-module=/home/oicq/jeffzhuang/lua-nginx-module-0.10. make -j2 make install
/usr/local/ 시작 nginx/sbin/nginx 재시작 명령 ` usr/local/nginx/sbin/nginx -s reload v
오류가 보고되고 luajit 라이브러리를 찾을 수 없는 경우 ln -s /usr/local/lib/libluajit-5.1.so .2 /lib64/libluajit-5.1.so.2
nginx를 테스트하려면 http:10.x.x.x:8080에서 직접 브라우저를 열면 환영 인터페이스를 볼 수 있습니다
6. conf/nginx.conf를 구성하여 실행하세요. lua 스크립트
lua 라이브러리 lua_package_path, lua_package_cpath
7.mysql.lua 다운로드를 추가하고
8.csjon
makefile을 수정하세요. =/usr/local/luajit은 make 후에 생성될 luajit의 설치 경로입니다. cjson.so를
lua_package_cpath 디렉터리
9에 복사하면 이미 만들어진 lpack.lua를 사용할 수 있습니다. lua_package_path에 복사하거나 https://github.com/luadist/lpack을 사용하여 lpack.so를 컴파일 및 생성하고 lua_package_cpath에 복사합니다. 64비트 필요 컴파일 명령 추가 - fpic
10, upload.lua download
11, md5 download
main code
1, front-end upload page code
<!doctype html> <html> <head> <title>file upload example</title> </head> <body> <form action="emer_upload/order_system_storage" method="post" enctype="multipart/form-data"> <input type="file" name="testfilename"/> <input type="submit" name="upload" value="upload" /> </form> </body> </html>
2, upload upload code, 이 모듈은 파일 업로드 요청을 파싱하는 과정에서 주로 유한 상태와 유사한 간단한 알고리즘을 사용하여 구현됩니다. 기계와 다른 상태는 해당 핸들러에 의해 처리됩니다.
--文件下载服务写到 saverootpath .."/" .. filename 下面 function download() local chunk_size = 4096 local form,err=upload:new(chunk_size) if not form then ngx.log(ngx.err, "failed to new upload: ", err) ngx.exit(ngx.http_internal_server_error) end form:set_timeout(100000) while true do local typ,res,err=form:read() if not typ then errormsg="failed to read :"..err return 1 end if typ =="header" then local key=res[1] local value=res[2] if key =="content-disposition" then local kvlist=string.split(value,';') for _, kv in ipairs(kvlist) do local seg = string.trim(kv) if seg:find("filename") then local kvfile = string.split(seg, "=") filename = string.sub(kvfile[2], 2, -2) if filename then --获取文件后缀名字 fileextension=getextension(filename) local linuxtime=tostring(os.time()) filepath=saverootpath .."/" ..linuxtime..filename filetosave,errmsg = io.open(filepath, "w+") --存储的文件路径 --ngx.say("failed to open file ", filepath) if not filetosave then --ngx.say("failed to open file ", filepath .. errmsg) errormsg="打开文件失败"..filepath .. errmsg return 1 end else errormsg="请求参数找不到文件名字" return 1 end --跳出循环 break end end end elseif typ =="body" then if filetosave then filetosave:write(res) filemd5:update(res) end elseif typ =="part_end" then if filetosave then local md5_sum=filemd5:final() --ngx.say("md5: ", str.to_hex(md5_sum)) filemd532=str.to_hex(md5_sum) filetosave:close() filetosave = nil end elseif typ =="eof" then break else ngx.log(ngx.info, "do other things") end end return 0 end
3. TCP는 바이너리 데이터를 수신합니다
-- 读取byte function readint8(tcp) local next, val = string.unpack(tcp:receive(1), "b") return tonumber(val); end -- 读取int16 function readint16(tcp) local next, val = string.unpack(tcp:receive(2), "h"); return tonumber(val); end -- 读取int32 function readint32(tcp) local next, val = string.unpack(tcp:receive(4), ">i"); return tonumber(val); end -- 读取字符串 function readstring(tcp,len) return tostring(tcp:receive(len)); end
4. TCP는 여기서 에이전트와의 통신 프로토콜은 시작 플래그 + 패킷 길이 + json 문자열 + 종료 플래그이므로 해당 팩에 사용되는 매개변수는 바이어스입니다. .> 빅 엔디안으로 변환됩니다
jsondata["filename"]=filemd532 .. "." .. fileextension jsondata["cmd"]="write" jsondata["filesize"]=tostring(filelen) jsondata["path"]=system.."/"..storagedate local jsonstr=cjson.encode(jsondata) local uilen=string.len(jsonstr) senddata=bpack(">b1iab",startindex,uilen,jsonstr,endindex) socket:send(senddata)
5. 다운로드 오류가 있는 경우 오류 정보 출력을 용이하게 하기 위해 리디렉션을 사용합니다. 실제로 여기서도 사용자 토큰 확인을 수행할 수 있습니다.
아아아아위 내용은 nginx+lua를 사용하여 파일 업로드 및 다운로드 서비스 설정 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Nginx 가상 호스트 구성을 통해 여러 웹 사이트를 단일 서버에서 개별 도메인 이름과 루트 디렉토리로 호스팅 할 수 있습니다. 특정 구성 단계에는 다음이 포함됩니다 : 가상 호스트 구성 파일 작성 서버 블록 구성, 서버 청취 포트를 지정하고, 가상 호스트 도메인 이름 및 문서 루트 디렉토리를 지정하여 가상 호스트를 활성화하고, 구성 파일을 사용 가능한 디렉토리에 연결하여 nginx를 다시로드합니다.

로드 밸런싱을 위해 nginx를 구성하는 방법은 무엇입니까? 업스트림 서버 풀을 정의하고 서버 IP 및 포트를 지정합니다. 가상 호스트를 정의하고 연결을 듣고 상류 풀로 전달하십시오. 위치를 지정하고 요청을 일치시킨 후 상류 풀에 전달하십시오.

Nginx를 통해 리디렉션하는 방법은 301 개의 영구 리디렉션 (업데이트 링크 또는 모바일 페이지)과 302 개의 임시 리디렉션 (오류 처리 또는 임시 변경)입니다. 리디렉션 구성에는 서버 블록에서 위치 지시 사항을 사용하여 고급 기능에는 정규 표현식 일치, 프록시 리디렉션 및 조건 기반 리디렉션이 포함됩니다. 일반적인 리디렉션 사용에는 URL 업데이트, 오류 처리, HTTP 리디렉션, HTTPS 리디렉션 및 사용자를 특정 국가 또는 언어 버전으로 안내하는 것이 포함됩니다.

다음 방법을 통해 nginx 버전 정보보기 : 직접 명령 방법 : "nginx -v"출력 버전 정보. 구성 파일에서보기 : 구성 파일 상단에서 "버전"섹션을 찾으십시오. 시스템 정보 명령 : Linux : "rpm -qa | grep nginx"또는 "dpkg -l | grep nginx"명령을 사용하십시오. freebsd : "pkg info nginx"명령을 사용하십시오. Windows : 열린 Nginx 서비스 속성, 버전 정보는 일반 탭에 있습니다.

nginx의 실행 상태를 보는 방법은 다음과 같습니다. PS 명령을 사용하여 프로세스 상태를보십시오. nginx 구성 파일 /etc/nginx/nginx.conf를 봅니다. Nginx 상태 모듈을 사용하여 상태 끝점을 활성화하십시오. Prometheus, Zabbix 또는 Nagios와 같은 모니터링 도구를 사용하십시오.

PHP를 실행하도록 nginx를 구성하는 단계에는 다음이 포함됩니다. PHP 설치, NGINX 설치, NGINX 기본 구성 파일 편집, PHP 구성 추가를 추가하고 PHP 파일 생성, NGINX를 다시 시작하고 PHP를 다시 시작하십시오. 성공한 후 "PHP가 작동합니다!" 표시됩니다.

nginx pseudostatic을 활성화하는 방법은 무엇입니까? 서버가 확장자에 따라 파일을 검색 할 수 있도록 멀티 뷰 모듈을 활성화하십시오. 의사 정적 규칙을 추가하여 .php url을 일치하는 PHP 파일에 다시 작성하십시오. 웹 서버 프로세스에 PHP 파일에 액세스 할 수있는 권한이 있는지 확인하십시오. Nginx를 다시 시작하여 변경 사항을 파일 맵으로 구현하려면 변경 사항을 적용하십시오.

nginx 서비스를 다시 시작하려면 다음 단계를 수행하십시오. 1. Sudo SystemCTL을 사용하여 Nginx를 정지하십시오. 2. Sudo SystemCTL을 사용하여 시작 nginx를 사용하여 서비스를 시작하십시오. 3. sudo systemctl nginx를 사용하여 구성을 다시로드하십시오.
