准备配置文件
- 解压后去除多余内容
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
- 进一步去除,添加注解,nginx的最小配置项
# 表示只启动几个工作进程,具体值为多少,一般根据CPU核数来定,如果CPU为八核,那么此处值就填8。
worker_processes 1;# 定义与服务器事件处理模型相关的参数和指令
events {# 连接数量,每个进程可以处理多少连接。一般就保持默认,1024。worker_connections 1024;
}http {# nginx能够识别出的文件类型,指定一个文件,这个文件中存储了nginx能够识别出的文件类型,默认为nginx.conf同一目录下的mime.types文件include mime.types;# 文件类型没有在include指定的文件中,会以default_type指定的类型返回数据。default_type application/octet-stream;# sendfile on;keepalive_timeout 65;# 该部分就是针对网站代码的配置,如果我们需要配置多个网站,可以复制配置多个serverserver {# 指定访问该网站的端口号,默认为80。listen 80;# 配置域名server_name localhost;# 匹配以什么开头的URI,默认为/,表示匹配所有请求。如配置了/user,那么请求ip:端口/user/xx就会匹配到该路由。location / {# 指定项目的目录。可以填写绝对路径,也可以填写相对路径。填写相对路径是,默认根路径为/usr/share/nginx。root html;# 指定了当请求是一个目录时,Nginx应该返回哪个文件作为默认文件。index index.html index.htm;}}
}
防盗链(网站优化)
- 自定义service
server {# 指定访问该网站的端口号,默认为80。listen 9999;# 配置域名server_name localhost;# 匹配以什么开头的URI,默认为/,表示匹配所有请求。如配置了/user,那么请求ip:端口/user/xx就会匹配到该路由。location / {# 指定项目的目录。可以填写绝对路径,也可以填写相对路径。填写相对路径是,默认根路径为/usr/share/nginx。root opt/test/;}# 拦截三种类型访问location ~* .*\.(gif|jpg|png)$ {# 指定项目的目录。可以填写绝对路径,也可以填写相对路径。填写相对路径是,默认根路径为/usr/share/nginx。root opt/test/img/;# 放行白名单(防盗链)valid_referers none blocked taobao.com;if($valid_referers){# return 403;# 重写rewrite ^/ http://10.10.100.146:9999/error.webgbreak;}}
}
gzip压缩
- 作用模块
- http
- service - 文档
模块静态压缩官方文档
模块配置官方文档 - 核心配置
# 开启gzip压缩
gzip on
# 压缩类型(js、css\text\json等)文本压缩的效果最好
gzip_type application/type
brotli压缩
优缺
- 优: 比gzip性能提升10~18%
- 缺: 普及率低
- 缺: 仅支持https
集成模块
- 下载源码
# 1.切换nginx编译路径的上级路径
cd /opt/
# 2.执行命令
sudo git clone https://github.com/google/ngx_brotli.git
# 3.切换ngx_brotli路径
cd ngx_brotli/
# 4.下载算法
sudo git submodule update --init
# 5.切换nginx源码路径下
cd /opt/nginx-1.26.2/
# 安装brotli
sudo apt-get install libbrotli-dev
# 6. 配置
sudo ./configure --prefix=/home/nginx --with-http_ssl_module --add-module=/opt/ngx_brotli
# 7.编译
sudo make
# 8.替换执行文件
sudo mv ./objs/nginx /home/nginx/sbin/nginx
# 9查看/home/nginx/sbin/nginx -V
- 修改配置文件
http{# 开启gzip压缩gzip on# 压缩类型(js、css\text\json等)文本压缩的效果最好gzip_type application/javascrpt# 开启brotli压缩(service 需要配饰ssl)brotli on# 压缩类型(js、css\text\json等)文本压缩的效果最好brotli_type application/javascrpt}
反向代理域名备案访问
server {listen 80;server_name www.xxx.com;location / {# 代理转发指定proxy_pass http://192.168.50.12/;}
}
ssl
http(超文本传输协议)转https(超文本传输完全协议)
server {# 监听端口 开启ssl模式listen 443 ssl;# 访问名称 - 域名server_name www.xx.com;# pem文件位置ssl_certificate /xxxx/cert.pem;# key文件位置ssl_certificate_key /xxxx/cert.key;# ssl证书缓存ssl_session_cache shared:SSL:1m;# 操作时间ssl_session_timeout 5m;# 加密算法ssl_ciphers HIGH:!aNULL:!MD5;# 服务端的首选算法是否开启ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}
}
限流
1>请求限流,漏洞算法
http {# 开辟空间 $binary_remote_addr主机名称; zone空间名; rate限速;limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=1r/s;# 省略其他代码service{# 省略其他代码location /{# burst爆发limit_req zone=ip_limit burst=2;}}
}
2>链接限流,令牌桶算法
http {# 开辟空间 $binary_remote_addr主机名称; zone空间名; rate限速;limit_conn_zone $binary_remote_addr zone=conn_limit:10m;# 省略其他代码service{# 省略其他代码location /{# 限制连接limit_conn conn_limit 1;}}
}
合并请求(优化)
- 下载三方模块包
git clone https//github.com/alibaba/nginx-http-concat.git
# 加速镜像
git clone https//gitclone.com/github.com/alibaba/nginx-http-concat.git
- 加载模块
# 配置
sudo ./configure --prefix=/home/nginx --with-http_ssl_module --add-module=/opt/nginx-http-concat
# 编译
sudo make
# 替换执行文件
sudo mv ./objs/nginx /home/nginx/sbin/nginx
- 配置参数(http、serrvice、location )
server {# 开启合并请求concat on;# 定义最大能接受文件数量concat_max_files 20;# 如果开启返回400 未开启合并两个文件concat_unique on;# 定义那些文件可以合并concat_type application/javascript;# 文件之间分割concat_delimiter '\n';# 文件不存在权限提示concat_ignore_file_error on;# 监听端口 开启ssl模式listen 443 ssl;# 访问名称 - 域名server_name www.xx.com;# pem文件位置ssl_certificate /xxxx/cert.pem;# key文件位置ssl_certificate_key /xxxx/cert.key;# ssl证书缓存ssl_session_cache shared:SSL:1m;# 操作时间ssl_session_timeout 5m;# 加密算法ssl_ciphers HIGH:!aNULL:!MD5;# 服务端的首选算法是否开启ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}
}