Laravel 5.5 官方推薦 Nginx 配置學習
Laravel 5.5 版本官方放出了 Nginx 伺服器的配置,中文文件:伺服器配置 Nginx
server {
listen 80;
server_name example.com;
root /example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
自己並不擅長 Nginx,相信很多朋友跟我一樣,讓我們一起學習下 Nginx 的相關知識 : )
1. add_header X-Frame-Options "SAMEORIGIN";
X-Frame-Options
X-Frame-Options 有三個值:
DENY
表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中巢狀也不允許。
SAMEORIGIN
表示該頁面可以在相同域名頁面的 frame 中展示。
ALLOW-FROM uri
表示該頁面可以在指定來源的 frame 中展示。
該響應頭設定應該比較常見,之前國外客戶的安全團隊有使用工具掃描我們專案的相關漏洞,其中就有這個 clickjacking
的問題,最終也是通過該設定來解決此問題。
2. add_header X-XSS-Protection "1; mode=block";
XSS 是跨站指令碼攻擊,是比較常見的網路攻擊手段,改欄位指示瀏覽器是否為當前頁面開啟瀏覽器內建的 XSS 過濾機制。 1
表示允許過濾器,mode=block
指示瀏覽器在檢測到 XSS 攻擊後禁止載入整個頁面。
3. add_header X-Content-Type-Options "nosniff";
該響應頭設定禁用瀏覽器對 Content-Type 型別進行猜測的行為。因為很多情況下伺服器並沒有很好的配置 Content-Type 型別,因此瀏覽器會根據文件的資料特徵來確定型別,比如攻擊者可以讓原本解析為圖片的請求被解析為 JavaScript。
我們發現以上三個比較常見的防攻擊配置,還是非常實用的,建議使用,之前我們的伺服器只使用了 add_header X-Frame-Options "SAMEORIGIN";
配置。
4. 不記錄 favicon.ico 和 robots.txt 日誌
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
favicon.ico
網站頭像,預設是瀏覽器標籤頁上網站小圖示以及收藏時顯示的小圖示。
如果未在html header中指定 favicon.ico
那麼瀏覽器預設會去訪問 http://xxx.com/favicon.ico
, 不存在此檔案的話,那麼會導致404,同時會記錄到 access_log 和 error_log 中。這種記錄到日誌檔案中是沒有必要性的,因此可以取消。
robots.txt
通常是搜尋引擎蜘蛛(爬蟲)會去爬取的檔案,在行業規範中,蜘蛛去爬取一個網站的時候會首先爬取該檔案來獲知網站中哪些目錄檔案不需要爬取,在 SEO 中 robots.txt
的正確配置是對 SEO 非常有效果的。該檔案也確實沒有必要記錄到日誌中,而且大部分網站並不存在 robots.txt
檔案。
以上這些配置是可以用在大部分的網站上的,不止是 Nginx 伺服器,相信 Apache 伺服器也有相關的配置,如果你正在用其他web伺服器,以上類似的配置也建議使用。