nginx圖片上傳
『壹』 markdown nginx 搭建自己的圖片伺服器
介紹
在使用markdown格式的過程中,經常需要上傳圖片,但是常常很復雜,image,在csdn上也很麻煩,在我有阿里雲的情況下,用nginx實現我的圖片伺服器.
安裝 OpenResty
OpenResty,以前用過,所以就按照文檔快速安裝.
apt-get install libpcre3-dev libssl-dev perl make build-essential curl
./configure
make
make install
默認目錄 :/usr/local/openresty/
添加配置文件
cd /usr/local/openresty/
mkdir conf/
vi nginx.conf
配置文件具體內容
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location ~ .*.(gif|jpg|jpeg|png)$ {
expires 24h;
root /home/images/;#指定圖片存放路徑
access_log /home/nginx/logs/images.log;#圖片 日誌路徑
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /home/images/;#代理臨時路徑
proxy_redirect off;
}
啟動
./openresty -c ../conf/nginx.conf
./openresty -s stop
netstat -antp
x
image
通過 SecureCRT 7.0拖拽上傳文件
image
通過 get -r * 同步文件到本地
image
訪問即可
https://blog.csdn.net/better_mouse/java/article/details/84256664
『貳』 nginx有些圖片能打開,有些不能打開
文件的格式不正常,緩沖區內存過小。服務滾帆鬧端html目錄下是否有圖片,確定在,再去nginx的配置文件中查看是否支持我上傳圖片的格式,去/usr/local/nginx/conf/nginx.conf,添加上傳圖片的格式,去測試端瀏覽器中大罩清空緩存再次測試。查看緩沖區內存是否過小,是否上傳的圖片過大,是否需要壓縮圖片,在測試端瀏覽器中是會先把文件載入到緩沖轎豎區,若上傳的文件大小大於緩沖區,就無法載入出來。
『叄』 不容錯過的Nginx配置詳解,一文帶你搞懂Nginx
Nginx是一個高性能的HTTP和反向代理伺服器,特點是佔用內存少,並發能力強,事實上Nginx的並發能力確實在同類型的網頁伺服器中表現好。Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率,能經受高負載的考驗,有報告表明能支持高達50000個並發連接數。
需要客戶自己在瀏覽器配置代理伺服器地址。
例如:在大陸訪問www.google.com,我們需要一個代理伺服器,我們通過代理伺服器去訪問谷歌,這個過程就是正向代理。
反向代理,客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取數據後,在返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器IP地址。
單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的伺服器,也就是我們說的負載均衡。
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度。降低原來單個伺服器的壓力。
進入到下面的目錄,然後使用命令
配置文件所在位置:/usr/local/nginx/conf/nginx.conf
由全局塊+events塊+http塊組成
從配置文件開始到events之間的內容,主要會設置一些影響Nginx伺服器整體運行的配置指令,主要包括配置運行Nginx伺服器的用戶(組)、允許生成的worker process數,進程pid存放路徑、日誌存放路徑和類型以及配置文件的引入等。
events塊設計的指令主要影響Nginx伺服器與用戶的網路連接,常用的設置包括是否開啟對多work process下的網路連接進行序列化,是否允許同時接收多個網路連接,選取哪種事件驅動模型來處理連接請求,每個work process可以同時支持的最大連接數等。下面的例子表示每個work process支持的最大連接數為1024。這部分配置對Nginx的性能影響較大,在實際中應該靈活配置。
Nginx伺服器配置中最頻繁的部分,代理、緩存和日誌定義等絕大多數功能和第三方模塊的配置都在這里,http塊又包括http全局塊和server塊。
http全局塊配置的指令包括文件引入、MIME-TYPE定義、日誌自定義、連接超時時間、單鏈接請求數上限等。
這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一台獨立的硬體主機是完全一樣的,該技術的產生是為了節省互聯網伺服器硬體成本。
每個http塊可以包括多個server塊,而每個server塊就相當於一個虛擬主機。
每個server塊也可以分為全局server塊,以及可以同時包含多個location塊。
最常見的配置時本虛擬主機的監聽配置和本虛擬主機的名稱或IP配置。
一個server塊可以配置多個location塊。
這塊的主要作用是基於Nginx伺服器接收到的請求字元串(例如server_name/uri-string),對虛擬主機名稱(也可以是IP別名)之外的字元串(例如前面的/uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
訪問http://ip,訪問到的是Tomcat的主頁面http://ip:8080。
Nginx+JDK8+Tomcat
訪問:http://192.168.71.167/,看到的是Tomcat的首頁。
根據訪問的路徑跳轉到不同的伺服器中去。
訪問http://ip:9001/e 直接跳到http://127.0.0.1:8080/e
訪問http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod
Nginx+JDK8+配置兩個Tomcat,Tomcat的配置不再講述。
訪問http://192.168.71.167:9001/e/a.html跳到了http://127.0.0.1:8080/e/a.html頁面。
訪問http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html頁面。
假如Nginx代理伺服器Server的配置為:192.168.71.167:9001,跳到:127.0.0.1:8080,訪問者的IP為:192.168.71.200:20604。
通過訪問http://192.168.71.167/e/a.html,實現負載均衡的效果,平均分攤到8080和8081埠中。
Nginx+JDK8+2台Tomcat,一台8080,一台8081。
訪問:http://192.168.71.167/e/a.html,8080和8081交替訪問。
1 輪詢(默認)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2 weight
weight代表權重,默認為1,權重越高被分配的客戶端越多。
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。
3 ip_hash
每個請求按訪問IP的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題,示例如下:
4 fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
訪問圖片:http://192.168.71.167/image/1.jpg
訪問頁面:http://192.168.71.167/www/a.html
訪問目錄:http://192.168.71.167/image/(因為設置了autoindex on;)
兩台機器,每台機器都裝有keepalived+Nginx+Tomcat。
主備keepalived伺服器中只有master一台機器會出現VIP地址,否則會出現腦裂問題。
【提示】腳本要加+x的執行許可權:chmod +x chk_nginx.sh
在Nginx里把虛擬IP配置進去即可。
一個Nginx是由一個master進程和多個worker進程組成的。
客戶端發送請求到Master,然後給worker,再由這些work爭搶處理這個請求。
1 可以使用nginx -s reload進行熱部署方式;
2 每個worker是獨立的進程,如果有其中的一個worker出現了問題,其他worker獨立的繼續進行爭搶,實現請求的過程,不會造成服務的中斷;
Nginx和Redis類似,都採用了io多路復用機制。每個worker進程都可以把CPU發揮到極致,一般來說worker數和伺服器的CPU數相等是最為適宜的。
發送請求:訪問靜態資源佔用2個連接,反向代理佔用4個連接。
【溫馨提示】
『肆』 上傳圖片過大時nginx報錯
項目用到spring cloud,前端項目使用nginx進行代理,在上傳大圖片時時間過長,在頁面的F1中查看介面狀態,發現報500的錯誤,這是在後台服務中的網關服務的日誌中發現報連接後台上傳服務超時沒有返回,這時去查看網關zuul的配置文件,修改一下相關的時間超時配置。修改後如下,將超時時間適當的配置大一些。
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 300000
ribbon:
ConnectTimeout: 300000
ReadTimeout: 300000
修改了如上配置後,在zuul中不報超仔姿時的錯誤了,但是上傳大文件的時候還是失敗,但是錯誤變成了504超時,這時發現是nginx配置的超時時間過小導致的,對nginx的配置文件添加相應的超時配置。
#該指令設置與upstream server的連接超時時間
proxy_connect_timeout 750;
#該指令設置與代理伺服器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應。這個時間不是獲得整個response的時間,而是兩次reading操作的時間
proxy_read_timeout 6000;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
這兩個選項.
fastcgi_read_timeout是指fastcgi進程向nginx進程發送response的整個過程的超時時間
fastcgi_send_timeout是指nginx進程向fastcgi進程發送request的整個過程的超時時間
這兩個選項默認都是秒(s),可以手動指定為分鍾(m),小時(h)等
通過上面的配置之念茄絕後圖片可以正常上傳上去,雖然花費的時間較長,但總算是傳上去納液了。
『伍』 織夢無法上傳圖片出現一個滾動條
圖片不能上傳成功的原因大概有以下幾種:
1、目錄上傳許可權不夠。
2、程序本身漏洞導致,或程序不完整導致。
3、操作系統問題。
檢測目錄許可權
當 提示圖片上傳失敗的時候,我首先檢測的是文件許可權是否足夠。經過檢測,文件夾的許可權是755表示已經足夠,並且已經重新創建了文件夾並賦予最高許可權,依然 沒有解決該問題,接著檢測用戶組許可權是否足夠,通過檢測也沒有發現任何的問題,因此文件夾許可權導致圖片不能正常上傳的可能性被排除。
網站程序完整性
接著檢測網站程序的完整性,發現十多個網站都不能正常上傳圖片,於是排除了網站程序完整性導致圖片上傳失敗的可能性。
操作系統問題
於是檢測 WEB NGINX 伺服器,將圖片上傳文件夾的可執行許可權開放,但任然不能成功上傳圖片。此時,忽然想起了之前配置過 php.ini 配置文 檔,將 open_basedir 配置成了網站程序所在根目錄 /htdocs,於是將該行代碼注釋掉,之後便成功的上傳了圖片,問題被解決掉。但是, 這樣做放棄了安全性,有些捨不得。
通過以下方法,不僅讓安全性提高,也解決了圖片上傳失敗的問題:
php.ini 中的open_basedir 表示:php程序執行限制在了指定的目錄中,這樣可以限制入侵者繼續提權到操作系統,安全性有更一步的保障。其 中 upload_tmp_dir 表示的是文件上傳臨時目錄,如果設置了 open_basedir 參數,那麼 upload_tmp_dir 必須 配置,否則文件上傳將不能成功。
總結:遇到圖片不能上傳,表示相當棘手。需要從上傳的圖片類型、圖片的尺寸、文件夾許可權、程序完整性到最後 的系統環境一一分析,遇到問題不要焦急,相信經過透徹的分析與測試,問題總會被解決掉。本文最終解決方法就有兩個,注釋 open_basedir 該行 代碼就能解決問題,如果配置了 open_basedir 那麼需要設定文件上傳臨時目錄,最後筆者將 upload_tmp_dir 設定 為 /tmp 後,圖片就可以成功上傳了!
『陸』 圖片伺服器的搭建01
nginx+vsftp搭建圖片伺服器
前言:
在分布式架構中,往往會有多個tomcat,然後你上傳的圖片只是在其中的某一個tomcat,你訪問時是由集群的tomcat隨機提供服務。當你訪問的tomcat是有圖片的那個時,圖片能正常顯示,如果恰巧是那個沒有圖片的tomcat時,圖片就不能正常顯示。這就完成了訪問同一個圖片,可能你刷新一次可以訪問,再刷新一次圖片就訪問不到了。這時,我們就需要一個伺服器用來專門存儲圖片,一般我們都用nginx。
1、nginx+vsftp:
上面分別介紹了nginx和vsftp,那麼這兩個東西怎麼組合起來用呢?怎麼實現這個圖片伺服器呢?我們知道,tomcat安裝好啟動後,在瀏覽器輸入localhost:8080,就會出現tomcat的歡迎頁,nginx也一樣。比如linux的ip是192.168.50.122,那麼啟動nginx後,在瀏覽器訪問這個地址也會出現nginx的歡迎頁,其實是因為它有個默認的訪問頁面,完整的地址應該是192.168.50.122/index.html,那麼我們就可以根據這個,把它默認的訪問頁面改成我們上傳的圖片的保存路徑,比如上傳了一張pic.jpg圖片到linux的/home/ftpuser/images中,如果我們把默認訪問頁面改成/home/ftpuser,那麼在瀏覽器中輸入192.168.50.122/images/pic.jpg,就可以訪問到這張圖片了。下面就來介紹nginx、vsftp的安裝以及配置。
<meta charset="utf-8">
1、安裝:
2、添加ftp用戶:
3、給ftp用戶添加密碼:
輸入兩次密碼後修改密碼。
4、修改selinux:
①查看狀態:
執行這個命令可以看到
這兩個都off,執行如下命令設置為on:
再次執行 getsebool -a | grep ftp 看到那兩個狀態是on就行了。
5、關閉匿名訪問:
執行
命令:
還要在vsftp.conf文件最下面添加以下內容:
然後保存退出即可。
6、設置開機啟動:
7、測試:
打開filezilla工具,輸入虛擬機的ip,21埠,用戶名和密碼,點擊快速連接,連接vsftp服務:
如圖所示則連接成功。
<meta charset="utf-8">
按照以上步驟安裝好nginx和vsftp後,還是不能訪問上傳的圖片的,需要進行如下配置:
執行
命令,打開nginx的配置文件:
按道理這樣就可以了,但是我訪問卻報錯:
403 forbidden ,最後發現是因為ftpuser文件夾沒有可讀許可權,執行如下命令:
再次訪問即可成功!
至此圖片伺服器搭建完成!至於在Java中如何使用這個圖片伺服器,請參考 Java實現把圖片上傳到圖片伺服器 。
在搭建的過程中,遇到很多坑,因為我參考的教程是centos 6,防火牆是iptables,而centos 7是firewall,
『柒』 lua上傳圖片到伺服器
lua上傳圖片到伺服器的方法。
1、訪問前端伺服器。
2、修改restynginx的配置信息。
3、創帆掘建一個upfile.lua,放到指定位置態舉核。
4、創答仔建一個html文件測試即可上傳圖片到伺服器。