nginx

nginx

如何隐藏header中的X-Powered-By和Server的版本号

Nginx网站管理员 Published the article • 0 comments • 266 views • 2019-02-28 20:05 • 来自相关话题

### 为什么要隐藏header的X-Powered-By和Server的版本号呢?任何软件都可能存在漏洞,甚至有些漏洞可以提权拿到服务器的最高权限,每天都会有很多扫描器扫描你的服务器,更具服务器的版本和cgi软件及版本找对应的漏洞,从而自动化的注入漏洞,甚至自动化的控制你的服务器,想想是不是很可怕。

### 隐藏X-Powered-By

针对php,我们可以将```php.ini```中的```expose_php = Off```置于```Off```,即隐藏。然后重启```php-fpm```
```bash
php --ini
vim /etc/php.ini +359
service php-fpm restart
```

###隐藏Server的版本号
在```nginx.conf```的```http```中加一行```server_tokens off;```即可。
```
http {
server_tokens off;
}
```

```
vim /etc/nginx.conf
``` 查看全部
### 为什么要隐藏header的X-Powered-By和Server的版本号呢?任何软件都可能存在漏洞,甚至有些漏洞可以提权拿到服务器的最高权限,每天都会有很多扫描器扫描你的服务器,更具服务器的版本和cgi软件及版本找对应的漏洞,从而自动化的注入漏洞,甚至自动化的控制你的服务器,想想是不是很可怕。

### 隐藏X-Powered-By

针对php,我们可以将```php.ini```中的```expose_php = Off```置于```Off```,即隐藏。然后重启```php-fpm```
```bash
php --ini
vim /etc/php.ini +359
service php-fpm restart
```

###隐藏Server的版本号
在```nginx.conf```的```http```中加一行```server_tokens off;```即可。
```
http {
server_tokens off;
}
```

```
vim /etc/nginx.conf
```

nginx unit 伪静态

Nginx家阖万事兴 Published the article • 0 comments • 326 views • 2018-05-23 11:53 • 来自相关话题

 
nginx unit 如何实现伪静态
 
nginx unit 如何实现伪静态

2018年3月17日Nginx宣布支持gRPC

Nginx力不从心 Published the article • 0 comments • 723 views • 2018-03-20 10:06 • 来自相关话题

> 需要下载最新版本的nginx(1.13.10)

今天,我们很高兴分享GRPC交通在第一Nginx的原生支持。如果你像我们一样热心,你可以从我们的存储库中提取快照并分享你的反馈。
我们将这种能力在未来发布nginx的OSS(1.13.10)。
接下来的Nginx的加释放,R15,将包括支持GRPC以及HTTP / 2服务器推送支持了Nginx 1.13.9支持。
Nginx已经可以代理GRPC TCP连接。有了这个新功能,你可以终止,检查,和路由GRPC方法调用。

### 你可以用它来做什么呢?
1. 发布GRPC服务,然后使用Nginx应用HTTP / 2 TLS加密,速率限制,‑基于IP访问控制列表,并记录。
2. 你可以使用加密的HTTP / 2经营服务(H2C明文)或TLS加密和认证的服务。
3. 发布多个GRPC服务通过一个单一的端点,使用Nginx的检查将呼叫路由到每个内部服务。你甚至可以使用相同的端点为HTTPS和HTTP / 2服务,如网站和其他基于‑API。
4. 负载均衡集群GRPC服务,使用圆形罗宾,最少连接,或分布在集群的其他方法调用。然后你可以基于你的GRPC‑服务当你需要额外的容量。
5. 学习更多的Nginx HTTP 2服务器推GRPC支持,登记为我们两视频直播:2018年3月28日上午11:00 CEST或2018年3月29日上午10:00 PDT

### GRPC是什么?
GRPC是一个远程过程调用协议,用于客户端和服务器应用程序之间的通信。它是专为紧凑的(空间‑高效)和便携式多语言,并且支持请求‑响应和流的相互作用。
该协议是越来越受欢迎,包括在服务网格的实现,由于其广泛的语言支持和简单的用户‑面对设计。
在HTTP 2 GRPC运输,无论是明文或加密的TLS‑。
一个电话是GRPC作为一个有效编码体HTTP POST请求(协议实现缓冲区的标准编码)。使用同样的编码GRPC反应身体和使用HTTP拖车在响应端发送状态码。
根据设计,该协议不能被传送通过HTTP GRPC。该协议授权GRPC HTTP/2为了利用复用和流媒体功能的HTTP/2连接。
### 与Nginx GRPC服务管理
下面的例子使用的GRPC你好世界快速入门教程的变体来创建简单的客户端和服务器应用程序。
我们分享nginx的配置细节;对客户端和服务器应用程序的实现留给读者作为练习,但我们也分享一些提示。

### 在一个简单的GRPC服务

首先,我们干预nginx的客户端和服务器应用程序之间。Nginx则提供了一个稳定、可靠的服务器应用程序网关。
开始部署nginx的GRPC更新。如果你想建立nginx的源,记得有http_ssl和http_v2模块。

```bash
auto/configure --with-http_ssl_module --with-http_v2_module
```
Nginx监听GRPC交通使用HTTP服务器和代理服务器使用grpc_pass指令交通。
创建以下代理配置nginx的,听加密GRPC流量在端口80转发请求到服务器的50051端口:

