Nginx 缓存静态资源,加快页面访问速度,增加文件服务器配置
基于 yum 安装方式,非yum安装方式根据实际修改配置中的路径即可
http模块配置
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
添加缓存配置
# location ~ .*\.(css|js|ico|gif|jpg|jpeg|png) 为项目所需的静态资源的后缀名
location ~ .*\.(css|js|ico|gif|jpg|jpeg|png)$ {
log_not_found off;
expires 7d; # 缓存时间7天
access_log off; # 关闭日志
root /home/power/static/; # 静态资源路劲
proxy_store on;
proxy_temp_path /home/power/static/; # 静态资源路劲
proxy_redirect off;
proxy_set_header Host localhost:9999; # 访问路劲
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://localhost:9999; # 访问路劲
}
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
文件服务器配置
- 创建文件存放目录,可自定义目录
# mkdir -p /home/power/download
- 在server中加上location/download配置
# 访问链接为存放目录的名字,即:/download
location /download {
root /home/power/; # 只写到文件存放目录的上一层,即/home/power/
index index.html;
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
}
完整配置
- 配置时将 localhost 改为服务器IP地址
user nginx nginx; # 定义nginx的启动用户,不建议使用root
worker_processes 2; # 定位为cpu的内核数量,因为我的环境配置是2核,所以就写2。不过这值最多也就是8,8个以上也就没什么意义了,想继续提升性能只能参考下面一项配置
worker_cpu_affinity 01 10;
# 此项配置为开启多核CPU,nginx默认是不开启的,1为开启,0为关闭,因此先开启第一个倒过来写,
# 第一位01(关闭第二个、开启第一个)
# 第二位10(开启第二个、关闭第一个)
# 后面的依次类推,如果是16核或者8核cpu,就注意为00000001、00000010、00000100,总位数与cpu核数一样。
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 65535; # 这个值为nginx的worker进程打开的最大文件数,如果不配置,会读取服务器内核参数(通过ulimit -a查看),如果内核的值设置太低会让nginx报错(too many open file),但是在此设置后,就会读取自己配置的参数不去读取内核参数
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
use epoll; # 客户端线程轮询方法、内核2.6版本以上的建议使用epoll
worker_connections 65535; # 设置一个worker可以打开的最大连接数
}
http {
# 日志格式化
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 使用格式化的日志
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
server_tokens off; # 隐藏nginx版本号
proxy_intercept_errors on;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 1300;
fastcgi_send_timeout 1300;
fastcgi_read_timeout 1300;
fastcgi_buffer_size 512k;
fastcgi_buffers 4 512k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
proxy_connect_timeout 20s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name localhost;
# enforce https
# rewrite ^(.*)$ https://$host$1 permanent;
access_log off;
location / {
proxy_pass http://localhost:9999;
# 隐藏端口号
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
}
# 访问链接为存放目录的名字,即:/download
location /download {
root /home/power/; # 只写到文件存放目录的上一层,即/home/power/
index index.html;
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
}
# 需添加项目所需的静态资源的后缀名,根据项目需要进行添加
location ~ .*\.(css|js|ico|gif|jpg|jpeg|png)$ {
log_not_found off;
expires 7d;
access_log off;
root /home/power/static/;
proxy_store on;
proxy_temp_path /home/power/static/;
proxy_redirect off;
proxy_set_header Host localhost:9999;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://localhost:9999;
}
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
创建cache文件夹
# mkdir -p /var/cache/nginx/cache
重启Nginx
# 编译安装nginx执行方法
# ./nginx -t # 检查nginx配置文件是否有问题,出现以下结果则没有问题,找到nginx的sbin目录,执行此命令
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# ./nginx -r reload # 重加载配置文件,不需要重启nginx,找到nginx的sbin目录,执行此命令
# yum安装nginx执行方法
# nginx -t # 检查nginx配置文件是否有问题,出现以下结果则没有问题
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -r reload # 重加载配置文件,不需要重启nginx
本站Nginx完整配置
- 注:IP、端口、域名、证书需根据实际配置,HTTPS证书可到阿里云免费申请
user nginx nginx; # 定义nginx的启动用户,不建议使用root
worker_processes 2; # 定位为cpu的内核数量,因为我的环境配置是2核,所以就写2。不过这值最多也就是8,8个以上也就没什么意义了,想继续提升性能只能参考下面一项配置
worker_cpu_affinity 01 10;
# 此项配置为开启多核CPU,nginx默认是不开启的,1为开启,0为关闭,因此先开启第一个倒过来写,
# 第一位01(关闭第二个、开启第一个)
# 第二位10(开启第二个、关闭第一个)
# 后面的依次类推,如果是16核或者8核cpu,就注意为00000001、00000010、00000100,总位数与cpu核数一样。
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 65535; # 这个值为nginx的worker进程打开的最大文件数,如果不配置,会读取服务器内核参数(通过ulimit -a查看),如果内核的值设置太低会让nginx报错(too many open file),但是在此设置后,就会读取自己配置的参数不去读取内核参数
include /usr/share/nginx/modules/*.conf;
events {
use epoll; # 客户端线程轮询方法、内核2.6版本以上的建议使用epoll
worker_connections 65535; # 设置一个worker可以打开的最大连接数
}
http {
# 日志格式化
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 使用格式化的日志
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
# NGINX能处理的最大请求主体大小
client_max_body_size 8m;
server_tokens off; # 隐藏nginx版本号
proxy_intercept_errors on;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 1300;
fastcgi_send_timeout 1300;
fastcgi_read_timeout 1300;
fastcgi_buffer_size 512k;
fastcgi_buffers 4 512k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
proxy_connect_timeout 20s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
brotli on; #启用
brotli_comp_level 6; #压缩等级,默认6,最高11,太高的压缩水平可能需要更多的CPU
brotli_buffers 16 8k; #请求缓冲区的数量和大小
brotli_min_length 20; #指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定20字节
brotli_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/json image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl image/x-icon image/jpeg image/gif image/png image/bmp; #指定允许进行压缩类型
brotli_static always; #是否允许查找预处理好的、以.br结尾的压缩文件,可选值为on、off、always
brotli_window 512k; #窗口值,默认值为512k
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/jpg;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:200m inactive=1d max_size=10g;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream cnxiaobai {
server 192.168.10.10:9999;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 404;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/nginx/ssl/server.cer;
ssl_certificate_key /etc/nginx/ssl/server.key;
server_name _;
return 404;
}
# http自动跳转https
server {
listen 80;
server_name cnxiaobai.com www.cnxiaobai.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl http2; # 添加 http2 支持
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
server_name cnxiaobai.com www.cnxiaobai.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/server.cer;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# 浏览器已支持TLSv1.3,建议加上
# TLSv1和TLSv1.1即将废弃,如果不需要支持IE和XP建议去掉
# IE8-10/Win7需要TLSv1.0;IE8以下需要SSL3和单证书
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on; # on由服务器决定加密算法,off由浏览器决定,推荐使用on,更安全,对服务器性能有少量影响
access_log off;
# HSTS(ngx_http_headers_module is required) (180d)
# 严格传输安全:即在时间过期之前,每次访问HTTP站点时,由客户端直接跳转到HTTPS站点
# 设置后,该网站的HTTP站点无法打开,只能等待过期或禁用配置后清空浏览器缓存
# 启用后注意保持证书不过期,证书过期后网站可能无法访问
add_header Strict-Transport-Security "max-age=15552000" always;
# 开启 OCSP Stapling,作用:由服务器在线查询证书吊销情况
# 默认是由浏览器在线查询,由服务器查询效率更高
ssl_stapling on;
# OCSP Stapling 验证开启
ssl_stapling_verify on;
# 定时检测 DNS 的变化,自动更新 DNS 对应的 IP 列表
resolver 223.5.5.5 valid=30s;
resolver_timeout 10s;
# 指定客户端与服务端建立连接后发送 request body 的超时时间
client_body_timeout 20s;
# 客户端向服务端发送一个完整的 request header 的超时时间
client_header_timeout 10s;
# 服务端向客户端传输数据的超时时间
send_timeout 30s;
location / {
proxy_pass http://cnxiaobai;
# 隐藏端口号
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50m;
proxy_connect_timeout 30; #超时时间
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on; #开启缓冲区,减少磁盘io
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k; #当超过内存允许储蓄大小,存到文件
# 维护页面
# root /home/power/maintain/;
# index index.html;
}
location /download {
alias /home/power/download;
fancyindex on;
fancyindex_localtime on;
autoindex_format html;
fancyindex_exact_size off;
fancyindex_default_sort date_desc;
fancyindex_header "/light-Theme/header.htm";
#fancyindex_footer "/light-Theme/footer.htm";
fancyindex_ignore "light-Theme";
fancyindex_name_length 255;
fancyindex_time_format "%Y-%m-%d %H:%M:%S";
charset utf-8; # 避免中文乱码
}
location /color {
root /home/power/;
index color.html;
}
location /munu {
root /home/power/;
index munu.html;
}
location ~ .*\.(css|js|ico|gif|jpg|jpeg|png|otf|eot|svg|ttf|woff|woff2|htm|mp3|json|scss)$ {
log_not_found off;
expires 30d;
access_log off;
root /home/power/static/;
proxy_store on;
proxy_temp_path /home/power/static/;
proxy_redirect off;
proxy_set_header Host 192.168.10.10:9999;
client_max_body_size 50m;
client_body_buffer_size 50m;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://192.168.10.10:9999;
}
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 50m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
# 定义错误页面码,如果出现相应的错误页面码,转发到404那里。
# error_page 404 403 500 502 503 504 /404.html;
# 承接上面的location
# location = /404.html {
# 放错误页面的目录路径。
# root /usr/share/nginx/html;
# }
}
}
标题:Nginx 缓存静态资源,加快页面访问速度,增加文件服务器配置
作者:Mune
地址:https://cnxiaobai.com/articles/2021/05/18/1621337764421.html
评论
0 评论