sudo apt-get install nginx fcgiwrap
2. 修改 nginx 設定檔, 它位於 /etc/nginx/sites-available/default
找尋 server {} 區塊, 以便增加 fastcgi 可支援 /cgi-bin/ 目錄, 加入以下設定, 並讓nginx doc root設定到 /usr/share/nginx/html 目錄:
server {
# ...
root /usr/share/nginx/html;
location /cgi-bin/ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
#...
}
上述 fastcgi_param 指示當 http client 要求獲取 fastcgi_script_name時, 自動在該 fastcgi_script_name 前面增加 $document_root 目錄以便形成絕對位址找到正確路徑,此時 SCRIPT_FILENAME=$document_root$fastcgi_script_name.
3. 同樣在 server區塊內, 可以增加 https 支援並監聽 443 port, 加入以下設定:
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
4. 產生 /etc/nginx/ssl 目錄, 並在該目錄下執行 openssl, 按照螢幕指令輸入資料, 便可產生兩個密鑰檔案 nginx.key 及 nginx.crt
sudo mkdir /etc/nginx/ssl
sudo cd /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
5. 重新啟動 nginx
sudo service nginx restart
6. 如果成功, 使用瀏覽器開啟網址 https://127.0.0.1, 便可看到 nginx server 所顯示出的訊息
p.s.
1. nginx 的 config file 在 location 區塊可以利用 try_files 來取代 if 的語法, 或是用來找尋檔案, 但須注意的是只有最後一個參數會導致 nginx 內部重新導向(例如 cgi 程式等), 因此像是使用 script 所寫的檔案時就要小心, 僅適合放在最後一個參數, 若放在中間一旦被匹配到, 則導致 nginx 直接處理並將整個源碼(source code)傳送到客戶端(client). 因此最保險的作法是將源碼放在一個目錄(例如 /cgi-bin)裡, 再利用 location /cgi-bin { } 指引來設定該目錄存取方式, 在此區塊內不要使用 try_files, 如此一來存取到該目錄內的所有檔案就比較能獲得控制.
2. 在 config file 內每一行結尾要使用分號(;)做結束, 否則 service nginx restart 會顯示出錯誤訊息
3. 更新 nginx 到最新版讓它支援 http2, 目前最新版是1.10.0, 更新方法詳見文章: http://nginx.org/en/linux_packages.html#distributions
(a) 下載 nginx key 檔案, 避免升級時產生警告, 並加入 apt-key
sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
(b) 修改 /etc/apt/sources.list, 其中 codename 須依照系統自行修改, 我用的是 linux mint 17.3(用 unmae -a 查, 他其實是 ubuntu 14.04)所以 codename 是 trusty, 因此加入以下兩行文字
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
(c) 接著再下達更新指令, 但更新前先備份好設定檔(例如 /etc/nginx/sites-available/default 等)
sudo apt-get update
sudo apt-get install nginx
(d) 修改 /etc/nginx/sites-available/default 文件, 將 ssl 所需文字從剛剛備份檔複製貼上, 但須將listen 443 ssl 更改成 listen 443 ssl http2;並添加一行 ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
我的 /etc/nginx/sites-available/default 完整內容如下:
server {
listen 443 ssl http2 default_server;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
location /cgi-bin/ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
}
(e) 重新啟動 nginx
sudo service nginx restart
(f) 查看目前 nginx 版本:
nginx -v
(g) 用瀏覽器瀏覽 http://127.0.0.1 時他會自動重新導向 https://127.0.0.1 完成!
(h) 要檢視 http2 是否真的有在運作, 參考文章: https://www.nginx.com/blog/early-alpha-patch-http2/ 可以安裝 http/2 and SPDY indicator,如果是 chrome browser 安裝 plug-in :
https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en
如果是 firefox 則安裝 plug-in : https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/
4. 如果發現 cgi 程式無法存取硬碟時目錄時, 可能是權限不足, 用 sudo 建立目錄並開放權限給 www-data
sudo mkdir /usr/share/nginx/html/cgi-bin
sudo mkdir /usr/share/nginx/html/cgi-bin/db
sudo chown www-data. /usr/share/nginx/html/cgi-bin/db
p.s.
1. nginx 的 config file 在 location 區塊可以利用 try_files 來取代 if 的語法, 或是用來找尋檔案, 但須注意的是只有最後一個參數會導致 nginx 內部重新導向(例如 cgi 程式等), 因此像是使用 script 所寫的檔案時就要小心, 僅適合放在最後一個參數, 若放在中間一旦被匹配到, 則導致 nginx 直接處理並將整個源碼(source code)傳送到客戶端(client). 因此最保險的作法是將源碼放在一個目錄(例如 /cgi-bin)裡, 再利用 location /cgi-bin { } 指引來設定該目錄存取方式, 在此區塊內不要使用 try_files, 如此一來存取到該目錄內的所有檔案就比較能獲得控制.
2. 在 config file 內每一行結尾要使用分號(;)做結束, 否則 service nginx restart 會顯示出錯誤訊息
3. 更新 nginx 到最新版讓它支援 http2, 目前最新版是1.10.0, 更新方法詳見文章: http://nginx.org/en/linux_packages.html#distributions
(a) 下載 nginx key 檔案, 避免升級時產生警告, 並加入 apt-key
sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
(b) 修改 /etc/apt/sources.list, 其中 codename 須依照系統自行修改, 我用的是 linux mint 17.3(用 unmae -a 查, 他其實是 ubuntu 14.04)所以 codename 是 trusty, 因此加入以下兩行文字
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
(c) 接著再下達更新指令, 但更新前先備份好設定檔(例如 /etc/nginx/sites-available/default 等)
sudo apt-get update
sudo apt-get install nginx
(d) 修改 /etc/nginx/sites-available/default 文件, 將 ssl 所需文字從剛剛備份檔複製貼上, 但須將listen 443 ssl 更改成 listen 443 ssl http2;並添加一行 ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
我的 /etc/nginx/sites-available/default 完整內容如下:
server {
listen 443 ssl http2 default_server;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
location /cgi-bin/ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
}
(e) 重新啟動 nginx
sudo service nginx restart
(f) 查看目前 nginx 版本:
nginx -v
(g) 用瀏覽器瀏覽 http://127.0.0.1 時他會自動重新導向 https://127.0.0.1 完成!
(h) 要檢視 http2 是否真的有在運作, 參考文章: https://www.nginx.com/blog/early-alpha-patch-http2/ 可以安裝 http/2 and SPDY indicator,如果是 chrome browser 安裝 plug-in :
https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en
如果是 firefox 則安裝 plug-in : https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/
4. 如果發現 cgi 程式無法存取硬碟時目錄時, 可能是權限不足, 用 sudo 建立目錄並開放權限給 www-data
sudo mkdir /usr/share/nginx/html/cgi-bin
sudo mkdir /usr/share/nginx/html/cgi-bin/db
sudo chown www-data. /usr/share/nginx/html/cgi-bin/db
沒有留言:
張貼留言