Nginx(與ssl結合配置https網站、rewrite,fastcgi配置詳解)
前言
前面已經介紹過Nginx的一些基礎概念,還有幾個比較重要的模塊:利用ssl給會話加密,利用rewrite功能靈活改寫訪問結果,以及利用fastcgi與php模塊結合等等。
一、配置https網站
1、自建CA
(1)生成私鑰文件
mkdir -p /etc/pki/CA/private #創建私鑰保存的目錄
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) #創建私鑰
ll /etc/pki/CA/private/ # 私鑰只能自己保存,對保密性要求高
(2)生成自簽證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 7300
(3)為CA提供所需的目錄和文件
touch /etc/pki/CA/index.txt # 創建數據庫文件
echo 01 > /etc/pki/CA/serial # 創建序列號文件并給明第一個證書的序列號碼
ll /etc/pki/CA
CA創建完成
2、證書申請
(1)在證書申請的主機上生成私鑰
cd /etc/nginx/
mkdir ssl #創建保存私鑰的目錄
cd ssl
(umask 077;openssl genrsa -out nginx.key 2048)
ll
(2)生成證書簽署請求
openssl req -new -key nginx.key -out nginx.csr -days 365
(3)把請求發送給CA,因為這是本機,就不發了。
(4)CA簽發證書
openssl ca -in /etc/nginx/ssl/nginx.csr -out /etc/nginx/ssl/nginx.crt -days 365
報錯如下:
說明我們生成自簽證書沒做好,上去檢查那一步,發現什么事情,我們的自簽證書生成到root目錄下了。所以再來一次絕對路徑的:openssl req -new -key /etc/pki/CA/private/cakey.pem -days 365 -x509 -out /etc/pki/CA/cacert.pem
再試試:結果如下
cd /etc/nginx/ssl 看一下:
3、配置/etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
檢查,重啟,測試
最后說一下幾個配置項的含義:具體見官網ngx——http——ssl——moudle模塊
SSL on|off ;是否啟用ssl功能 SSL certificate ; 指明當前主機的證書文件 SSL_certificate ; 當前虛擬主機使用的證書問價 SSL_certificate ;當前虛擬主機使用的證書文件中的公鑰配對的私鑰文件路徑 SSL_protocols ssl會話的協議版本,sslv2不安全,最好使用最新版本 SSL_session_cache 指明SSL會話緩存機制 SSL_session_timeout time; ssl會話超時時長
二、rewrite模塊配置(很重要)
官方文檔在http://nginx.org/en/docs/http/ngxhttprewrite_module.html
用法:rewrite regex replacement [flag];
把用戶請求的URL基于regex做檢查,匹配到時將替換為replacement指定的字符串;
如果replacement是以http:// 或https://開頭,則替換結果會直接重定向返回客戶端
在同一個location中存在的多個rewrite規則會自上而下逐個被檢查,可以使用flag控制此循環功能
[flag]:重寫完成后停止對當前url在當前location中的后續其他重寫操作,改為新的url進行新的一輪處理。
last:提前結束本輪循環,進入下一輪,continue break:終止了,不再循環 redirect:重定向,臨時重定向,302 permanent:永久重定向,301,重寫后生成的新url給客戶端,由客戶端對新url進行請求 例如: location / { rewrite (.*)\.txt$ $1.html; } 請求的txt文件都變成html,重寫,變成一個新的url,然后被下面的匹配。
再加上: location ~*\.html\$ { rewrite (.*)\.html $1.txt; } 后,html又轉化為txt了,就形成一個死循環,所以要在兩個后面加上條件,break。 然后再加上個redirect,臨時重定向 location / { rewrite (.*)\.txt$ $1.html redirect; }
這個狀態值有兩個階段,第一階段是一個正常的返回值200,第二階段是一個臨時的重定向。如果用permanet,返回值就是301,重寫后生成一個新的url返回給客戶端,有客戶端對新url進行請求。
if:只能用在server和location中,條件判斷句,在條件滿足時,執行配置塊終端的配置,引入一個新的配置上下文
condition:比較表達式 == ,!=
~:模式匹配,區分字符大小寫
~*:模式匹配,不區分字符大小寫
!~:模式不匹配,區分大小寫
!~*:模式不匹配,不區分大小寫
文件及目錄存在性判斷:-f,!-f(文件),-e,!-e(存在),-d,!-d(目錄),-x,!-x(執行)
return:
return code [text];
return code url;
return url;
gzip :過濾,對指定類型的資源壓縮傳輸以節約帶寬
gzipcomplevel level;指定壓縮比:1-9
gzip,disable regex ……;regex是匹配客戶端瀏覽器類型的模式,表示對所有匹配的瀏覽器不執行壓縮響應。
gzipminlength length;觸發啟用壓縮功能響應報文的最小長度
gziphttpversion 1.0|1.1;設定啟用壓縮響應功能時協議的最小版本
gziptypes mimetype …;指定僅執行壓縮的資源內容類型,默認為text/html;
三、fastcgi模塊,LNMP
php編譯時要支持fpm;php—fpm工作方式類似于httpd的prefork模式
安裝:yum -y install php-fpm php-mysql php-mbstring php-gd php-xml
啟動:systemctl start php-fpm.service
修改nginx.conf配置文件
一個動態請求,將請求的變量值保存在前端(nginx)的一個參數里,這個變量值向后端發起請求(代理作用),要通過fastcgi_params這個文件傳遞,后端主機在什么地方就要改為什么 fastcgi_param
配置如下:
測試代碼如下:編輯在/web/html下的info.php文件:<?php phpinfo(); ?>
結果如下:
一下是其他配置項,詳情請看官方文檔:
fastcgi cache file :緩存要及時清理和更新 fastcgi_cache_path 先定義緩存空間 path:文件路徑 levels:級別,每一級的數字只有1和2 levels=1:2,表示16個一級子目錄,每個一級子目錄下面有252個2級子目錄 key_zone=name:size 內存中用于緩存k/v映射關系的空間名稱及大小 inactive = time 非活動時間 max_size=size:定義此路徑下的多大空間用于緩存數據; 注意:只能定義在http上下文 fastcgi_cache zone |off 是否啟用cache,若啟用數據緩存于哪個cache
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/64855
班長好勤奮,學習楷模啊