```
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';

server {
listen 80 http2;

access_log logs/access.log main;

location / {
# Replace localhost:50051 with the address and port of your gRPC server
# The 'grpc://' prefix is optional; unencrypted gRPC is the default
grpc_pass grpc://localhost:50051;
}
}
} 查看全部
> 需要下载最新版本的nginx(1.13.10)

今天,我们很高兴分享GRPC交通在第一Nginx的原生支持。如果你像我们一样热心,你可以从我们的存储库中提取快照并分享你的反馈。
我们将这种能力在未来发布nginx的OSS(1.13.10)。
接下来的Nginx的加释放,R15,将包括支持GRPC以及HTTP / 2服务器推送支持了Nginx 1.13.9支持。
Nginx已经可以代理GRPC TCP连接。有了这个新功能,你可以终止,检查,和路由GRPC方法调用。

### 你可以用它来做什么呢?
1. 发布GRPC服务,然后使用Nginx应用HTTP / 2 TLS加密,速率限制,‑基于IP访问控制列表,并记录。
2. 你可以使用加密的HTTP / 2经营服务(H2C明文)或TLS加密和认证的服务。
3. 发布多个GRPC服务通过一个单一的端点,使用Nginx的检查将呼叫路由到每个内部服务。你甚至可以使用相同的端点为HTTPS和HTTP / 2服务,如网站和其他基于‑API。
4. 负载均衡集群GRPC服务,使用圆形罗宾,最少连接,或分布在集群的其他方法调用。然后你可以基于你的GRPC‑服务当你需要额外的容量。
5. 学习更多的Nginx HTTP 2服务器推GRPC支持,登记为我们两视频直播:2018年3月28日上午11:00 CEST或2018年3月29日上午10:00 PDT

### GRPC是什么?
GRPC是一个远程过程调用协议,用于客户端和服务器应用程序之间的通信。它是专为紧凑的(空间‑高效)和便携式多语言,并且支持请求‑响应和流的相互作用。
该协议是越来越受欢迎,包括在服务网格的实现,由于其广泛的语言支持和简单的用户‑面对设计。
在HTTP 2 GRPC运输,无论是明文或加密的TLS‑。
一个电话是GRPC作为一个有效编码体HTTP POST请求(协议实现缓冲区的标准编码)。使用同样的编码GRPC反应身体和使用HTTP拖车在响应端发送状态码。
根据设计,该协议不能被传送通过HTTP GRPC。该协议授权GRPC HTTP/2为了利用复用和流媒体功能的HTTP/2连接。
### 与Nginx GRPC服务管理
下面的例子使用的GRPC你好世界快速入门教程的变体来创建简单的客户端和服务器应用程序。
我们分享nginx的配置细节;对客户端和服务器应用程序的实现留给读者作为练习,但我们也分享一些提示。

### 在一个简单的GRPC服务

首先,我们干预nginx的客户端和服务器应用程序之间。Nginx则提供了一个稳定、可靠的服务器应用程序网关。
开始部署nginx的GRPC更新。如果你想建立nginx的源,记得有http_ssl和http_v2模块。

```bash
auto/configure --with-http_ssl_module --with-http_v2_module
```
Nginx监听GRPC交通使用HTTP服务器和代理服务器使用grpc_pass指令交通。
创建以下代理配置nginx的,听加密GRPC流量在端口80转发请求到服务器的50051端口:

```
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';

server {
listen 80 http2;

access_log logs/access.log main;

location / {
# Replace localhost:50051 with the address and port of your gRPC server
# The 'grpc://' prefix is optional; unencrypted gRPC is the default
grpc_pass grpc://localhost:50051;
}
}
}

Centos如何安装openresty/nginx搭建自己的服务器

Openresty哥不帅!但耐看。 Published the article • 0 comments • 646 views • 2018-03-19 19:27 • 来自相关话题

首先下载最新的安装包
```bash
wget https://openresty.org/download ... ar.gz
cd /mnt
tar -zvxf openresty-1.11.2.5.tar.gz
cd openresty-1.11.2.5
```
### 安装openresty环境依赖
```bash
yum install pcre-devel openssl-devel gcc curl
```

### 编译安装

```bash
./configure --prefix=/opt/openresty \
--with-pcre-jit \
--with-ipv6 \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_postgres_module \
-j2

make -j4
sudo make install
```

通过以上步骤就可以完成openresty的安装了 查看全部
首先下载最新的安装包
```bash
wget https://openresty.org/download ... ar.gz
cd /mnt
tar -zvxf openresty-1.11.2.5.tar.gz
cd openresty-1.11.2.5
```
### 安装openresty环境依赖
```bash
yum install pcre-devel openssl-devel gcc curl
```

### 编译安装

```bash
./configure --prefix=/opt/openresty \
--with-pcre-jit \
--with-ipv6 \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_postgres_module \
-j2

make -j4
sudo make install
```

通过以上步骤就可以完成openresty的安装了

nginx如何配置多个虚拟主机,支持多个web服务,绑定不同的域名?

Linux网站管理员 Published the article • 0 comments • 332 views • 2018-02-23 10:15 • 来自相关话题

nginx.conf 的文件配置,我的当前路径是`/xxx/xxx/openresty/nginx/conf`

```
user www-data;
worker_processes 8;
worker_rlimit_nofile 102400;

pid logs/nginx.pid;

events {
worker_connections 1024;
}
http {
# add_header Access-Control-Allow-Origin *;
# lua_package_path
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" '
'$status $body_bytes_sent "$http_referer" $upstream_status $upstream_addr $request_time $upstream_response_time '
'"$http_user_agent" "$http_x_forwarded_for"' ;
sendfile on;

keepalive_timeout 65;
client_max_body_size 500M;
gzip on;
gzip_min_length 1k;
gzip_buffers 8 32k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types image/jpeg image/gif image/png text/plain application/x-javascript text/javascript text/css application/xml;
gzip_vary off;

include site-available/*.conf; # 添加虚拟主机路径, *.conf 代表目录下所有为.conf后缀的文件
}
```
重点是`include site-available/*.conf`。
nginx可以识别`site-available`目录下所有已`conf`后缀结尾的配置文件,加载这些配置。

### 虚拟主机目录`/xxx/xxx/openresty/nginx/conf/site-available`

#### 配置文件目录结构
```
.
├── wechat.conf
├── weixin.conf
├── wx_vote.conf
├── xcx_wx.conf
├── xiaochandou.conf
└── zhuancoin.conf
```

#### crm.conf的配置
```
server {

listen 80;
server_name crm.sourcedev.cc;

access_log /var/log/nginx/crm.sourcedev.cc.access.log;
error_log /var/log/nginx/crm.sourcedev.cc.error.log;

# types { application/font-woff2 woff2; }

root /home/xxx/www/crm;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/phpfpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf|ttf|woff|woff2)(.*) {
expires 30d;
}

}
```

