引言
这两天写项目碰到了使用nginx作为图片服务器及简单的地址重写
Nginx作为图片服务器
server {
listen 80;
server_name image.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root D:\\\\apple\\\\images;
}
}
域名这里使用的是本机解析的DNS
配置方式:域名在本机系统盘/Windows/System32/dirvers/etc下的hosts修改,可以配置本地静态DNS服务
浏览器默认请求发送端口为80
server_name的域名请求的链接,文件资源路径在本地的路径下寻找
地址重写
server {
listen 80;
server_name api.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /api/upload {
proxy_pass http://127.0.0.1:8092;
proxy_connect_timeout 600;
proxy_read_timeout 600;
rewrite "^/api/(.*)$" /$1 break;
}
location / {
proxy_pass http://127.0.0.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
任何发往server_name域名的请求都会被下面两个location过滤
(重要)顺序:/api/upload/ ---> /
这里的顺序不能颠倒,先写全局的那么有限制的将不起作用
项目中后端接口链接为/upload/xxx,所以需要将/api过滤掉,同时将后面的转发至对应服务
rewrite [正则表达式] [真实链接替代位] [功能位]
(重要)代码中正则表达式指/api后面的所有部分(即 .*)被代指为$1,如果有多个(xxx)筛选条件,则$后面的数字还可以向后追加
$1 代指匹配正则中的(.*),即将/api后面的全部看作一个区块,区块名为$1,可以起到替代作用
break 是功能位中的一个
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
异常
后端接口正常测试,前端URL争取,但前端请求无法到达,服务没有任何相应,一定要往跨域问题哪里找答案,这里涉及了跨域问题
参考:我的文章-> 深入浅出跨域问题
功能演示