Nginx高级模块(四)

简介: Nginx高级模块(四)

rewrite规则

实现url重写以及重定向

Syntax: rewrite regex replacement [flag];

Default: —

Context: server, location, if

正则表达式

符号 表示意义
. 匹配除换行符以外的任意字符
? 重复0次或者1次
+ 重复1次或者更多次
* 最少链接数,那个机器连接数少就分发
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结束
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个
\ 转义字符
() 用于匹配括号之间的内容,通过$1,$2调用

更多:http://tool.oschina.net/uploads/apidocs/jquery/regexp.html

https://zhidao.baidu.com/question/1732442184451227507.html

后缀 表示的含义
last 停止这一轮的rewrite检测,然后查找匹配改变后URI的新location
break 停止rewrite检测
redirect 返回302临时重定向,客户端会再次请求服务器
permanent 返回301永久重定向,客户端会永久保存该重定向 ,不会请求服务器

geoip_module模块

基于IP地址匹配MaxMind GeoIP二进制文件,读取IP所在地域信息。

需要安装此模块

yum install nginx-module-geoip

使用场景:

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

在nginx.conf头部引入改模块

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";

在MaxMind上下载地域文件:https://www.maxmind.com/en/home

下载GeoIP.dat.gz和GeoLiteCity.dat.gz一个是国家的ip库,一个是城市的ip库

在con.d配置一个conf

#使用
geoip_country /etc/nginx/geoip/GeoIP.dat;
geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
server {
    listen       80;
    server_name  localhost bushro.club;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        if($geoip_country_code !=CN){
          return 403;
        }
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    location  /myip {
       default_type text/plain;
       return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

访问myip接口就可以得到该地址的国家,城市信息。

实现对不同地区的访问控制。

HTTPS

为什么需要https?

HTTP协议由于是明文传送,所以存在三大风险:

  • 被窃听的风险:第三方可以截获并查看你的内容
  • 被篡改的危险:第三方可以截获并修改你的内容
  • 被冒充的风险:第三方可以伪装成通信方与你通信

https协议

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

https证书

生成秘钥和CA证书步骤:

步骤1、生成key秘钥

步骤2、生成证书签名请求文件(csr文件)

步骤3、生成证书签名文件(CA文件)

安装openssl

yum install -y openssl

需要有ssl模块nginx -V可以查看

--with-http_ssl_module

在nginx目录下创建ssl_key目录并执行,会让你输入两次自己定义的密码,需要记住,后面会使用到

文件名称可以随意

openssl genrsa -idea -out jesonc.key 1024

2019060912482885.png

把这个key文件变成证书请求文件

openssl req -new -key jesonc.key -out jesonc.csr
• 1

然后需要输入一些信息,最后生成文件

20190609130442478.png

可以把这两个文件交给权威机构进行签名,如果是个人的话可以自己签名

如果不指定日期的话默认是一个月就会失效,需要输入最开始设置的密码

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

20190609131031540.png

Nginx配置https

server {
    listen      443;
    server_name  192.168.254.130 bushro.home;
    ssl_certificate /etc/nginx/ssl_key/jesonc.crt;
    ssl_certificate_key /etc/nginx/ssl_key/jesonc.key;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Https服务优化

  • 激活keepaliva长连接
  • 设置ssl session缓存
keepalive_timeout 100;
ssl_on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

Nginx常见问题

相同server_name多个虚拟主机优先级访问

最后读取到那个配置就按照那个配置的规则。

Nginx的alias和root区别

location /request_path/image/{
   root /local_path/image/;
}
location /request_path/image/{
   alias /local_path/image/;
}

例如访问的地址为:http://www.baidu.com/request_path/image/1.png

root配置实际访问的是:/local_path/image/request_path/image/1.png

alias配置访问的是:/local_path/image/1.png

传递用户的真实IP地址

在多级代理的时候与第一级代理约定一个头,把真实的用户ip放进去,之后的代理依次传递,最后后端就可以获取到真实的ip地址。

常见错误

  • 413
    用户上传文件限制
    client_max_body_size
  • 502
    后端服务无响应

ab接口压力测试工具

yum install -y httpd-tools

ab -n 2000 -c 2 http://127.0.0.1/

-n 总的请求数

-c 并发数

-k 是否开启长连接

Nginx性能优化

  • 文件句柄
    Linux\Unix一切皆文件,文件句柄就是一个索引
    默认是1024个文件句柄

全局修改

vim /etc/security/limits.conf

末尾添加

root soft nofile 10000
root hard nofile 10000

上传文件漏洞

在上传图片(1.jpg)中植入php代码,然后访问XXX/1.jpg/1.php

Nginx将1.jpg作为php代码执行

相关文章
|
6月前
|
应用服务中间件 nginx
Nginx安装nginx-rtmp-module模块
【2月更文挑战第4天】 nginx中的模块虽然就是类似插件的概念,但是它无法像VsCode那样轻松的安装扩展。 nginx要安装其它模块必须同时拿到nginx源代码和模块源代码,然后手动编译,将模块打到nginx中,最终生成一个名为nginx的可执行文件。
523 6
|
6月前
|
应用服务中间件 nginx
百度搜索:蓝易云【利用nginx内置ngx_http_mirror_module模块实现流量复制及流量放大】
以上就是使用Nginx内置 `ngx_http_mirror_module`模块实现流量复制和流量放大的简要示例。通过合理配置和利用该模块,可以实现更复杂的流量控制和调试需求。
110 1
|
3月前
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
455 2
|
1月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
29 0
|
3月前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
164 1
|
3月前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
3月前
|
缓存 前端开发 应用服务中间件
Nginx:location配置模块的用法(二)
Nginx:location配置模块的用法(二)
115 2
|
4月前
|
应用服务中间件 Linux nginx
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
《FFmpeg开发实战》书中介绍了如何使用FFmpeg向网络推流,简单流媒体服务器MediaMTX不适用于复杂业务。nginx-rtmp是Nginx的RTMP模块,提供基本流媒体服务。要在Linux上集成rtmp,需从官方下载nginx和nginx-rtmp-module源码,解压后在nginx目录配置并添加rtmp模块,编译安装。配置nginx.conf启用RTMP服务,监听1935端口。使用ffmpeg推流测试,如能通过VLC播放,表明nginx-rtmp运行正常。更多详情见书本。
116 0
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
|
3月前
|
Ubuntu 前端开发 JavaScript
如何在 Ubuntu 14.04 上为 Nginx 添加 gzip 模块
如何在 Ubuntu 14.04 上为 Nginx 添加 gzip 模块
28 0
|
5月前
|
Web App开发 网络协议 应用服务中间件
老程序员分享:Nginx高级配置
老程序员分享:Nginx高级配置
51 0