
Nginx 是最流行的 Web 服務器,可以只占用 2.5 MB 的內存,卻可以輕松處理 1w 的 http 請求。
做為網站的入口,Nginx 的安全設置重要性不言而喻。
下面帶你一起去認識一下這些安全配置吧!
nginx.conf是 Nginx 最主要的配置文件,大部分的安全配置都在這個文件上進行。
禁用不需要的 Nginx 模塊
自動安裝的 Nginx 會內置很多模塊,并不是所有的模塊都需要,對于非必須的模塊可以禁用,如 autoindex module ,下面展示如何禁用
# ./configure --without-http_autoindex_module# make# make install
不展示 server tokens
默認情況下,Nginx 的 server tokens 會在錯誤頁面顯示 Nginx 的版本號,這可能會導致信息泄露,未經授權的用戶可能會了解你使用的nginx版本。 應該在 nginx.conf 通過設置 server_tokens off 來禁用

控制資源和限制
為了防止對 Nginx 進行潛在的 DOS 攻擊,可以為所有客戶端設置緩沖區大小限制,配置如下:
- client_body_buffer_size 指定客戶端請求主體緩沖區的大小。默認值為8k或16k,但建議將此值設置為低至1k:client_body_buffer_size 1k
- client_header_buffer_size 為客戶端請求標頭指定標頭緩沖區大小。 設置為 1k 足以應付大多數請求。
- client_max_body_size 為客戶端請求指定可接受的最大正文大小。 設置為 1k 應該足夠了,但是如果通過 POST方法接收文件上傳,則需要增加它。
- large_client_header_buffers 指定用于讀取大型客戶端請求標頭的緩沖區的最大數量和大小。將最大緩沖區數設置為 2,每個緩沖區的最大大小為 1k。該指令將接受 2 kB 數據, large_client_header_buffers 2 1k
禁用所有不需要的 HTTP 方法
禁用所有不需要的 HTTP 方法,下面設置意思是只允許 GET、HEAD、POST 方法,過濾掉 DELETE 和 TRACE 等方法。
location / {limit_except GET HEAD POST { deny all; }}
另一種方法是在 server 塊 設置,不過這樣是全局設置的,要注意評估影響
if ($request_method !~ ^(GET|HEAD|POST)$ ) { ? return 444; }
監控訪問日志和錯誤日志
持續監控和管理 Nginx 的錯誤日志,就能更好的了解對 web 服務器的請求,注意到任何遇到的錯誤,有助于發現任何攻擊嘗試,并確定您可以執行哪些操作來優化服務器性能。
可以使用日志管理工具(例如 logrotate )來旋轉和壓縮舊日志并釋放磁盤空間。 同樣,ngx_http_stub_status_module 模塊提供對基本狀態信息的訪問。

合理配置響應頭
為了進一步加強 Nginx web 的性能,可以添加幾個不同的響應頭,推薦
X-Frame-Options
可以使用 X-Frame-Options HTTP 響應頭指示是否應允許瀏覽器在 或
配置文件中添加:
add_header X-Frame-Options "SAMEORIGIN";
Strict-Transport-Security
HTTP Strict Transport Security,簡稱為 HSTS。它允許一個 HTTPS 網站,要求瀏覽器總是通過 HTTPS 來訪問它,同時會拒絕來自 HTTP 的請求,操作如下:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
CSP
Content Security Policy (CSP) 保護你的網站避免被使用如 XSS,SQL注入等手段進行攻擊,操作如下:
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
配置 SSL 和 cipher suites
Nginx 默認允許使用不安全的舊 SSL 協議,ssl_protocols TLSv1 TLSv1.1 TLSv1.2,建議做如下修改:
ssl_protocols TLSv1.2 TLSv1.3;
此外要指定 cipher suites ,可以確保在 TLSv1 握手時,使用服務端的配置項,以增強安全性。
ssl_prefer_server_ciphers on
定期更新服務器
舊版的 Nginx 總會存在各種各樣的漏洞,所以最好更新到最新版。
漏洞可以去各大 CVE 網站去查詢,Nginx 最新版則去官網查看。