单个主机的配置,需要注意的是端口监听 listen 和server_name的配置,还有就是php的配置,这个配置好的可以直接使用,修改一下root目录,和php-fpm的sock就好了。

  查看全部
nginx.conf 的文件配置,我的当前路径是`/xxx/xxx/openresty/nginx/conf`

```
user www-data;
worker_processes 8;
worker_rlimit_nofile 102400;

pid logs/nginx.pid;

events {
worker_connections 1024;
}
http {
# add_header Access-Control-Allow-Origin *;
# lua_package_path
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" '
'$status $body_bytes_sent "$http_referer" $upstream_status $upstream_addr $request_time $upstream_response_time '
'"$http_user_agent" "$http_x_forwarded_for"' ;
sendfile on;

keepalive_timeout 65;
client_max_body_size 500M;
gzip on;
gzip_min_length 1k;
gzip_buffers 8 32k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types image/jpeg image/gif image/png text/plain application/x-javascript text/javascript text/css application/xml;
gzip_vary off;

include site-available/*.conf; # 添加虚拟主机路径, *.conf 代表目录下所有为.conf后缀的文件
}
```
重点是`include site-available/*.conf`。
nginx可以识别`site-available`目录下所有已`conf`后缀结尾的配置文件,加载这些配置。

### 虚拟主机目录`/xxx/xxx/openresty/nginx/conf/site-available`

#### 配置文件目录结构
```
.
├── wechat.conf
├── weixin.conf
├── wx_vote.conf
├── xcx_wx.conf
├── xiaochandou.conf
└── zhuancoin.conf
```

#### crm.conf的配置
```
server {

listen 80;
server_name crm.sourcedev.cc;

access_log /var/log/nginx/crm.sourcedev.cc.access.log;
error_log /var/log/nginx/crm.sourcedev.cc.error.log;

# types { application/font-woff2 woff2; }

root /home/xxx/www/crm;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/phpfpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf|ttf|woff|woff2)(.*) {
expires 30d;
}

}
```

单个主机的配置,需要注意的是端口监听 listen 和server_name的配置,还有就是php的配置,这个配置好的可以直接使用,修改一下root目录,和php-fpm的sock就好了。

 

全开源,包安装!CRM客户关系管理系统OA协同办公PHP软件codeinteger

PHP网站管理员 Published the article • 0 comments • 598 views • 2017-12-17 08:22 • 来自相关话题

### 全开源,无限制,包安装!!!
> 体验地址 : http://crm.sourcedev.cc/authentication/admin
> 账号:2411125253@qq.com
> QQ:2411125253
> 密码:123 

### 此产品Wexone为店主二次再开发
> 开发框架php ci(codeinteger)

#### nginx 伪静态(配置nginx.conf,codeigniter在nginx安装配置及URL重写)

```
location / {
# 这里使用try_files进行url重写,不用rewrite了。
try_files $uri $uri/ /index.php?$query_string;
}
```

#### apache 伪静态(配置.htaccess配置文件,codeigniter在apache安装配置及URL重写)

```
RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|static|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
``` 查看全部

### 全开源,无限制,包安装!!!
> 体验地址 : http://crm.sourcedev.cc/authentication/admin
> 账号:2411125253@qq.com
> QQ:2411125253
> 密码:123 

### 此产品Wexone为店主二次再开发
> 开发框架php ci(codeinteger)

#### nginx 伪静态(配置nginx.conf,codeigniter在nginx安装配置及URL重写)

```
location / {
# 这里使用try_files进行url重写,不用rewrite了。
try_files $uri $uri/ /index.php?$query_string;
}
```

#### apache 伪静态(配置.htaccess配置文件,codeigniter在apache安装配置及URL重写)

```
RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|static|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
```

ffmpeg+nginx+rtmp-module搭建直播优化hls延时处理流媒体协议分析对比区别,obs推送,hls切片

后端开发网站管理员 Published the article • 0 comments • 3724 views • 2017-12-16 20:36 • 来自相关话题

###rtmp流媒体协议RTMP,RTSP与HLS有什么不同

### 协议分析

### RTMP协议
1. 是流媒体协议。
2. RTMP协议是 Adobe 的私有协议,未完全公开。
3. RTMP协议一般传输的是 flv,f4v 格式流。
4. RTMP一般在 TCP 1个通道上传输命令和数据。

### RTSP协议

1. 是流媒体协议。
2. RTSP协议是共有协议,并有专门机构做维护。
3. RTSP协议一般传输的是 ts、mp4 格式的流。
4. RTSP传输一般需要 2-3 个通道,命令和数据通道分离。


### HTTP协议

1. 不是是流媒体协议。
2. HTTP协议是共有协议,并有专门机构做维护。 
3. HTTP协议没有特定的传输流。 
4. HTTP传输一般需要 2-3 个通道,命令和数据通道分离。

## ffmpeg+nginx+rtmp-module搭建

### nginx+rtmp参数介绍

1. rtmp

> 语法:rtmp { ... }
> 上下文:根
> 描述:保存所有 RTMP 配置的块。

2. server

> 语法:server { ... }
> 上下文:rtmp
> 描述:声明一个 RTMP 实例。

3. application

> 语法:application name { ... }
> 上下文:server
> 描述:创建一个 RTMP 应用。application 名的模式并不类似于`http location`
 
4. hls_fragment

> 语法:hls_fragment time
> 上下文:rtmp, server, application
> 描述:设置 HLS 分段长度。默认为 5 秒钟。

5. hls_playlist_length

> 语法:hls_playlist_length time
> 上下文:rtmp, server, application
> 描述:设置 HLS 播放列表长度。默认为 30 秒钟。

 
  查看全部
###rtmp流媒体协议RTMP,RTSP与HLS有什么不同

### 协议分析

### RTMP协议
1. 是流媒体协议。
2. RTMP协议是 Adobe 的私有协议,未完全公开。
3. RTMP协议一般传输的是 flv,f4v 格式流。
4. RTMP一般在 TCP 1个通道上传输命令和数据。

