這篇文章主要介紹了關於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;
#regex(正規) Linux中 pcregrep指令可以用來測試正規表示式。
| 元字元|意義|. #符合換行符號以外的任意字元? 重複0次或1次 #重複1次或更多d 匹配數字* 貪婪模式,有多少匹配多少^ 匹配開頭$ 匹配結尾{n} 重複n次{n,} 重複n次或更多[c] #符合單一字元c[a-z] 符合a-z小寫字母的任一 ##\ #轉移字元 ( )用於匹配()之間的內容,透過
$1、
$2 調用
flag flag 意義 last 停止rewrite偵測##break 停止rewrite偵測 redirect 返回302暫時重定向,網址列會顯示跳轉後的位址 ##permanent 回傳301永久重定向,網址列會顯示跳轉後的位址 #301永久重定向:除非用户清理缓存,否则下次请求还是会请求到重定向
302临时重定向:用户下次请求还会经过服务端重定向
last 和 break的区别:last会新建一个连接,往下继续进行匹配。break会直接停留在那一级。
redirect:关闭nginx后,重定向会失效。
permanent:关闭nginx,也会重定向到新的地址。
实例: location / {
# 文件不存在,直接访问4399
if (!-f $request_filename) {
rewrite ^/(.*)$ http://www.4399.com;
}
} 登入後複製
优先级
执行server块的rewrite指令
执行location匹配
执行选中的location中的rewrite
三、Nginx的高级模块 1. secure_link_module模块 (1)制定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问 (2)限制链接生效周期 图例:
配置语法
配置语法: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";
安装geoip:yum install nginx-module-geoip
,安装完成查看/etc/nginx/module目录下,如果有对应的so文件,则说明安装成功
在/etc/nginx/nginx.conf配置文件开头加入
下载地域分区文件:
使用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不安全
传输数据被中间人盗用、信息泄露
数据内容劫持、篡改
2、HTTPS协议的实现 对传输内容进行加密以及身份验证 通信原理图:
3、证书签名生成 准备步骤:
确认openssl有无安装,openssl version
nginx有无编译http-ssl-module,nginx -V
生成自签证书步骤:
生成key密钥
生成证书签名请求文件(csr文件)
打包上面两个步骤生成的文件发送给签名机构即可完成证书签名 生成证书签名文件(CA文件)
配置语法:
简单示例:
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;
}
} 登入後複製
配置完成后:
停止Nginx:nginx -s stop -c /etc/nginx/nginx.conf
,会要求你输入ronaldo.key的密码。
启动Nginx:nginx -c /etc/nginx/nginx.conf
,也会要求你输入密码。
查看是否启用了443端口:netstat -luntp | grep 443
4、配置苹果要求的证书 服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2)
#!/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 登入後複製
HTTPS证书必须使用SHA256以上哈希算法签名
HTTPS证书必须使用RSA 2048位或ECC 256位以上公钥算法
使用向前加密技术
通过自签方式、符合苹果要求、通过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服务优化 激活keepalive长链接
设置ssl session缓存
五、Nginx与Lua的开发 Nginx+Lua优势: 充分的结合Nginx的并发处理epoll优势和Lua的轻量实现简单的功能且高并发的场景。1、Lua 是一个简洁、轻量、可扩展的脚本语言 安装:yum install lua
运行:
#!/usr/bin/lua
print("Hello world") 登入後複製
注释
变量
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函数while循环语句
sum = 0
num = 1
while num <= 100 do
sum = sum + num
num = num + 1
end
print("sum =", sum) 登入後複製
for循环语句
sum = 0
for i = 1,100 do
sum = sum + i
end 登入後複製
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环境
所需下载以及安装:
LuaJIT
ngx_devel_kit和lua-nginx-module
重新编译Nginx
详细的下载和安装步骤参见:
3、Nginx调用lua模块指令
Nginx的可插拔模块化加载执行,共11个处理阶段
指令
含义
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的深度學習內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
2019-04-16 16:04:28
2020-09-15 11:26:00
2020-09-10 14:26:14
2020-09-08 11:06:15
2020-09-09 09:46:36
2020-10-12 14:51:04
2020-09-10 14:40:02
2019-04-24 16:20:55
2020-10-13 11:40:03
2019-04-15 14:06:21