有一陣子 Rails 在本機開發流行 Pow,但是因為缺少維護問題多多,我個人是不太愛用。平常我也沒有需要一直開新專案,一個案子都做很久啊,所以偏好自己在 Mac 上安裝 Nginx 做 reverse-proxy 導流,而且還可以把 HTTP/2 打開加快靜態檔案下載速度,有 HTTPS 也才能測試一切正常,現在網站都全面上 SSL 加密連線了。
以下示範如何將 https://ihower.localhost
導流進 localhost:3001
。請把 ihower 換成你要的名稱。
1. 編輯 /etc/hosts
sudo vi /etc/hosts 加上
127.0.0.1 ihower.localhost
2. 產生自簽的 SSL key
以下指令參考自 https://localhost
這篇文章
mkdir ~/.ssl
openssl req -newkey rsa:2048 -x509 -nodes -keyout ~/.ssl/ihower.key -new -out ~/.ssl/ihower.crt -subj /CN=ihower.localhost -reqexts SAN -extensions SAN -config <(cat /System/Library/OpenSSL/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:ihower.localhost')) -sha256 -days 3650
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.ssl/ihower.crt
這樣會產生 ihower.localhost 的 SSL key 放在 ~/.ssl/ 下,並且把這個 key 加入 Mac 的信任名單
3. 安裝和設定 Nginx
brew install nginx
編輯 /usr/local/etc/nginx/nginx.conf,新增一段:
server {
listen 80;
server_name ihower.localhost;
root /Users/ihower/projects/ihower/public; # 你的 Rails 項目的 public 目錄
listen 443 ssl http2;
ssl_certificate /Users/ihower/.ssl/ihower.crt;
ssl_certificate_key /Users/ihower/.ssl/ihower.key;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host 'ihower.localhost';
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重啟 Nginx
sudo brew services stop nginx
sudo brew services start nginx
4. 啟動 Rails 在 Port 3001
rails s -p 3001
當然,你用其他的 application server 例如 Node.js 跑在 Port 3001 都可以的
打開瀏覽器就前往 https://ihower.localhost
就有 SSL 又有 HTTP/2 啦。