nginx-2-配置

时间:2024-10-09 18:11:24

准备配置文件

  • 解压后去除多余内容
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;
    }
}