### RTSP协议

1. 是流媒体协议。
2. RTSP协议是共有协议,并有专门机构做维护。
3. RTSP协议一般传输的是 ts、mp4 格式的流。
4. RTSP传输一般需要 2-3 个通道,命令和数据通道分离。


### HTTP协议

1. 不是是流媒体协议。
2. HTTP协议是共有协议,并有专门机构做维护。 
3. HTTP协议没有特定的传输流。 
4. HTTP传输一般需要 2-3 个通道,命令和数据通道分离。

## ffmpeg+nginx+rtmp-module搭建

### nginx+rtmp参数介绍

1. rtmp

> 语法:rtmp { ... }
> 上下文:根
> 描述:保存所有 RTMP 配置的块。

2. server

> 语法:server { ... }
> 上下文:rtmp
> 描述:声明一个 RTMP 实例。

3. application

> 语法:application name { ... }
> 上下文:server
> 描述:创建一个 RTMP 应用。application 名的模式并不类似于`http location`
 
4. hls_fragment

> 语法:hls_fragment time
> 上下文:rtmp, server, application
> 描述:设置 HLS 分段长度。默认为 5 秒钟。

5. hls_playlist_length

> 语法:hls_playlist_length time
> 上下文:rtmp, server, application
> 描述:设置 HLS 播放列表长度。默认为 30 秒钟。

 
 

网站如何防御ddos CC流量攻击,openresty+lua是不错的选择

Openresty网站管理员 Published the article • 0 comments • 2370 views • 2017-07-23 17:42 • 来自相关话题

> 下面的内容是github的有一个项目,但是他的实现方式是用内存共享的方式实现的,要知道,如果nginx重启之后,内存里面的东西就会被释放掉,这样我们记录的东西就会没有了,当流量大了,我们的内存可能吃不消,所以我们可以采用redis来存储,redis支持分布式的存储,持久化,大大的减少了这点的弊端。

### ngx_lua_waf

`ngx_lua_waf`是我刚入职趣游时候开发的一个基于ngx_lua的web应用防火墙。

代码很简单,开发初衷主要是使用简单,高性能和轻量级。

现在开源出来,遵从MIT许可协议。其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。

###用途:

1. 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
2. 防止svn/备份之类文件泄漏
3. 防止ApacheBench之类压力测试工具的攻击
4. 屏蔽常见的扫描黑客工具,扫描器
5. 屏蔽异常的网络请求
6. 屏蔽图片附件类目录php执行权限
7. 防止webshell上传

###推荐安装:

推荐使用`lujit2.1`做lua支持
`ngx_lua`如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

###使用说明:

nginx安装路径假设为:`/usr/local/nginx/conf/`
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加

```conf
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
```
配置config.lua里的waf规则目录(一般在waf/conf/目录下)

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
```
绝对路径如有变动,需对应修改

然后重启nginx即可

###配置文件详细说明:

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "off"
--是否开启攻击信息记录,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "on"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
```
`备注:不要乱动双引号,区分大小写`

###检查规则是否生效

部署完毕可以尝试如下命令:

```bash
curl http://xxxx/test.php?id=../etc/passwd
```
返回"Please go away~~"字样,说明规则生效。
注意:默认,本机在白名单不过滤,可自行调整config.lua配置

###规则更新:

考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。
规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,`nginx reload`即可生效。以保障`ngx lua waf`的高性能。
只记录过滤日志,不开启过滤,在代码里在check前面加上--注释即可,如果需要过滤,反之。

###一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

1. args里面的规则get参数进行过滤的
2. url是只在get请求url过滤的规则
3. post是只在post请求过滤的规则
4. whitelist是白名单,里面的url匹配到不做过滤
5. user-agent是对user-agent的过滤规则

默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分`--`注释即可
日志文件名称格式如下:`虚拟主机名_sec.log` 查看全部

> 下面的内容是github的有一个项目,但是他的实现方式是用内存共享的方式实现的,要知道,如果nginx重启之后,内存里面的东西就会被释放掉,这样我们记录的东西就会没有了,当流量大了,我们的内存可能吃不消,所以我们可以采用redis来存储,redis支持分布式的存储,持久化,大大的减少了这点的弊端。

### ngx_lua_waf

`ngx_lua_waf`是我刚入职趣游时候开发的一个基于ngx_lua的web应用防火墙。

代码很简单,开发初衷主要是使用简单,高性能和轻量级。

现在开源出来,遵从MIT许可协议。其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。

###用途:

1. 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
2. 防止svn/备份之类文件泄漏
3. 防止ApacheBench之类压力测试工具的攻击
4. 屏蔽常见的扫描黑客工具,扫描器
5. 屏蔽异常的网络请求
6. 屏蔽图片附件类目录php执行权限
7. 防止webshell上传

###推荐安装:

推荐使用`lujit2.1`做lua支持
`ngx_lua`如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

###使用说明:

nginx安装路径假设为:`/usr/local/nginx/conf/`
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加

```conf
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
```
配置config.lua里的waf规则目录(一般在waf/conf/目录下)

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
```
绝对路径如有变动,需对应修改

然后重启nginx即可

###配置文件详细说明:

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "off"
--是否开启攻击信息记录,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "on"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
```
`备注:不要乱动双引号,区分大小写`

###检查规则是否生效

部署完毕可以尝试如下命令:

```bash
curl http://xxxx/test.php?id=../etc/passwd
```
返回"Please go away~~"字样,说明规则生效。
注意:默认,本机在白名单不过滤,可自行调整config.lua配置

###规则更新:

考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。
规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,`nginx reload`即可生效。以保障`ngx lua waf`的高性能。
只记录过滤日志,不开启过滤,在代码里在check前面加上--注释即可,如果需要过滤,反之。

###一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

1. args里面的规则get参数进行过滤的
2. url是只在get请求url过滤的规则
3. post是只在post请求过滤的规则
4. whitelist是白名单,里面的url匹配到不做过滤
5. user-agent是对user-agent的过滤规则

默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分`--`注释即可
日志文件名称格式如下:`虚拟主机名_sec.log`

