1. 程式人生 > 實用技巧 >nginx作為本地圖片伺服器及地址重寫

nginx作為本地圖片伺服器及地址重寫

引言

這兩天寫專案碰到了使用nginx作為圖片伺服器及簡單的地址重寫

Nginx作為圖片伺服器

 server {
	listen       80;
	server_name  image.leyou.com;

	proxy_set_header X-Forwarded-Host $host;
	proxy_set_header X-Forwarded-Server $host;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	location / {
		root D:\\apple\\images;
	}
    }

域名這裡使用的是本機解析的DNS
配置方式:域名在本機系統盤/Windows/System32/dirvers/etc下的hosts修改,可以配置本地靜態DNS服務
瀏覽器預設請求傳送埠為80
server_name的域名請求的連結,檔案資源路徑在本地的路徑下尋找

地址重寫

  server {
		listen       80;
		server_name  api.leyou.com;

		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Server $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		
		location /api/upload {
			proxy_pass http://127.0.0.1:8092;
			proxy_connect_timeout 600;
			proxy_read_timeout 600;

			rewrite "^/api/(.*)$" /$1 break;
		}

		location / {
			proxy_pass http://127.0.0.1:10010;
			proxy_connect_timeout 600;
			proxy_read_timeout 600;
		}

	    }

任何發往server_name域名的請求都會被下面兩個location過濾
(重要)順序:/api/upload/ ---> /
這裡的順序不能顛倒,先寫全域性的那麼有限制的將不起作用

專案中後端介面連結為/upload/xxx,所以需要將/api過濾掉,同時將後面的轉發至對應服務

rewrite [正則表示式] [真實連結替代位] [功能位]

(重要)程式碼中正則表示式指/api後面的所有部分(即 .*)被代指為$1,如果有多個(xxx)篩選條件,則$後面的數字還可以向後追加
$1 代指匹配正則中的(.*),即將/api後面的全部看作一個區塊,區塊名為$1,可以起到替代作用

break 是功能位中的一個

last #本條規則匹配完成後,繼續向下匹配新的location URI規則
break #本條規則匹配完成即終止,不再匹配後面的任何規則
redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent #返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址

異常

後端介面正常測試,前端URL爭取,但前端請求無法到達,服務沒有任何相應,一定要往跨域問題哪裡找答案,這裡涉及了跨域問題
參考:我的文章-> 深入淺出跨域問題

功能演示