Dulcie @ 2021 By : Template Sell.

Category: nginx

[nginx] 如何讓 $remote_addr 辨認出正確的 client 端 ip 而不是 cdn(cloudflare) ip

當在架設網站時,時常會幫網站前面架設一層 cdn(cloudflare),好處是 cdn 作為第一層接收使用者端的請求既可以隱藏伺服器真實 ip,更可以加速各地區的網站載入速度。 反之,多了一層 cdn 可能讓你更難存取到真實的使用者資訊,比如導致在網頁伺服器看到的 access.log 其中 $remote_addr 都是來自 cdn 廠商的 ip,例如:162.158.162.90 造成這個問題的原因,可以參考以下圖片的流程: 原來的使用者 IP 為: 1.1.1.1 / 2.2.2.2 由於經過 cloudflare 的 cdn 伺服器(4.4.4.4)存取後,導致 Logs 充斥 4.4.4.4 的 $remote_addr 為了解決這個問題 cloudflare 官方有提供在各網頁伺服器該如何設定正確的 mods 解決此問題 這邊以 ubuntu 的 nginx 設定為例 2. 重新讀取 nginx 設定 設定大功告成 ~ 重新檢查 access.log 的 $remote_addr 是否後就會正確抓到使用者 ip 了 […]

如何使用 shell script 篩選 nginx log 的時間區段

前陣子因為一些狀況,在試著查 nginx 的 access.log,於是剛好想說紀錄一下如何使用時間區間有效率的查 nginx log OS: 不得不說 awk 真的是方便又好用呢 ~ 如果沒有特別更改過 nginx access.log 格式的話,應該會如下所示 查過去兩小時的 access.log 資料access.log 的第 4 個欄位 > 我們自己定義的 Date 查一個時間區段的 access.log 資料Date1 > access.log 的第 4 個欄位 < Date2 參考資料: https://stackoverflow.com/questions/7706095/filter-log-file-entries-based-on-date-range

[nginx] proxy cache 設定

有做過網頁速度優化的工程師,應該對於 cache 相當熟悉,適當的增加 cache 可以大幅地減少 server 的負擔。 甚至在後端我們也常用 redis 去 cache 一些常用或計算負擔較重的資料. 在使用 nodejs 做開發時,我們時常會需要使用到 web server 的 reverse proxy 功能。 這篇主要想記錄如何開啟 nginx 的 proxy_cache,減少 Reverse Proxy Server 打到後面的 web server 的 request 數量,也是類似於 varnish 所做的功能   找到 nginx.conf 檔案,預設會在 /etc/nginx/nginx.conf 設定 cache 檔案的存放位置及 expired 等資訊,這邊先以 my_cache 為 key 去更新 cache proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m; 在想套用的 […]

[nginx] 錯誤,client intended to send too large body

之前因為把機器上原本的 apache 的 web server 換成 nginx,遇到了這個錯誤  client intended to send too large body 查了一下資料發現造成的原因為 web server 接收 request body 的大小設定 apache: LimitRequestBody 預設為 0(unlimit) nginx: client_max_body_size 預設為 1m 根據以下步驟更改一下 nginx 設定,就沒問題了 vim /etc/nginx/nginx.conf sudo sercie nginx reload   參考資料: https://craftcms.stackexchange.com/questions/2328/413-request-entity-too-large-error-with-uploading-a-file

[nginx] 移除不必要的預設 header,”Server” 版本

預設安裝好 nginx 會有 web server 版本資訊的 header 如下圖   為了資訊安全上面的考量,建議將 /etc/nginx/nginx.conf 的 server_tokens off; 打開 這樣就不會在 header 顯示 nginx 的版本資訊。   如果你想進一步將此 header 完全移除掉的話,可以考慮裝 nginx 的更改 header module 這樣就可以設定 more_clear_headers Server; 移除此 header。   參考資料: https://serverfault.com/questions/214242/can-i-hide-all-server-os-info https://geekflare.com/wp-content/uploads/2016/05/nginx-default-header.png