nginx 구성 파일:
# document ppt convert configuration. upstream document.polyv.net { server 127.0.0.1:8080; } server { listen 80; server_name document.polyv.net; index index.html index.htm; charset utf-8; client_max_body_size 1000m; # ignore favicon.ico not exist. location = /favicon.ico { log_not_found off; access_log off; } # not allow to visit hidden files. location ~ /\. { deny all; access_log off; log_not_found off; } location / { if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) { add_header content-disposition: 'attachment;'; add_header content-type: 'application/octet-stream'; } proxy_pass http://document.polyv.net; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; proxy_set_header request_host $host; # include proxy.conf; charset utf-8; } # user upload files location /images/ { #expires 7d; alias /data03/ovp/blobs/; proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_set_header accept-encoding ""; if ( !-f $request_filename ) { proxy_pass http://document.polyv.net; } } location /blobs/ { #expires 7d; alias /data03/ovp/blobs/; } location /preview/images/ { #expires 7d; alias /data03/ovp/blobs/; proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_set_header accept-encoding ""; if ( !-f $request_filename ) { proxy_pass http://document.polyv.net; } } }
Agent는 확대된 사진을 출력합니다
package com.document.handle.controller; import java.io.bufferedinputstream; import java.io.file; import java.io.ioexception; import java.io.outputstream; import java.net.httpurlconnection; import java.net.url; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.apache.commons.lang3.stringutils; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.stereotype.controller; import org.springframework.web.bind.servletrequestutils; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.requestmapping; import com.document.tool.imagemagickutils; import com.document.tool.systemconfig; @controller public class imageagentcontroller { private static final logger log = loggerfactory.getlogger(imageagentcontroller.class); /** * ppt预览图片代理输出 * @throws ioexception */ @requestmapping("/preview/images/{year}/{month}/{md5id}/{preview}/{filename}.{ext}") public void cropimage(@pathvariable string year, @pathvariable string month, @pathvariable string md5id, @pathvariable string preview, @pathvariable string filename, @pathvariable string ext, httpservletrequest request, httpservletresponse response) throws ioexception { // string rootdir = "/data03/ovp/blobs/"; string rootdir = systemconfig.getblobdirectory(); string oname = filename.substring(1, filename.length());// 原图文件名 string dirstring = rootdir + year + "/" + month + "/" + md5id + "/" + oname + "." + ext; string targetfilestring = rootdir + year + "/" + month + "/" + md5id + "/preview/" + filename + "." + ext; //如果原图存在 file originimage = new file(oname); if(originimage.exists()){ log.info("corpimage..." + dirstring + " -> " + targetfilestring); file newfile = new file(targetfilestring); string pathstring = newfile.getparent(); log.info("pathstring...{} {}", pathstring); file pathfile = new file(pathstring); if (!pathfile.exists()) { log.info("---create file---"); pathfile.mkdirs(); } boolean status = imagemagickutils.scale(dirstring, targetfilestring, 240, 180); if (status) { response.reset(); response.setcontenttype("image/" + ext); java.io.inputstream in = new java.io.fileinputstream(targetfilestring); // filenameurlutils.getimagefilename(targetfilestring); if (in != null) { byte[] b = new byte[1024]; int len; while ((len = in.read(b)) != -1) { response.getoutputstream().write(b); } in.close(); } } }else{ log.info("原图目录不存在-preview:{}",dirstring); } } /** * ppt固定尺寸图片代理输出 * @throws ioexception * https://cache.yisu.com/upload/ask_collection/20210726/113/19154.png * * http://document.polyv.net/images/2016/03/de37d2ceb11ac068c18c5e4428541075/jpg-3.png */ @requestmapping("/images/{year}/{month}/{md5id}/{filename}/{width}x{height}.{ext}") public void cropfixedimage(@pathvariable string year, @pathvariable string month, @pathvariable string md5id, @pathvariable string filename, @pathvariable integer width, @pathvariable integer height, @pathvariable string ext, httpservletrequest request, httpservletresponse response) throws ioexception { // string rootdir = "/data03/ovp/blobs/"; string rootdir = systemconfig.getblobdirectory(); //string oname = filename.substring(1, filename.length());// 原图文件名 string dirstring = rootdir + year + "/" + month + "/" + md5id + "/" + ( filename + "." + ext); string targetfilestring = rootdir + year + "/" + month + "/" + md5id + "/" + filename + "/" + (width + "x" + height + "." + ext); //如果原图存在 file originimage = new file(dirstring); if(originimage.exists()){ file targetfilestringfile = new file(targetfilestring); if(!targetfilestringfile.exists()){ log.info("corpimage..." + dirstring + " -> " + targetfilestring); file newfile = new file(targetfilestring); string pathstring = newfile.getparent(); log.info("pathstring...{} {}", pathstring); file pathfile = new file(pathstring); if (!pathfile.exists()) { log.info("---create file---"); pathfile.mkdirs(); } imagemagickutils.resizewh(dirstring, targetfilestring,width,height); } response.setcontenttype("image/" + ext); java.io.inputstream in = null; try{ in = new java.io.fileinputstream(targetfilestring); response.setcontentlength(in.available()); byte[] buffer = new byte[1024]; int count = 0; while ((count = in.read(buffer)) > 0) { response.getoutputstream().write(buffer, 0, count); } response.flushbuffer(); }catch(exception e){ e.printstacktrace(); }finally { try { in.close(); } catch (exception e) { } } }else{ log.info("原图目录不存在:{}",dirstring); } } /** * 图片下载 */ @requestmapping("get/image/data") public void downloadimage(httpservletrequest request, httpservletresponse response) throws ioexception { string filepath = servletrequestutils.getstringparameter(request, "filepath", ""); //图片访问路劲 string filename = servletrequestutils.getstringparameter(request, "filename", ""); //名称 if(stringutils.isnotblank(filepath) || stringutils.isnotblank(filename)){ string desturl = filepath; //log.info("--------------"+filepath); string fileformat=filepath.substring(filepath.lastindexof(".")); //string name=filename.trim()+fileformat; string name=filepath.substring(filepath.lastindexof("/")+1, filepath.length()); //file f = new file(filepath); //response.setheader("content-disposition", "attachment; filename="+java.net.urlencoder.encode(f.getname(),"utf-8")); //log.info("--------------"+f.getname()); // 建立链接 url url = new url(desturl); httpurlconnection httpurl = (httpurlconnection) url.openconnection(); // 连接指定的资源 httpurl.connect(); // 获取网络输入流 bufferedinputstream bis = new bufferedinputstream(httpurl.getinputstream()); integer lenf=httpurl.getcontentlength(); //string lenf=this.getfilelength(4189053, 7189053); response.setcontenttype("application/x-msdownload"); response.setheader("content-length", lenf.tostring());//文件大小值5几m response.setheader("content-disposition", "attachment; filename="+java.net.urlencoder.encode(name,"utf-8")); outputstream out = response.getoutputstream(); byte[] buf = new byte[1024]; if (desturl != null) { bufferedinputstream br = bis; int len = 0; while ((len = br.read(buf)) > 0){ out.write(buf, 0, len); } br.close(); } out.flush(); out.close(); } } }
사진 확대 작업
package com.document.tool; import java.io.ioexception; import javax.swing.imageicon; import org.apache.commons.exec.commandline; import org.apache.commons.exec.defaultexecuteresulthandler; import org.apache.commons.exec.defaultexecutor; import org.apache.commons.exec.executeexception; import org.apache.commons.exec.executewatchdog; import org.apache.commons.exec.executor; import org.slf4j.logger; import org.slf4j.loggerfactory; /** * 使用imagemagick对图片文件进行处理的工具类。 * @author xingning ou */ public abstract class imagemagickutils { private static final string executable_convert = "/usr/bin/convert"; // convert命令 private static final string executable_composite = "/usr/bin/composite"; // composite命令 private static final long execute_timeout = 30 * 60 * 1000l; // 30 minutes private static final logger log = loggerfactory.getlogger(imagemagickutils.class); /** * 执行图片处理的命令。 * @param cmdline 待执行的命令 * @return exitvalue,一般等于0时表示正常运行结束 * @throws executeexception 命令执行失败时抛出此异常 * @throws ioexception 当发生io错误时抛出此异常 * @throws interruptedexception 当等待异步返回结果被中断时抛出此异常 */ public static int executecommandline(commandline cmdline) throws executeexception, ioexception, interruptedexception { executor executor = new defaultexecutor(); executor.setexitvalue(0); // kill a run-away process after execute_time milliseconds. executewatchdog watchdog = new executewatchdog(execute_timeout); executor.setwatchdog(watchdog); // execute the print job asynchronously. defaultexecuteresulthandler resulthandler = new defaultexecuteresulthandler(); executor.execute(cmdline, resulthandler); // some time later the result handler callback was invoked. resulthandler.waitfor(); // so we can safely request the exit value. return resulthandler.getexitvalue(); } /** * 按照高宽比例缩小图片。 * @param src 源图片 * @param dst 目标图片 * @param width 图片图片的宽度 * @param height 目标图片的高度 * @return 是否处理成功 */ public static boolean scale(string src, string dst, int width, int height) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-scale"); cmdline.addargument(width + "x" + height); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("缩略图片时发生异常,cause: ", e); return false; } } /** * 按照高宽比例缩小图片。 * @param src 源图片 * @param dst 目标图片 * @param width 图片图片的宽度 * @param height 目标图片的高度 * @return 是否处理成功 */ public static boolean thumbnail(string src, string dst, int width, int height) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-thumbnail"); cmdline.addargument(width + "x" + height); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("缩略图片时发生异常,cause: ", e); return false; } } /** * 添加图片水印。 * @param src 源图片 * @param dst 目标图片 * @param logofile 水印图片 * @param dissolve 和水印的融合度,0-100的数字 * @param gravity 叠放方向,east,west,north,south,northeast,northwest,southeast,southwest * @return 是否处理成功 */ public static boolean drawlogo(string src, string dst, string logofile, int dissolve, string gravity) { // 构建命令 commandline cmdline = new commandline(executable_composite); cmdline.addargument("-dissolve"); cmdline.addargument(dissolve + "%"); cmdline.addargument("-gravity"); cmdline.addargument(gravity); cmdline.addargument(logofile); cmdline.addargument(src); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("添加图片水印时发生异常,cause: ", e); return false; } } /** * 添加图片水印。 * @param src 源图片 * @param dst 目标图片 * @param logofile 水印图片 * @param dissolve 和水印的融合度,0-100的数字 * @param x 水印距离左下角的距离 * @param y 水印距离右下角的距离 * @return 是否处理成功 */ public static boolean drawlogo(string src, string dst, string logofile, int dissolve, int x, int y) { imageicon icon = new imageicon(src); int width = icon.geticonwidth(); // 源图的宽 int height = icon.geticonheight(); // 源图的高 string _x = string.valueof(width - x); // 在x轴上水印图片的左上顶点距离图片左上角的距离 string _y = string.valueof(height - y); // 在y轴上水印图片的左上顶点距离图片左上角的距离 // 构建命令 commandline cmdline = new commandline(executable_composite); cmdline.addargument("-dissolve"); cmdline.addargument(dissolve + "%"); cmdline.addargument("-geometry"); cmdline.addargument(_x + "+" + _y); cmdline.addargument(logofile); cmdline.addargument(src); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("添加图片水印时发生异常,cause: ", e); return false; } } /** * 裁剪图片。 * @param src 源图片 * @param dst 目标图片 * @param width 目标宽度 * @param height 目标高度 * @param left 裁剪位置:距离左边的像素 * @param top 裁剪位置:距离上边的像素 * @return 是否处理成功 */ public static boolean crop(string src, string dst, int width, int height, int left, int top) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-crop"); cmdline.addargument(width + "x" + height + "+" + left + "+" + top); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("裁剪图片时发生异常,cause: ", e); return false; } } /** * 获取矩形的小图。 * @param src 源图片 * @param dst 目标图片 * @param width 目标宽度 * @param height 目标高度 * @param left 裁剪位置:距离左边的像素 * @param top 裁剪位置:距离上边的像素 * @return 是否处理成功 */ public static boolean croprect(string src, string dst, int width, int height, int left, int top) { imageicon icon = new imageicon(src); int origwidth = icon.geticonwidth(); int origheight = icon.geticonheight(); int[] s = new int[2]; if (origwidth < origheight) { // 以宽为标准 s = getsize(origwidth, origheight, width, height, 1); } else {// 以高为标准 s = getsize(origwidth, origheight, width, height, 2); } if (thumbnail(src, dst, s[0], s[1])) { return crop(src, dst, width, height, left, top); } return false; } /** * 加边框。 * @param src 源图片 * @param dst 目标图片 * @param borderwidth 边框的宽度 * @param borderheight 边框的高度 * @param bordercolor 边框的颜色 * @return 是否处理成功 */ public static boolean border(string src, string dst, int borderwidth, int borderheight, string bordercolor) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument("-bordercolor"); cmdline.addargument(bordercolor); cmdline.addargument("-border"); cmdline.addargument(borderwidth + "x" + borderheight); cmdline.addargument(src); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("加图片边框时发生异常,cause: ", e); return false; } } /** * 转换图片格式。 * @param src 源图片 * @param dst 目标图片 * @param format 转换的格式 * @return 是否处理成功 */ public static boolean format(string src, string dst, string format) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-format"); cmdline.addargument("'" + format + "'"); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("转换图片格式时发生异常,cause: ", e); return false; } } /** * 转换无限极的tiff图片。 */ public static boolean converttiff(string src, string dst) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-colorspace"); cmdline.addargument("rgb"); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("转换图片格式时发生异常,cause: ", e); return false; } } /** * 获得要压缩图片的大小。 * @param w 图片的原宽度 * @param h 图片的原高度 * @param width 标准宽 * @param height 标准高 * @param type 类型 1-以宽为标准压缩 2-以高为标准压缩 3-以比例大小压缩 * @return size[0]-要压缩的宽度, size[1]-要压缩的高度 */ public static int[] getsize(double w, double h, double width, double height, int type) { if (w < width) {// 如果原宽度比标准宽度小 width = w; } if (h < height) {// 如果原高度比标准高度小 height = h; } double scale = w / h; switch (type) { case 1: height = width / scale; break; case 2: width = height * scale; break; case 3: if (width / height > scale) { width = height * scale; } else if ((width / height) < scale) { height = width / scale; } break; } int[] size = new int[2]; size[0] = (int) width; size[1] = (int) height; return size; } /** * 指定宽度。 * @param src * @param width * @param dst */ public static boolean resize(string src, int width, string dst) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-resize"); cmdline.addargument(width + ""); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("缩略图片时发生异常,cause: ", e); return false; } } /** * 指定宽度、高度。 * @param src * @param width * @param dst */ public static boolean resizewh(string src,string dst, int width, int height ) { // 构建命令 commandline cmdline = new commandline(executable_convert); cmdline.addargument(src); cmdline.addargument("-resize"); cmdline.addargument(width + "x" + height +"!"); cmdline.addargument(dst); try { executecommandline(cmdline); return true; } catch (exception e) { log.error("缩略图片时发生异常,cause: ", e); return false; } } }
imagemagick을 서버에 설치해야 합니다.
위 내용은 Nginx 프록시 출력 확대/축소 이미지 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Nginx는 높은 동시 요청을 처리하는 데 적합한 반면 Apache는 복잡한 구성 및 기능 확장이 필요한 시나리오에 적합합니다. 1.NGINX는 이벤트 중심의 비 블로킹 아키텍처를 채택하며, 대결 환경에 적합합니다. 2. Apache는 프로세스 또는 스레드 모델을 채택하여 복잡한 구성 요구에 적합한 풍부한 모듈 생태계를 제공합니다.

Nginx는 웹 사이트 성능, 보안 및 확장 성을 향상시키는 데 사용될 수 있습니다. 1) 리버스 프록시 및로드 밸런서로서 Nginx는 백엔드 서비스를 최적화하고 트래픽을 공유 할 수 있습니다. 2) 이벤트 중심 및 비동기 아키텍처를 통해 Nginx는 높은 동시 연결을 효율적으로 처리합니다. 3) 구성 파일을 사용하면 정적 파일 서비스 및로드 밸런싱과 같은 규칙을 유연하게 정의 할 수 있습니다. 4) 최적화 제안에는 GZIP 압축 활성화, 캐시 사용 및 작업자 프로세스 조정이 포함됩니다.

