搜尋
首頁後端開發php教程關於Nginx的深度學習內容

關於Nginx的深度學習內容

May 07, 2018 am 11:12 AM
nginx內容學習

這篇文章主要介紹了關於Nginx的深度學習內容,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一、動靜分離

透過中間件將動態請求和靜態請求分開。
原因:分離資源,減少不必要的請求消耗,減少請求延遲。

動態與靜態請求圖例:
關於Nginx的深度學習內容

  • #基本配置

#
upstream php_api{
    server 127.0.0.1:8080;
}
server {
    root filePath;
    location ~ \.php$ {
        proxy_pass http://php_api;
        index index.html index.htm;
    }
    location ~ \.(jpg|png|gif) {
        expires 1h;
        gzip on;
    }
}

二、Rewrite規則

    1、場景:
  • #URL存取跳轉,支援開發設計(頁面跳轉、相容性支援、展示效果等)
  • SEO最佳化
  • #維護(後台維護、流量轉送等)
  • 安全性

2、設定語法

    rewrite
  • 設定語法:rewrite regex replacement [flag];
  • 預設:無
  • Context:server,location,if

範例:

rewrite ^(.*)$ /pages/main.html break;
  1. #regex(正規)
Linux中
pcregrep
指令可以用來測試正規表示式。 | 元字元|意義|#符合換行符號以外的任意字元重複0次或1次#重複1次或更多匹配數字貪婪模式,有多少匹配多少匹配開頭匹配結尾重複n次重複n次或更多 #符合單一字元c符合a-z小寫字母的任一##\ #轉移字元( )調用
.
?
d
*
^
$
{n}
{n,}
[c]
[a-z]
用於匹配()之間的內容,透過$1$2
  1. flag
flag意義last停止rewrite偵測##permanent回傳301永久重定向,網址列會顯示跳轉後的位址#
  • 301永久重定向:除非用户清理缓存,否则下次请求还是会请求到重定向

  • 302临时重定向:用户下次请求还会经过服务端重定向

  • last 和 break的区别:last会新建一个连接,往下继续进行匹配。break会直接停留在那一级。

  • redirect:关闭nginx后,重定向会失效。

  • permanent:关闭nginx,也会重定向到新的地址。

实例:
location / {
    # 文件不存在,直接访问4399
    if (!-f $request_filename) {
        rewrite ^/(.*)$ http://www.4399.com;
    }
}
  1. 优先级

    1. 执行server块的rewrite指令

    2. 执行location匹配

    3. 执行选中的location中的rewrite

三、Nginx的高级模块

(1)制定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问
(2)限制链接生效周期

图例:
關於Nginx的深度學習內容

  • 配置语法

    • 配置语法:secure_link_md5 expression;

    • 默认:无

    • Context:http,server,location

    • 配置语法:secure_link expression;

    • 默认:无

    • Context:http,server,location

    • secure_link

    • secure_link_md5

简单配置实例:

root /opt/app/code;

location / {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri 自定义字符串";

    if ($secure_link = "") {
        return 403;
    }
    if ($secure_link = "0") {
        return 410;
    }
}

生成url的脚本:

#!/bin/bash

servername="你的servername"
download_file="/download/test.img"
time_num=$(date -d "2018-10-18 00:00:00" +%s)
secure_num="自定义字符串"

res=$(echo -n "${time_num}${download_file} ${secure_num}"|openssl md5 -binary | open
ssl base64 | tr +/ -_ | tr -d =)

echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}"
注意:1、生成脚本中自定义字符串和配置中的自定义字符串要保持一致。2、验证规则保持一致。3、如果没有openssl,可以yum安装。

2. geoip_module模块

