Laravel - Getting Started - Deployment

Introduction

學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。



Server Configuration

Nginx

server {
// 監聽 80 port
listen 80;
server_name example.com;
// Document root
root /example.com/public;

// iframe 以及 object 保護
add_header X-Frame-Options "SAMEORIGIN";
// XSS 保護
add_header X-XSS-Protection "1; mode=block";
// 禁止 NGINX 自動判斷資源型態
add_header X-Content-Type-Options "nosniff";

index index.html index.htm index.php;

charset utf-8;

location / {
// 先尋找 $uri, 在尋找 $uri/, 都沒有的話, 重寫規則成 /index.php?query_string
try_files $uri $uri/ /index.php?$query_string;
}

// 若 location 等於 /favicon.ico, 不記入 log
location = /favicon.ico { access_log off; log_not_found off; }
// 若 location 等於 /robots.txt, 不記入 log
location = /robots.txt { access_log off; log_not_found off; }

// error 導向 /index.php, 由 Laravel 處理
error_page 404 /index.php;

// 結尾是 .php 結尾的話, 進入此 location
location ~ \.php$ {
// 經由 unix 通道 pass, 若跨主機或使用容器的話, 需使用 TCP
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
//
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.(?!well-known).* {
deny all;
}
}
  • add_header X-Frame-Options 的用途是?

    用來指示文件是否能夠載入 <frame>, <iframe>, 以及 <object>
  • add_header X-Frame-Options header 中, SAMEORIGIN 的用途是?

    唯有當符合同源政策下, 才能被嵌入到 frame 中
  • add_header X-Frame-Options header 中, DENY 的用途是?

    表示文件無論如何都不可被嵌入到 frame 中, 即使自家網站也不行
  • add_header X-Frame-Options header 中, ALLOW-FROM uri 的用途是?

    唯有列表許可的 URI 才能嵌入到 frame 中
  • add_header X-XSS-Protection “1; mode=block”, 1 代表什麼意思?

    0: 禁用 XSS 保護
    1: 啟用 XSS 保護
    1; mode=blck; 啟用 XSS 保護, 並在檢查到 XSS 攻擊時, 停止渲染頁面
  • add_header X-Content-Type-Options “nosniff”; 的用途?

    網路上的資源有各種類型, 通常瀏覽器會根據 header 的 Content-Type 來分辨它們的類型。如:"text/html" 代表 html 文檔, "image/png" 是 PNG 圖片, "text/css" 是 CSS 樣式文檔。然而, 有些資源的 Content-Type 是錯的或者未定義。這時, 某些瀏覽器會啟用 MIME-sniffing 來猜測該資源的類型, 解析內容並執行。

    例如, 我們即使給一個 html 文檔指定 Content-Type 為 "text/plain", 在 IE8 中這個文檔依然會被當做 html 來解析。利用瀏覽器的這個特性, 攻擊者甚至可以讓原本應該解析為圖片的請求被解析為 JavaScript 。通過下面這個響應頭可以禁用瀏覽器的類型猜測行為:

Optimization

Autoloader Optimization

  • 部署 Production 環境時, 如何優化 Composer 的 class autoloader map?
    composer install --optimize-autoloader --no-dev

Optimizing Configuration Loading

  • 部署 Laravel 到 production 時, 如何優化 cache?

    php artisan config:cache
  • 當執行 php artisan config:cache, .env 檔會失效, 那該如何在程式碼中使用 .env 呢? 可以寫在 config 裡


Optimizing Route Loading

  • 當部署 Laravel 到 production 時, 該怎麼優化 route?
    php artisan route:cache



Laravel - Eloquent ORM - API Resources Laravel - The Basics - Routing (官方文件原子化翻譯)

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×