NginxUnit은 여러 프로그래밍 언어를 지원하며 모듈 식 디자인을 통해 구현됩니다. 1. 언어 모듈로드 : 구성 파일에 따라 해당 모듈을로드합니다. 2. 응용 프로그램 시작 : 호출 언어가 실행될 때 응용 프로그램 코드를 실행합니다. 3. 요청 처리 : 응용 프로그램 인스턴스로 요청을 전달하십시오. 4. 응답 반환 : 처리 된 응답을 클라이언트에 반환합니다.

Nginx와 Apache는 고유 한 장점과 단점이 있으며 다른 시나리오에 적합합니다. 1.NGINX는 높은 동시성 및 낮은 자원 소비 시나리오에 적합합니다. 2. Apache는 복잡한 구성 및 풍부한 모듈이 필요한 시나리오에 적합합니다. 핵심 기능, 성능 차이 및 모범 사례를 비교하면 요구에 가장 적합한 서버 소프트웨어를 선택할 수 있습니다.

질문 : nginx를 시작하는 방법? 답변 : nginx 스타트 업 설치 nginx verification nginx is nginx 시작 다른 시작 옵션을 자동으로 시작합니다.

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

Nginx 서비스를 종료하려면 다음 단계를 따르려면 다음 단계를 결정합니다. Red Hat/Centos (SystemCTL 상태 NGINX) 또는 Debian/Ubuntu (서비스 NGINX 상태) 서비스 중지 : Red Hat/Centos (SystemCTL STOP NGINX) 또는 DEBIAN/UBUNTU (서비스 NGINX STOP) DIA AUTAL STARTUP (옵션) : RED HAT/CENTOS (SystemCTLED) 또는 DEBIAN/UBUNT (SystemCTLED). (Syst

Windows에서 Nginx를 구성하는 방법은 무엇입니까? nginx를 설치하고 가상 호스트 구성을 만듭니다. 기본 구성 파일을 수정하고 가상 호스트 구성을 포함하십시오. 시작 또는 새로 고침 Nginx. 구성을 테스트하고 웹 사이트를보십시오. SSL을 선택적으로 활성화하고 SSL 인증서를 구성하십시오. 포트 80 및 443 트래픽을 허용하도록 방화벽을 선택적으로 설정하십시오.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