基于IP地址匹配MaxMine GeoIP二进制文件,读取IP所在地域信息。
默认安装的Nginx是没有安装geoip这个模块的,安装命令:
yum install nginx-module-geoip
  • 使用场景:

    • 区别国内外做HTTP访问规则

    • 区别国内城市地域做HTTP访问规则

  • 使用步骤:

    • wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

    • wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

    • load_module "modules/ngx_http_geoip_module.so";

    • load_module "modules/ngx_stream_geoip_module.so";

  1. 安装geoip:yum install nginx-module-geoip,安装完成查看/etc/nginx/module目录下,如果有对应的so文件,则说明安装成功

  2. 在/etc/nginx/nginx.conf配置文件开头加入

  3. 下载地域分区文件:

  4. 使用gunzip命令解压下载下来的文件

配置示例

geoip_country /etc/nginx/geoip/GeoIP.dat;
geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
server{
    location /myip {
        default_type text/plain;
        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
    }
}

四、基于Nginx的HTTPS服务

1、为什么需要HTTPS

  • 原因:HTTP不安全

  1. 传输数据被中间人盗用、信息泄露

  2. 数据内容劫持、篡改

2、HTTPS协议的实现

对传输内容进行加密以及身份验证
  • 对称加密和非对称加密

  • HTTPS加密协议原理

  • 客户端在使用HTTPS方式与Web服务器通信的步骤

  1. 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接

  2. Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端

  3. 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级

  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站

  5. Web服务器利用自己的私钥解密出会话密钥

  6. Web服务器利用会话密钥加密与客户端之间的通信

通信原理图:
關於Nginx的深度學習內容

3、证书签名生成

准备步骤:

  1. 确认openssl有无安装,openssl version

  2. nginx有无编译http-ssl-module,nginx -V

