Nginx反代、缓存

常规反代
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 将sg.liyktest.cn请求中转至liyktest.cn上,这2个域名解析到不同的ip
server {
listen 80;
server_name sg.liyktest.cn;
index index.html index.htm;

location / {
proxy_pass http://liyktest.cn/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

# 如上配置是nginx反代常规配置,但在此场景下有问题。可能会导致访问sg.liyktest.cn找不到站点。
# 因为访问请求的域名是sg.liyktest.cn,nginx将sg.liyktest.cn请求转到源站liyktest.cn上,域名请求出现不匹配因而出现报错。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在http请求头信息中,host字段表示请求的服务器网址,即只要修改这个字段的值让转给源站的http请求host字段的值为源站真实的域名地址即可。

server {
listen 80;
server_name sg.liyktest.cn;
index index.html index.htm;

location / {
proxy_pass http://liyktest.cn/;
proxy_set_header Host 'liyktest.cn';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
302重定向和反向代理
1
2
3
4
5
6
7
8
9
10
server {
listen 80;
server_name sg.liyktest.cn;
index index.html index.htm;
location / {
rewrite ^ http://liyktest.cn$request_uri permanent;
}
}

# 访问sg.liyktest.cn被重定向跳转到liyktest.cn上,本质上还是直接访问liyktest.cn,这并未解决此场景的问题(跨境访问延迟问题)。
缓存配置
  • 浏览器缓存
1
2
3
4
5
6
7
8
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 24h; # 或者1d
}
location ~ .*\.(js|css)? {
expires 15d;
}

# nginx里设置expires并不是把静态内容缓存在nginx中,而是设置客户端浏览器缓存的时间。
  • 磁盘缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# levels设置目录层次
# keys_zone设置缓存名字和共享内存大小,1m可以存储8000个key,10m可以存储80000个key。
# inactive在指定时间内无人访问则被删除, 1d 1天
# max_size最大缓存空间,不指定会用掉所有硬盘空间。
# use_temp_path设置为off则nginx会将缓存文件直接写入指定cache文件中,而不是使用temp_path存储。建议使用off避免缓存文件在不同文件系统中不必要的拷贝。

proxy_cache_path /data/www/cache_dir/ levels=1:2 keys_zone=mycache:100m max_size=10g inactive=1d use_temp_path=off;
server {
listen 80;
server_name _;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html)$ {
proxy_cache mycache; # 与keys_zone后的内容对应
proxy_cache_valid any 1d;
proxy_pass http://192.168.1.10:81/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /data/nginx/logs/default-cache.log;
}
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。