1. 程式人生 > >分享兩個小問題!

分享兩個小問題!

本文首發於個人微信公眾號《andyqian》,期待你的關注!

前言

  有好一段時間沒有更新文章了,期間有好幾次提筆。卻又不知,如何下手。今天來分享兩個常見的小問題。

(一) Linux上傳檔案後大小總是為0 kb大小

問題描述:無論是使用xftp工具,還是使用rz命令上傳至Linux伺服器中的檔案大小總是為0。

導致原因 :
 經分析,由於系統磁碟被佔滿導致。

可以通過命令df -lh命令來檢視系統情況。 如下所示:

 
  1. [[email protected] ~]# df -lh

  2. Filesystem      Size  Used Avail Use% Mounted on

  3. /dev/vda1        79G   79G   0G  100% /

  4. tmpfs           1.9G     0  1.9G   0% /dev/shm

  5. /dev/vda3        16G   44M   15G   1% /home

其中:

  1. Size :表示該磁碟(掛載區)的總大小。

  2. Used :表示已使用大小。

  3. Avail: 表示剩餘可用大小。

  4. Use%:  表示磁碟使用率。

  5. Mounted on:表示掛載區,其中 / 表示根目錄

備註: 我們可以通過上述引數,來了解系統當前磁碟的使用情況。

解決辦法:

  1. 刪除掉伺服器中多餘的檔案,釋放伺服器資源。

  2. 如果伺服器沒有多餘檔案,可以考慮增加磁碟空間。

(二) 獲取使用者真實IP地址

  我們在設計系統時,有很多場景需要獲取到使用者的真實IP地址。其中部分業務還依賴使用者的真實IP地址。
包括但不限於以下場景::

  1. 記錄使用者登入行為。

  2. 在關鍵業務中,記錄使用者請求ip地址。

  3. 使用者短時間內頻繁切換IP地址,需要進行安全驗證等等。

在單機應用時,我們通常使用request.getRemoteAddr(); 方法就能獲取到使用者的真實ip地址。但使用負載,以及代理伺服器時,我們就應該使用下述方法進行獲取:

 
  1.  public static String getRemoteAddr(HttpServletRequest request) {

  2.    String ip = request.getHeader("x-forwarded-for");

  3.        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  4.            ip = request.getHeader("Proxy-Client-IP");

  5.        }

  6.        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  7.            ip = request.getHeader("WL-Proxy-Client-IP");

  8.        }

  9.        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  10.           ip = request.getRemoteAddr();

  11.        }

  12.  
  13.        return ip;

  14.    }

如果使用nginx作為代理伺服器,通常建議在nginx/conf下nginx.conf檔案中對應的location路徑下新增以下配置:

 
  1.    proxy_set_header Host $host;

  2.    proxy_set_header X-Real-IP $remote_addr;

  3.    proxy_set_header REMOTE-HOST $remote_addr;

  4.    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

最後

  在上一篇文章中,我談到了使用者隱私。作為軟體從業者,我們有義務,更有責任保護好使用者的隱私資料。一些稍成規模的公司。一般都會有安全部門。對業務資料提出安全性的建議以及對使用者資料安全做攻防。最近做的業務與安全聯絡的比較多。在這裡就再囉嗦幾句。就算拋磚引玉了。

  1. 對於使用者敏感資訊:

手機號,郵箱,登入密碼,交易密碼,身份證資訊

等隱私資料均要以密文的形式落庫。在業務層進行資料的加解密。

  1. 介面提供出來的隱私資料,均要進行混淆處理。

  2. 系統中關鍵路徑中儘可能的記錄使用者資訊。(如登入請求,記錄使用者ip地址等等)。

推薦閱讀:

談談使用者隱私

Git 常用命令以及常見錯誤

再談MySQL JSON資料型別

說說Java日誌

 

 

這裡寫圖片描述

掃碼關注,一起進步

個人部落格: http://www.andyqian.com