如何隐藏header中的X-Powered-By和Server的版本号

Nginx网站管理员 Published the article • 0 comments • 266 views • 2019-02-28 20:05 • 来自相关话题

### 为什么要隐藏header的X-Powered-By和Server的版本号呢?任何软件都可能存在漏洞,甚至有些漏洞可以提权拿到服务器的最高权限,每天都会有很多扫描器扫描你的服务器,更具服务器的版本和cgi软件及版本找对应的漏洞,从而自动化的注入漏洞,甚至自动化的控制你的服务器,想想是不是很可怕。

### 隐藏X-Powered-By

针对php,我们可以将```php.ini```中的```expose_php = Off```置于```Off```,即隐藏。然后重启```php-fpm```
```bash
php --ini
vim /etc/php.ini +359
service php-fpm restart
```

###隐藏Server的版本号
在```nginx.conf```的```http```中加一行```server_tokens off;```即可。
```
http {
server_tokens off;
}
```

```
vim /etc/nginx.conf
``` 查看全部
### 为什么要隐藏header的X-Powered-By和Server的版本号呢?任何软件都可能存在漏洞,甚至有些漏洞可以提权拿到服务器的最高权限,每天都会有很多扫描器扫描你的服务器,更具服务器的版本和cgi软件及版本找对应的漏洞,从而自动化的注入漏洞,甚至自动化的控制你的服务器,想想是不是很可怕。

### 隐藏X-Powered-By

针对php,我们可以将```php.ini```中的```expose_php = Off```置于```Off```,即隐藏。然后重启```php-fpm```
```bash
php --ini
vim /etc/php.ini +359
service php-fpm restart
```

###隐藏Server的版本号
在```nginx.conf```的```http```中加一行```server_tokens off;```即可。
```
http {
server_tokens off;
}
```

```
vim /etc/nginx.conf
```

nginx unit 伪静态

Nginx家阖万事兴 Published the article • 0 comments • 326 views • 2018-05-23 11:53 • 来自相关话题

 
nginx unit 如何实现伪静态
 
nginx unit 如何实现伪静态

2018年3月17日Nginx宣布支持gRPC

Nginx力不从心 Published the article • 0 comments • 723 views • 2018-03-20 10:06 • 来自相关话题

> 需要下载最新版本的nginx(1.13.10)

今天,我们很高兴分享GRPC交通在第一Nginx的原生支持。如果你像我们一样热心,你可以从我们的存储库中提取快照并分享你的反馈。
我们将这种能力在未来发布nginx的OSS(1.13.10)。
接下来的Nginx的加释放,R15,将包括支持GRPC以及HTTP / 2服务器推送支持了Nginx 1.13.9支持。
Nginx已经可以代理GRPC TCP连接。有了这个新功能,你可以终止,检查,和路由GRPC方法调用。

### 你可以用它来做什么呢?
1. 发布GRPC服务,然后使用Nginx应用HTTP / 2 TLS加密,速率限制,‑基于IP访问控制列表,并记录。
2. 你可以使用加密的HTTP / 2经营服务(H2C明文)或TLS加密和认证的服务。
3. 发布多个GRPC服务通过一个单一的端点,使用Nginx的检查将呼叫路由到每个内部服务。你甚至可以使用相同的端点为HTTPS和HTTP / 2服务,如网站和其他基于‑API。
4. 负载均衡集群GRPC服务,使用圆形罗宾,最少连接,或分布在集群的其他方法调用。然后你可以基于你的GRPC‑服务当你需要额外的容量。
5. 学习更多的Nginx HTTP 2服务器推GRPC支持,登记为我们两视频直播:2018年3月28日上午11:00 CEST或2018年3月29日上午10:00 PDT

### GRPC是什么?
GRPC是一个远程过程调用协议,用于客户端和服务器应用程序之间的通信。它是专为紧凑的(空间‑高效)和便携式多语言,并且支持请求‑响应和流的相互作用。
该协议是越来越受欢迎,包括在服务网格的实现,由于其广泛的语言支持和简单的用户‑面对设计。
在HTTP 2 GRPC运输,无论是明文或加密的TLS‑。
一个电话是GRPC作为一个有效编码体HTTP POST请求(协议实现缓冲区的标准编码)。使用同样的编码GRPC反应身体和使用HTTP拖车在响应端发送状态码。
根据设计,该协议不能被传送通过HTTP GRPC。该协议授权GRPC HTTP/2为了利用复用和流媒体功能的HTTP/2连接。
### 与Nginx GRPC服务管理
下面的例子使用的GRPC你好世界快速入门教程的变体来创建简单的客户端和服务器应用程序。
我们分享nginx的配置细节;对客户端和服务器应用程序的实现留给读者作为练习,但我们也分享一些提示。

### 在一个简单的GRPC服务

首先,我们干预nginx的客户端和服务器应用程序之间。Nginx则提供了一个稳定、可靠的服务器应用程序网关。
开始部署nginx的GRPC更新。如果你想建立nginx的源,记得有http_ssl和http_v2模块。

```bash
auto/configure --with-http_ssl_module --with-http_v2_module
```
Nginx监听GRPC交通使用HTTP服务器和代理服务器使用grpc_pass指令交通。
创建以下代理配置nginx的,听加密GRPC流量在端口80转发请求到服务器的50051端口:

