Nginx 進階 (ssl、fpm、rewrite、cache配置等)

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/ # 私鑰只能自己保存,對保密性要求高

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

(2)生成自簽證書

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 7300

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

(3)為CA提供所需的目錄和文件

touch /etc/pki/CA/index.txt # 創建數據庫文件

echo 01 > /etc/pki/CA/serial # 創建序列號文件并給明第一個證書的序列號碼

ll /etc/pki/CA

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

CA創建完成

2、證書申請

(1)在證書申請的主機上生成私鑰

cd /etc/nginx/

mkdir ssl #創建保存私鑰的目錄

cd ssl

(umask 077;openssl genrsa -out nginx.key 2048)

ll

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

(2)生成證書簽署請求

openssl req -new -key nginx.key -out nginx.csr -days 365

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

(3)把請求發送給CA,因為這是本機,就不發了。

(4)CA簽發證書

openssl ca -in /etc/nginx/ssl/nginx.csr -out /etc/nginx/ssl/nginx.crt -days 365

報錯如下:

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

說明我們生成自簽證書沒做好,上去檢查那一步,發現什么事情,我們的自簽證書生成到root目錄下了。所以再來一次絕對路徑的:openssl req -new -key /etc/pki/CA/private/cakey.pem -days 365 -x509 -out /etc/pki/CA/cacert.pem

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

再試試:結果如下

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

cd /etc/nginx/ssl 看一下:

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

3、配置/etc/nginx/nginx.conf

vim /etc/nginx/nginx.conf

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

檢查,重啟,測試

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

最后說一下幾個配置項的含義:具體見官網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,然后被下面的匹配。

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

再加上:
    location ~*\.html\$ {
        rewrite (.*)\.html $1.txt;
        }
后,html又轉化為txt了,就形成一個死循環,所以要在兩個后面加上條件,break。

然后再加上個redirect,臨時重定向
location / {

            rewrite (.*)\.txt$ $1.html redirect;
            }

Nginx 進階 (ssl、fpm、rewrite、cache配置等)這個狀態值有兩個階段,第一階段是一個正常的返回值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

配置如下:

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

測試代碼如下:編輯在/web/html下的info.php文件:<?php phpinfo(); ?>

結果如下:

Nginx 進階 (ssl、fpm、rewrite、cache配置等)

一下是其他配置項,詳情請看官方文檔:

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

(1)
N24_yeziN24_yezi
上一篇 2016-12-26 17:00
下一篇 2016-12-26 17:49

相關推薦

  • 正則表達式

    1:什么是正則表達式: 簡單的說,正則表達式就是處理字符串的方法,它是以行為單位進行字符串的處理行為,正則表達式通過一些特殊符號的輔助,可以讓用戶輕易達到查找,刪除,替換某特定字符串的處理程序。 2:一些參數: grep [-A] [-B] [–color=auto] ‘收索字符串’ filename -A :后面可加數字…

    2017-07-29
  • CentOS進程管理

    CentOS進程管理 筆記 Linux系統中的基本運行單位是進程,通過對系統系統中的進程的管理能夠對系統的實時運行狀態進行了解和調度。Linux中提供了用于查看、調整和停止進程的命令。本文仍然以RHEL6說明Linux系統的進程管理。 CentOS進程管理 一、進程概述 二、查看進程 1、使用ps命令 2、top命令 一、進程概述 程序是保存在存儲介質中的可…

    Linux干貨 2017-05-15
  • iptables的DNAT、SNAT配置

    DNAT:目的地址轉換。當外網主機訪問內網的某臺服務器的時候,如果直接暴露服務器的IP于公網,可能會遭受各種各樣的攻擊,而DNAT的主要作用就是在服務器前面添加一臺防火墻。將防火墻的地址公布出去,讓外網客戶端通過訪問防火墻的地址就可以訪問到本地服務器。這樣就起到了保護服務器的目的; SNAT:源地址轉換。內網主機在訪問互聯網的時候所有源地址都轉換為防火墻的外…

    2017-06-12
  • 于浩的第一篇隨筆

    人生只有兩件事,努力工作,享受生活!

    2018-03-26
  • 馬哥教育網絡班22期+第1周課程練習

    問題1: 計算機組成如下:CPU、存儲器、輸入設備、輸出設備1、中央處理器(Central Processing Unit,簡稱 CPU)。它主要由控制器、運算器等組成,并采用大規模集成電路工藝制成的芯片,又稱微處理器芯片。   CPU又由運算器和控制器組成。1)運算器 運算器又稱算術邏輯單元(Arithmetic Logic Unit簡…

    Linux干貨 2016-08-15
  • N25-第三周作業

      alias NAME='COMMAND'           定義命令的別名—對當前用戶有效  un為解除別名 Which   查看命令別名 Whereis    查看程序的文檔和源碼路徑(-b &nbs…

    Linux干貨 2016-12-18

評論列表(1條)

  • N24_Jerry
    N24_Jerry 2016-12-26 20:24

    班長好勤奮,學習楷模啊

欧美性久久久久