生成自签证书步骤:

  1. 生成key密钥

  • openssl genrsa -idea -out ronaldo.key 1024

  • 生成证书签名请求文件(csr文件)

    • openssl req -new -key ronaldo.key -out ronaldo.csr

    • 当提示输入 A challenge password时,表示ca文件需要更改的另外一个密码,直接回车即可。

    打包上面两个步骤生成的文件发送给签名机构即可完成证书签名
    1. 生成证书签名文件(CA文件)

    • openssl x509 -req -days 3650 -in ronaldo.csr -signkey ronaldo.key -out ronaldo.crt

    配置语法:

    • ssl

      • 配置语法:ssl on | off;

      • 默认:ssl off;

      • Context:http,server

    • ssl_certificate(crt文件所在位置)

      • 配置语法:ssl_certificate file;

      • 默认:无

      • Context:http,server

    • ssl_certificate_key(key文件所在位置)

      • 配置语法:ssl_certificate_key file;

      • 默认:无

      • Context:http,server

    简单示例:

    server {
        listen 443;
        server_name locahost;
        ssl on;
        ssl_certificate /etc/nginx/ssl_key/ronaldo.crt;
        ssl_certificate_key /etc/nginx/ssl_key/ronaldo.key;
    
        index index.html index.htm;
        location / {
            root /opt/app/code;
        }
    }

    配置完成后:

    1. 停止Nginx:nginx -s stop -c /etc/nginx/nginx.conf,会要求你输入ronaldo.key的密码。

    2. 启动Nginx:nginx -c /etc/nginx/nginx.conf,也会要求你输入密码。

    3. 查看是否启用了443端口:netstat -luntp | grep 443

    4、配置苹果要求的证书

    1. 服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2)

    • 版本:openssl version

    • 自签证书加密签名算法类型以及公钥位数:openssl x509 -noout -text -in ./ronaldo.crt

    • 升级openssl的脚本

    #!/bin/bash
    cd /opt/download
    wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
    tar zxf openssl-1.0.2k.tar.gz
    cd openssl-1.0.2k
    ./config --prefix=/usr/local/openssl
    make && make install
    mv /usr/bin/openssl /usr/bin/openssl.OFF
    mv /usr/include/openssl /usr/include/openssl.OFF
    ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    ln -s /usr/local/openssl/include/openssl /usr/include/openssl
    echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
    ldconfig -v
    openssl version -a
    1. HTTPS证书必须使用SHA256以上哈希算法签名

    2. HTTPS证书必须使用RSA 2048位或ECC 256位以上公钥算法

    3. 使用向前加密技术

    通过自签方式、符合苹果要求、通过key文件直接生成crt文件:
    • openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout ronaldo.key -out ronaldo_apple.crt

    • -keyout参数会同时再生成一个key文件(没有保护码),reload Nginx就不用再次输入密码。

    • 生成crt文件后,只需要修改配置文件即可

    • 直接生成没有保护码的key:openssl rsa -in ./ronaldoold.key -out ./ronaldonew.key

    5、HTTPS服务优化

    1. 激活keepalive长链接

    • 在配置文件写入:keepalive_timeout 100

  • 设置ssl session缓存

    • 在配置文件写入:ssl_session_cache shared:SSL:10m

    五、Nginx与Lua的开发

    Nginx+Lua优势:
    充分的结合Nginx的并发处理epoll优势和Lua的轻量实现简单的功能且高并发的场景。

    1、Lua

    是一个简洁、轻量、可扩展的脚本语言
    1. 安装:yum install lua

    2. 运行:

    • lua命令进入交互界面,输入:print("Hello World")即可

    • 执行lua脚本:

    #!/usr/bin/lua
    print("Hello world")
    1. 注释

    • - - 行注释

    • - -[[块注释- -]]

  • 变量

    • a = 'alon123"'

    • a = "alon123""

    • a = '97lo1004923"'

    • a = [[alo

    • 123"]]

    • 上述是同一个意思,第三点用的是ASCII表

    注意:
    Lua数值类型只有double类型
    Lua布尔类型只有nil和false是false,数字0、空字符串都是true
    Lua中的变量如果没有特殊说明,全是全局变量;如果希望是局部变量,签名加个local
    Lua没有++或是+=这样的操作
    ~=:不等于
    ..:字符串拼接
    io库的分别从stdin和stdout读写的read和write函数
    1. while循环语句

    sum = 0
    num = 1
    while num <= 100 do
        sum = sum + num
        num = num + 1
    end
    print("sum =", sum)
    1. for循环语句

    sum = 0
    for i = 1,100 do
        sum = sum + i
    end
    1. if-else判断语句

    if age == 40 and sex == "Male" then
        print("大于40岁的男人")
    elseif age>60 and sex ~= "Female" then
        print("非女人而且大于60")
    else
        local age = io.read()
        print("Your age is"..age)
    end

    2、Nginx + Lua环境

    1. 所需下载以及安装:

      1. LuaJIT

      2. ngx_devel_kit和lua-nginx-module

      3. 重新编译Nginx

      4. 详细的下载和安装步骤参见:

    3、Nginx调用lua模块指令

    Nginx的可插拔模块化加载执行,共11个处理阶段
    ##break 停止rewrite偵測
    redirect 返回302暫時重定向,網址列會顯示跳轉後的位址
    指令 含义
    set_by_lua,set_by_lua_file 设置nginx变量,可以实现复杂的赋值逻辑
    access_by_lua,access_by_lua_file 请求访问阶段处理,用于访问控制
    content_by_lua,content_by_lua_file 内容处理器,接收请求处理并输出响应

    4、Nginx Lua API

    API 含义
    ngx.var nginx变量
    ngx.req.get_headers 获取请求头
    ngx.req.get_uri_args 获取url请求参数
    ngx.redirect 重定向
    ngx.print 输出响应内容体
    ngx.say 同nginx.print,但是会回车
    ngx.header 输出响应头
    ...

    5、灰度发布

    按照一定的关系区别,分不分的代码进行上线,使代码的发布能平滑过渡上线。
    • 根据用户的信息cookie等信息区别

    • 根据用户的ip地址

    实现灰度发布示意图:
    關於Nginx的深度學習內容

    相关推荐:

    Nginx的场景实践

    关于Nginx的基础内容

    以上是關於Nginx的深度學習內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

    PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

    PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

    PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

    在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

    PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

    PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

    PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

    PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

    PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

    PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

    PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

    PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

    PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

    PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

    PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    威爾R.E.P.O.有交叉遊戲嗎?
    1 個月前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )專業的PHP整合開發工具

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境