```
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';

server {
listen 80 http2;

access_log logs/access.log main;

location / {
# Replace localhost:50051 with the address and port of your gRPC server
# The 'grpc://' prefix is optional; unencrypted gRPC is the default
grpc_pass grpc://localhost:50051;
}
}
} 查看全部
> 需要下载最新版本的nginx(1.13.10)

今天,我们很高兴分享GRPC交通在第一Nginx的原生支持。如果你像我们一样热心,你可以从我们的存储库中提取快照并分享你的反馈。
我们将这种能力在未来发布nginx的OSS(1.13.10)。
接下来的Nginx的加释放,R15,将包括支持GRPC以及HTTP / 2服务器推送支持了Nginx 1.13.9支持。
Nginx已经可以代理GRPC TCP连接。有了这个新功能,你可以终止,检查,和路由GRPC方法调用。

### 你可以用它来做什么呢?
1. 发布GRPC服务,然后使用Nginx应用HTTP / 2 TLS加密,速率限制,‑基于IP访问控制列表,并记录。
2. 你可以使用加密的HTTP / 2经营服务(H2C明文)或TLS加密和认证的服务。
3. 发布多个GRPC服务通过一个单一的端点,使用Nginx的检查将呼叫路由到每个内部服务。你甚至可以使用相同的端点为HTTPS和HTTP / 2服务,如网站和其他基于‑API。
4. 负载均衡集群GRPC服务,使用圆形罗宾,最少连接,或分布在集群的其他方法调用。然后你可以基于你的GRPC‑服务当你需要额外的容量。
5. 学习更多的Nginx HTTP 2服务器推GRPC支持,登记为我们两视频直播:2018年3月28日上午11:00 CEST或2018年3月29日上午10:00 PDT

### GRPC是什么?
GRPC是一个远程过程调用协议,用于客户端和服务器应用程序之间的通信。它是专为紧凑的(空间‑高效)和便携式多语言,并且支持请求‑响应和流的相互作用。
该协议是越来越受欢迎,包括在服务网格的实现,由于其广泛的语言支持和简单的用户‑面对设计。
在HTTP 2 GRPC运输,无论是明文或加密的TLS‑。
一个电话是GRPC作为一个有效编码体HTTP POST请求(协议实现缓冲区的标准编码)。使用同样的编码GRPC反应身体和使用HTTP拖车在响应端发送状态码。
根据设计,该协议不能被传送通过HTTP GRPC。该协议授权GRPC HTTP/2为了利用复用和流媒体功能的HTTP/2连接。
### 与Nginx GRPC服务管理
下面的例子使用的GRPC你好世界快速入门教程的变体来创建简单的客户端和服务器应用程序。
我们分享nginx的配置细节;对客户端和服务器应用程序的实现留给读者作为练习,但我们也分享一些提示。

### 在一个简单的GRPC服务

首先,我们干预nginx的客户端和服务器应用程序之间。Nginx则提供了一个稳定、可靠的服务器应用程序网关。
开始部署nginx的GRPC更新。如果你想建立nginx的源,记得有http_ssl和http_v2模块。

```bash
auto/configure --with-http_ssl_module --with-http_v2_module
```
Nginx监听GRPC交通使用HTTP服务器和代理服务器使用grpc_pass指令交通。
创建以下代理配置nginx的,听加密GRPC流量在端口80转发请求到服务器的50051端口:

```
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';

server {
listen 80 http2;

access_log logs/access.log main;

location / {
# Replace localhost:50051 with the address and port of your gRPC server
# The 'grpc://' prefix is optional; unencrypted gRPC is the default
grpc_pass grpc://localhost:50051;
}
}
}

Centos如何安装openresty/nginx搭建自己的服务器

Openresty哥不帅!但耐看。 Published the article • 0 comments • 646 views • 2018-03-19 19:27 • 来自相关话题

首先下载最新的安装包
```bash
wget https://openresty.org/download ... ar.gz
cd /mnt
tar -zvxf openresty-1.11.2.5.tar.gz
cd openresty-1.11.2.5
```
### 安装openresty环境依赖
```bash
yum install pcre-devel openssl-devel gcc curl
```

### 编译安装

```bash
./configure --prefix=/opt/openresty \
--with-pcre-jit \
--with-ipv6 \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_postgres_module \
-j2

make -j4
sudo make install
```

通过以上步骤就可以完成openresty的安装了 查看全部
首先下载最新的安装包
```bash
wget https://openresty.org/download ... ar.gz
cd /mnt
tar -zvxf openresty-1.11.2.5.tar.gz
cd openresty-1.11.2.5
```
### 安装openresty环境依赖
```bash
yum install pcre-devel openssl-devel gcc curl
```

### 编译安装

```bash
./configure --prefix=/opt/openresty \
--with-pcre-jit \
--with-ipv6 \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_postgres_module \
-j2

make -j4
sudo make install
```

通过以上步骤就可以完成openresty的安装了

nginx如何配置多个虚拟主机,支持多个web服务,绑定不同的域名?

Linux网站管理员 Published the article • 0 comments • 332 views • 2018-02-23 10:15 • 来自相关话题

nginx.conf 的文件配置,我的当前路径是`/xxx/xxx/openresty/nginx/conf`

```
user www-data;
worker_processes 8;
worker_rlimit_nofile 102400;

pid logs/nginx.pid;

events {
worker_connections 1024;
}
http {
# add_header Access-Control-Allow-Origin *;
# lua_package_path
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" '
'$status $body_bytes_sent "$http_referer" $upstream_status $upstream_addr $request_time $upstream_response_time '
'"$http_user_agent" "$http_x_forwarded_for"' ;
sendfile on;

keepalive_timeout 65;
client_max_body_size 500M;
gzip on;
gzip_min_length 1k;
gzip_buffers 8 32k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types image/jpeg image/gif image/png text/plain application/x-javascript text/javascript text/css application/xml;
gzip_vary off;

include site-available/*.conf; # 添加虚拟主机路径, *.conf 代表目录下所有为.conf后缀的文件
}
```
重点是`include site-available/*.conf`。
nginx可以识别`site-available`目录下所有已`conf`后缀结尾的配置文件,加载这些配置。

### 虚拟主机目录`/xxx/xxx/openresty/nginx/conf/site-available`

#### 配置文件目录结构
```
.
├── wechat.conf
├── weixin.conf
├── wx_vote.conf
├── xcx_wx.conf
├── xiaochandou.conf
└── zhuancoin.conf
```

#### crm.conf的配置
```
server {

listen 80;
server_name crm.sourcedev.cc;

access_log /var/log/nginx/crm.sourcedev.cc.access.log;
error_log /var/log/nginx/crm.sourcedev.cc.error.log;

# types { application/font-woff2 woff2; }

root /home/xxx/www/crm;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/phpfpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf|ttf|woff|woff2)(.*) {
expires 30d;
}

}
```

