bash: nginx: command not found
nginx 安装目录 /usr/local/nginx/sbin/nginx
在用户目录下 touch .bash_profile
,添加PATH:
PATH=$PATH:/usr/local/nginx/sbin
export PATH
刷新 source .bash_profile
此时 which nginx
可以输出正确的路径。
nginx 安装目录 /usr/local/nginx/sbin/nginx
在用户目录下 touch .bash_profile
,添加PATH:
PATH=$PATH:/usr/local/nginx/sbin
export PATH
刷新 source .bash_profile
此时 which nginx
可以输出正确的路径。
Let's Encrypt CA 项目由非赢利组织 Internet Security Research Group (ISRG) 运营,由Mozilla、思科、Akamai、IdenTrust、EFF 和密歇根大学等组织发起,向网站自动签发和管理免费SSL证书,以加速互联网从 HTTP 向 HTTPS 过渡。
Let's Encrypt 官方网站:https://letsencrypt.org/
Let's Encrypt 项目主页:https://github.com/letsencrypt/letsencrypt
1、安装Let's Encrypt脚本依赖环境
# CentOS 6
yum install centos-release-SCL && yum update
yum install python27
scl enable python27 bash
yum install python27-python-devel python27-python-setuptools python27-python-tools python27-python-virtualenv
yum install augeas-libs dialog gcc libffi-devel openssl-devel python-devel
yum install python-argparse
# CentOS 7
yum install -y git python27
yum install -y augeas-libs dialog gcc libffi-devel openssl-devel python-devel
yum install python-argparse
2、获取Let's Encrypt并生成SSL证书
yum install git-core
git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt
./letsencrypt-auto certonly --email [email protected] -d www.2dan.cc --webroot -w /home/html --agree-tos
如果多个域名可以加多个-d 域名
之前文章Nginx搭建flv mp4流媒体服务器中介绍了通过referer判断实现简单的防盗链,弊端是来源容易被伪造。今天介绍一下更高级的防盗链策略。
软件版本:
nginx-1.22.1
nginx-accesskey-2.0.3
增加编译参数 --with-http_secure_link_module --add-module=/root/nginx-accesskey-2.0.3
并重新编译 nginx
./configure --prefix=/usr/local/nginx --add-module=../nginx_mod_h264_streaming-2.2.7 --with-pcre=../pcre-8.41 --with-zlib=../zlib-1.2.11 --user=www --group=www --with-http_flv_module --with-http_stub_status_module --with-threads --with-http_ssl_module --with-http_secure_link_module --add-module=/root/nginx-accesskey-2.0.3 --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers' --with-http_v2_module --with-http_mp4_module --with-cc-opt='-O3'
make && make install
完整的配置文件示例:
user www www;
worker_processes auto;
error_log /usr/local/nginx/logs/error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 150m;
tcp_nopush on;
tcp_nodelay on;
sendfile on;
keepalive_timeout 65;
limit_conn_zone $binary_remote_addr zone=perip:10m; #容器共使用10M的内存来应对IP传输开销
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
server {
listen 80;
listen 443 ssl http2 fastopen=3 reuseport;
server_name 2dan.cc;
root /home/html;
limit_conn perip 3; #限制每个IP同一时间只能发起3个连接
limit_rate_after 10m; #在视频文件下载10M以后开始限速
limit_rate 100k; #速度限制为100K
charset utf-8;
ssl on;
ssl_certificate 2dan.cc_bundle.crt;
ssl_certificate_key 2dan.cc.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
error_page 497 https://$host$uri; #http重定向到https
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.(mp4|m3u8)$ {
mp4;
valid_referers none blocked *.2dan.cc; #防盗链授权
if ($invalid_referer) {
return 403;
}
if (!-e $request_filename) {rewrite ^/(.*)/(.*)/(.*)/(.*) /$4?key=$1&st=$2&e=$3 last;}
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$REMOTE_ADDR";
secure_link $arg_st,$arg_e;
secure_link_md5 mypass$arg_e;
if ( $secure_link = "" ) {
return 402;
}
if ( $secure_link = "0" ) {
return 405;
}
}
access_log off;
}
}
结合PHP实现自动跳转到真实链接地址
现象:
把apache换成了nginx后,发现网站的播放页面明明生成了静态html文件,可是访问的确是伪静态文件(静态和伪静态路径一样)。
解决方法:
1、apache
在.htacess 文件中第二行增加:
RewriteCond %{REQUEST_FILENAME} !-f
其它常用的参数:
-d 是否是一个目录
-f 是否是一个文件
-s 是否是一个正常的有大小的文件
-l 是否是一个快捷方式
-x 是否是一个具有执行权限的文件
-F 检查TestString是还是是一个合法的文件
-U 检查TestString是否是一个合法的URL
2、nginx
if (!-f $request_filename){
rewrite ^/(.*)/(.*)/(.*)-(.*)$ /index.php?s=/vod-play-id-$2-sid-$3-pid-$4-listname-$1;
}
判断文件存在则优先访问文件,不存在则访问rewrite路径
1. 介绍
该模块能够限制从一个IP地址同时连接的总速度。
2. 指令
limit_speed_zone
语法:limit_speed_zone zone_name $variable memory_max_size
默认值:no
配置段:http
定义会话状态存储空间。会话的数目由所分配的变量$variable决定,该值取决于memory_max_size值。
如:limit_speed_zone one $binary_remote_addr 10m;
客户端的地址被用作会话。
注意:该变量$binary_remote_addr
是用来代替$remote_addr
。$remote_addr
变量值的长度是7到15个字节。因此状态大小等于32或64字节。$binary_remote_addr
变量值的长度总是4个字节,因此状态大小始终是32字节。
1M共享空间可以处理3.2万个会话,每个会话32字节。