准备配置文件
- 解压后去除多余内容
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;
# 该部分就是针对网站代码的配置,如果我们需要配置多个网站,可以复制配置多个server
server {
# 指定访问该网站的端口号,默认为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.webg
break;
}
}
}
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;
}
}