单个主机的配置,需要注意的是端口监听 listen 和server_name的配置,还有就是php的配置,这个配置好的可以直接使用,修改一下root目录,和php-fpm的sock就好了。

  查看全部
nginx.conf 的文件配置,我的当前路径是`/xxx/xxx/openresty/nginx/conf`

```
user www-data;
worker_processes 8;
worker_rlimit_nofile 102400;

pid logs/nginx.pid;

events {
worker_connections 1024;
}
http {
# add_header Access-Control-Allow-Origin *;
# lua_package_path
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" '
'$status $body_bytes_sent "$http_referer" $upstream_status $upstream_addr $request_time $upstream_response_time '
'"$http_user_agent" "$http_x_forwarded_for"' ;
sendfile on;

keepalive_timeout 65;
client_max_body_size 500M;
gzip on;
gzip_min_length 1k;
gzip_buffers 8 32k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types image/jpeg image/gif image/png text/plain application/x-javascript text/javascript text/css application/xml;
gzip_vary off;

include site-available/*.conf; # 添加虚拟主机路径, *.conf 代表目录下所有为.conf后缀的文件
}
```
重点是`include site-available/*.conf`。
nginx可以识别`site-available`目录下所有已`conf`后缀结尾的配置文件,加载这些配置。

### 虚拟主机目录`/xxx/xxx/openresty/nginx/conf/site-available`

#### 配置文件目录结构
```
.
├── wechat.conf
├── weixin.conf
├── wx_vote.conf
├── xcx_wx.conf
├── xiaochandou.conf
└── zhuancoin.conf
```

#### crm.conf的配置
```
server {

listen 80;
server_name crm.sourcedev.cc;

access_log /var/log/nginx/crm.sourcedev.cc.access.log;
error_log /var/log/nginx/crm.sourcedev.cc.error.log;

# types { application/font-woff2 woff2; }

root /home/xxx/www/crm;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/phpfpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf|ttf|woff|woff2)(.*) {
expires 30d;
}

}
```

单个主机的配置,需要注意的是端口监听 listen 和server_name的配置,还有就是php的配置,这个配置好的可以直接使用,修改一下root目录,和php-fpm的sock就好了。

 

全开源,包安装!CRM客户关系管理系统OA协同办公PHP软件codeinteger

PHP网站管理员 Published the article • 0 comments • 598 views • 2017-12-17 08:22 • 来自相关话题

### 全开源,无限制,包安装!!!
> 体验地址 : http://crm.sourcedev.cc/authentication/admin
> 账号:2411125253@qq.com
> QQ:2411125253
> 密码:123 

### 此产品Wexone为店主二次再开发
> 开发框架php ci(codeinteger)

#### nginx 伪静态(配置nginx.conf,codeigniter在nginx安装配置及URL重写)

```
location / {
# 这里使用try_files进行url重写,不用rewrite了。
try_files $uri $uri/ /index.php?$query_string;
}
```

#### apache 伪静态(配置.htaccess配置文件,codeigniter在apache安装配置及URL重写)

```
RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|static|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
``` 查看全部

### 全开源,无限制,包安装!!!
> 体验地址 : http://crm.sourcedev.cc/authentication/admin
> 账号:2411125253@qq.com
> QQ:2411125253
> 密码:123 

### 此产品Wexone为店主二次再开发
> 开发框架php ci(codeinteger)

#### nginx 伪静态(配置nginx.conf,codeigniter在nginx安装配置及URL重写)

```
location / {
# 这里使用try_files进行url重写,不用rewrite了。
try_files $uri $uri/ /index.php?$query_string;
}
```

#### apache 伪静态(配置.htaccess配置文件,codeigniter在apache安装配置及URL重写)

```
RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|static|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
```

ffmpeg+nginx+rtmp-module搭建直播优化hls延时处理流媒体协议分析对比区别,obs推送,hls切片

后端开发网站管理员 Published the article • 0 comments • 3724 views • 2017-12-16 20:36 • 来自相关话题

###rtmp流媒体协议RTMP,RTSP与HLS有什么不同

### 协议分析

### RTMP协议
1. 是流媒体协议。
2. RTMP协议是 Adobe 的私有协议,未完全公开。
3. RTMP协议一般传输的是 flv,f4v 格式流。
4. RTMP一般在 TCP 1个通道上传输命令和数据。

### RTSP协议

1. 是流媒体协议。
2. RTSP协议是共有协议,并有专门机构做维护。
3. RTSP协议一般传输的是 ts、mp4 格式的流。
4. RTSP传输一般需要 2-3 个通道,命令和数据通道分离。


### HTTP协议

1. 不是是流媒体协议。
2. HTTP协议是共有协议,并有专门机构做维护。 
3. HTTP协议没有特定的传输流。 
4. HTTP传输一般需要 2-3 个通道,命令和数据通道分离。

## ffmpeg+nginx+rtmp-module搭建

### nginx+rtmp参数介绍

1. rtmp

> 语法:rtmp { ... }
> 上下文:根
> 描述:保存所有 RTMP 配置的块。

2. server

> 语法:server { ... }
> 上下文:rtmp
> 描述:声明一个 RTMP 实例。

3. application

> 语法:application name { ... }
> 上下文:server
> 描述:创建一个 RTMP 应用。application 名的模式并不类似于`http location`
 
4. hls_fragment

> 语法:hls_fragment time
> 上下文:rtmp, server, application
> 描述:设置 HLS 分段长度。默认为 5 秒钟。

5. hls_playlist_length

> 语法:hls_playlist_length time
> 上下文:rtmp, server, application
> 描述:设置 HLS 播放列表长度。默认为 30 秒钟。

 
  查看全部
###rtmp流媒体协议RTMP,RTSP与HLS有什么不同

### 协议分析

### RTMP协议
1. 是流媒体协议。
2. RTMP协议是 Adobe 的私有协议,未完全公开。
3. RTMP协议一般传输的是 flv,f4v 格式流。
4. RTMP一般在 TCP 1个通道上传输命令和数据。

