萌萌の初音
萌萌の初音
发布于 2022-03-30 / 518 阅读
0

博客服务器Nginx访问优化

部署环境:静态服务器+应用服务器,静态服务器网络环境为固定的公网IP,应用服务器网络环境为动态公网IP(通常1~3天更改,通过DNSPod的API进行域名绑定)。

这样的环境下通常会有几个问题:

1. 每次应用服务器IP更改后,访问nginx就会报502;
2. 加载数据缓慢,通常一个页面的加载速度为6-10s;

解决问题1:

  1. 最开先采用crontab定时任务对nginx进行每2小时的重启,但这会导致中途IP变更时无法刷新ip导致502,而定时任务设置频繁会导致小则性能损耗,严重会导致nginx重启报错(DNS ttl还未刷新,导致域名未绑定ip);
  2. 通过设置nginx dns缓存配置来进行解决:
# resolver 为dns地址, valid 是 dns ttl 时间,不填写 valid 默认 300s
resolver 114.114.114.114 valid=300s;
 
# 把域名写到变量, 变量后面不要带 "/", 会导致静态样式加载问题
set $my_host "http://example.com:8080";
location / {
    proxy_pass $my_host;
}

参考文档

解决问题2:

可将应用服务器传输的数据都缓存在静态服务器中,可使用nginx的缓存功能:

proxy_cache_path /opt/nginx/proxy_cache levels=1:2 keys_zone=my_project:500m inactive=3d max_size=10g;

location / {
  proxy_cache my_project;
  proxy_cache_valid  200 206 304 301 302 10d;
  proxy_cache_key $uri;
}

proxy_cache_path:缓存文件路径(需提前建立目录);
levels:设置缓存文件目录层次;
keys_zone:缓存名字和共享内存大小;
inactive:缓存时间;
max_size:最大缓存空间;
Proxy_cache :使用对应缓存配置(对应keys_zone参数);
proxy_cache_valid :对应的httpcode为200、304等指定缓存时间;
proxy_cache_key $uri :定义缓存唯一key,通过唯一key来进行hash存取;

通过对问题2的解决还能保证问题1的IP变更后的正常访问。优化后目前没有出现502问题。
参考文档