Nginx入门实践:静态服务、图片防盗链、请求过滤、泛域名转发
15.一些常用技术
15.1 静态服务
server {
listen 80;
server_name static.sherlocked93.club;
charset utf-8; # 防止中文文件名乱码
location /download {
alias /usr/share/nginx/html/static; # 静态资源目录
autoindex on; # 开启静态资源列目录
autoindex_exact_size off; # on(默认)显示文件的确切大小,单位是byte;off显示文件大概大小,单位KB、MB、GB
autoindex_localtime off; # off(默认)时显示的文件时间为GMT时间;on显示的文件时间为服务器时间
}
}
复制代码15.2 图像盗链预防
server {
listen 80;
server_name *.sherlocked93.club;
# 图片防盗链
location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
valid_referers none blocked server_names ~\.google\. ~\.baidu\. *.qq.com; # 只允许本机 IP 外链引用,感谢 @木法传 的提醒,将百度和谷歌也加入白名单
if ($invalid_referer){
return 403;
}
}
}
复制代码15.3 请求过滤
# 非指定请求全返回 403
if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
return 403;
}
location / {
# IP访问限制(只允许IP是 192.168.0.2 机器访问)
allow 192.168.0.2;
deny all;
root html;
index index.html index.htm;
}
复制代码15.4 配置缓存静态文件,例如图像和字体,例如图像和字体声音文件声音文件自视频以来的静态图像打包时一般都会加上snippets,缓存可以设置长一些。先设置强制缓存,再设置协商缓存;如果存在没有哈希值的静态文件,建议不要设置强制缓存,只检查缓存以确定是否需要缓存。 † 可以进行301退回,将对应域名的HTTP请求重定向到HTTPSserver {
listen 80;
server_name www.sherlocked93.club;
# 单域名重定向
if ($host = 'www.sherlocked93.club'){
return 301 https://www.sherlocked93.club$request_uri;
}
# 全局非 https 协议时重定向
if ($scheme != 'https') {
return 301 https://$server_name$request_uri;
}
# 或者全部重定向
return 301 https://$server_name$request_uri;
# 以上配置选择自己需要的即可,不用全部加
}
复制代码
15.7 分离泛域名路由
server {
listen 80;
server_name www.sherlocked93.club;
# 单域名重定向
if ($host = 'www.sherlocked93.club'){
return 301 https://www.sherlocked93.club$request_uri;
}
# 全局非 https 协议时重定向
if ($scheme != 'https') {
return 301 https://$server_name$request_uri;
}
# 或者全部重定向
return 301 https://$server_name$request_uri;
# 以上配置选择自己需要的即可,不用全部加
}
复制代码这是一个非常方便的技巧。有时我们可能需要设置一些二级或三级域名,我们希望通过Nginx自动指向正确的目录,例如:
test1.doc.sherlocked93.club会自动指向/usr - 指向/share/nginx/html/doc/test1服务器地址;test2.doc.sherlocked93.club自动指向服务器地址/usr/share/nginx/html/doc/test2;
server {
listen 80;
server_name ~^([\w-]+)\.doc\.sherlocked93\.club$;
root /usr/share/nginx/html/doc/$1;
}
复制代码15.8 泛域名转发
与之前的功能类似,有时我们想将二级或三级域名引用重写为所需的路径,以便后端系统正确分析该路径的不同规则:
test1.serv.sherlocked93.club/api?name=a自动转发至:127.0.0.1:8080/test1/api?name=a♾❀;test2.serv.sherlocked93.club/api?name=a自动转发至:127.0.0.1:8080/test2/api?name=a
server {
listen 80;
server_name ~^([\w-]+)\.serv\.sherlocked93\.club$;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:8080/$1$request_uri;
}
}作者:SHERlocked93
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
上一篇:Nginx 入门练习:最佳实践 下一篇:Nginx 入门实践:配置 HTTPS
code前端网