### RTSP协议

1. 是流媒体协议。
2. RTSP协议是共有协议,并有专门机构做维护。
3. RTSP协议一般传输的是 ts、mp4 格式的流。
4. RTSP传输一般需要 2-3 个通道,命令和数据通道分离。


### HTTP协议

1. 不是是流媒体协议。
2. HTTP协议是共有协议,并有专门机构做维护。 
3. HTTP协议没有特定的传输流。 
4. HTTP传输一般需要 2-3 个通道,命令和数据通道分离。

## ffmpeg+nginx+rtmp-module搭建

### nginx+rtmp参数介绍

1. rtmp

> 语法:rtmp { ... }
> 上下文:根
> 描述:保存所有 RTMP 配置的块。

2. server

> 语法:server { ... }
> 上下文:rtmp
> 描述:声明一个 RTMP 实例。

3. application

> 语法:application name { ... }
> 上下文:server
> 描述:创建一个 RTMP 应用。application 名的模式并不类似于`http location`
 
4. hls_fragment

> 语法:hls_fragment time
> 上下文:rtmp, server, application
> 描述:设置 HLS 分段长度。默认为 5 秒钟。

5. hls_playlist_length

> 语法:hls_playlist_length time
> 上下文:rtmp, server, application
> 描述:设置 HLS 播放列表长度。默认为 30 秒钟。

 
 

网站如何防御ddos CC流量攻击,openresty+lua是不错的选择

Openresty网站管理员 Published the article • 0 comments • 2370 views • 2017-07-23 17:42 • 来自相关话题

> 下面的内容是github的有一个项目,但是他的实现方式是用内存共享的方式实现的,要知道,如果nginx重启之后,内存里面的东西就会被释放掉,这样我们记录的东西就会没有了,当流量大了,我们的内存可能吃不消,所以我们可以采用redis来存储,redis支持分布式的存储,持久化,大大的减少了这点的弊端。

### ngx_lua_waf

`ngx_lua_waf`是我刚入职趣游时候开发的一个基于ngx_lua的web应用防火墙。

代码很简单,开发初衷主要是使用简单,高性能和轻量级。

现在开源出来,遵从MIT许可协议。其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。

###用途:

1. 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
2. 防止svn/备份之类文件泄漏
3. 防止ApacheBench之类压力测试工具的攻击
4. 屏蔽常见的扫描黑客工具,扫描器
5. 屏蔽异常的网络请求
6. 屏蔽图片附件类目录php执行权限
7. 防止webshell上传

###推荐安装:

推荐使用`lujit2.1`做lua支持
`ngx_lua`如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

###使用说明:

nginx安装路径假设为:`/usr/local/nginx/conf/`
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加

```conf
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
```
配置config.lua里的waf规则目录(一般在waf/conf/目录下)

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
```
绝对路径如有变动,需对应修改

然后重启nginx即可

###配置文件详细说明:

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "off"
--是否开启攻击信息记录,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "on"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
```
`备注:不要乱动双引号,区分大小写`

###检查规则是否生效

部署完毕可以尝试如下命令:

```bash
curl http://xxxx/test.php?id=../etc/passwd
```
返回"Please go away~~"字样,说明规则生效。
注意:默认,本机在白名单不过滤,可自行调整config.lua配置

###规则更新:

考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。
规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,`nginx reload`即可生效。以保障`ngx lua waf`的高性能。
只记录过滤日志,不开启过滤,在代码里在check前面加上--注释即可,如果需要过滤,反之。

###一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

1. args里面的规则get参数进行过滤的
2. url是只在get请求url过滤的规则
3. post是只在post请求过滤的规则
4. whitelist是白名单,里面的url匹配到不做过滤
5. user-agent是对user-agent的过滤规则

默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分`--`注释即可
日志文件名称格式如下:`虚拟主机名_sec.log` 查看全部

> 下面的内容是github的有一个项目,但是他的实现方式是用内存共享的方式实现的,要知道,如果nginx重启之后,内存里面的东西就会被释放掉,这样我们记录的东西就会没有了,当流量大了,我们的内存可能吃不消,所以我们可以采用redis来存储,redis支持分布式的存储,持久化,大大的减少了这点的弊端。

### ngx_lua_waf

`ngx_lua_waf`是我刚入职趣游时候开发的一个基于ngx_lua的web应用防火墙。

代码很简单,开发初衷主要是使用简单,高性能和轻量级。

现在开源出来,遵从MIT许可协议。其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。

###用途:

1. 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
2. 防止svn/备份之类文件泄漏
3. 防止ApacheBench之类压力测试工具的攻击
4. 屏蔽常见的扫描黑客工具,扫描器
5. 屏蔽异常的网络请求
6. 屏蔽图片附件类目录php执行权限
7. 防止webshell上传

###推荐安装:

推荐使用`lujit2.1`做lua支持
`ngx_lua`如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

###使用说明:

nginx安装路径假设为:`/usr/local/nginx/conf/`
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加

```conf
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
```
配置config.lua里的waf规则目录(一般在waf/conf/目录下)

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
```
绝对路径如有变动,需对应修改

然后重启nginx即可

###配置文件详细说明:

```lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "off"
--是否开启攻击信息记录,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "on"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
```
`备注:不要乱动双引号,区分大小写`

###检查规则是否生效

部署完毕可以尝试如下命令:

```bash
curl http://xxxx/test.php?id=../etc/passwd
```
返回"Please go away~~"字样,说明规则生效。
注意:默认,本机在白名单不过滤,可自行调整config.lua配置

###规则更新:

考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。
规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,`nginx reload`即可生效。以保障`ngx lua waf`的高性能。
只记录过滤日志,不开启过滤,在代码里在check前面加上--注释即可,如果需要过滤,反之。

###一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

1. args里面的规则get参数进行过滤的
2. url是只在get请求url过滤的规则
3. post是只在post请求过滤的规则
4. whitelist是白名单,里面的url匹配到不做过滤
5. user-agent是对user-agent的过滤规则

默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分`--`注释即可
日志文件名称格式如下:`虚拟主机名_sec.log`