首页
关于我们
友链链接
壁纸下载
更多
统计中心
热点搜索
图床上传
Search
1
[Win DD包] wes7-x86-cn-精简,安装后仅占用1.55G存储空间
25,498 阅读
2
保姆级教程!甲骨文ARM DD成Debian10并升级内核成5.10
6,197 阅读
3
N1教程:Openwrt安装docker webui界面(基于flippy openwrt n1固件)
5,224 阅读
4
ZFAKA小店Docker版之 数据的备份和迁移
5,045 阅读
5
甲骨文oracle ARM 重装 Debian 10
4,694 阅读
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
登录
Search
标签搜索
vps
linux
typecho
bench
mysql
nginx
lnmp
ssl
empirecms
openwrt
cloudflare
centos
google
n1
301
qbittorrent
free
onedrive
docker
telegram
V+变量
累计撰写
260
篇文章
累计收到
216
条评论
首页
栏目
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
页面
关于我们
友链链接
壁纸下载
统计中心
热点搜索
图床上传
搜索到
11
篇与
的结果
2025-03-17
保护自己网站图片不被盗用,nginx 配置图片允许调用域名代码
一 前言很多时候站长朋友希望自己网站的图片不被盗用,针对设置图片资源的热链接保护,也就是只允许特定的域名来引用他们服务器上的图片,防止其他网站直接链接到他们的图片,造成带宽盗用。主要考虑:1 Nginx的相关配置模块。Nginx中有一个模块叫做ngx_http_referer_module,可以用来检查请求的Referer头信息,从而判断是否允许访问。不过,Referer头有时候可能被伪造,所以这并不是绝对的安全措施,但可以阻止大部分普通的盗链行为。2 配置的是valid_referers指令.这个指令用于定义合法的引用域名。比如,允许自己的域名和空Referer(直接访问的情况)。同时,需要设置当Referer不合法时返回的响应,比如403禁止访问,或者重定向到一个默认的图片。3 需要考虑是否需要允许空Referer的情况。例如,如果用户直接在浏览器中打开图片链接,或者某些合法的应用没有Referer头的情况,这时候可能需要设置valid_referers包含none。但这也可能带来安全风险,需要根据具体情况权衡。4 举例说明配置的写法例如在server或location块中添加相应的配置。比如,针对图片文件的后缀名(如.jpg、.png等)设置一个location,然后在其中使用valid_referers指令,并配置if语句来处理非法请求。5 关于缓存的注意事项或者使用secure_link模块来更安全地控制访问,但这可能比较复杂,一般只需要基本的Referer检查就够了。6 针对Nginx给出具体的配置示例解释每个参数的作用,比如valid_referers后面的server_names表示允许的域名,none表示允许没有Referer的请求,blocked表示允许没有完整Referer的情况(比如经过防火墙或代理的情况)。7 修改配置后要重新加载Nginx使用nginx -s reload命令。同时,测试配置是否正确,比如用不同的域名访问图片,看是否被阻止,或者直接访问是否允许。8 补充一些高级配置,比如结合地理位置或其他条件,或者使用HTTP头中的其他信息来增强防盗链措施。但基本的配置应该是用户所需要的。二 配置教程本节给出一个具体的Nginx配置示例,解释每一部分的作用,并提醒用户相关的注意事项,比如Referer的不可靠性和可能的例外情况处理。确保用户能够按照步骤正确配置,并理解其原理。在 Nginx 中配置允许特定域名调用图片资源(即防盗链设置),可以通过 valid_referers 指令实现。以下是具体配置步骤和代码示例:1. 基础配置示例server { listen 80; server_name your-domain.com; location ~* \.(jpg|jpeg|png|gif|webp)$ { # 匹配图片文件扩展名 valid_referers none blocked server_names *.your-domain.com allowed-domain.com *.allowed-subdomain.com; # 允许的域名列表 if ($invalid_referer) { # 如果 Referer 不在允许列表中 return 403; # 返回 403 禁止访问 # 或返回替代图片:rewrite ^ /placeholder.jpg; } # 其他配置(如缓存、过期时间等) expires 30d; access_log off; } }2. 参数解释- valid_referers :定义允许访问图片的 Referer 来源: - none :允许没有 Referer 头的请求(直接访问或浏览器地址栏输入)。 - blocked :允许 Referer 被防火墙或代理删除的请求。 - server_names :允许本域名( server_name 定义的域名)。 - 自定义域名:如 *.your-domain.com (通配符匹配子域名)。 - if ($invalid_referer) :当请求的 Referer 不在允许列表中时触发动作: - return 403 :直接返回 403 错误。 - rewrite ^ /placeholder.jpg :重定向到占位图片(需提前准备)。3. 生效与测试1)重载 Nginx 配置: sudo nginx -s reload2)测试方法:直接访问图片 URL:应允许加载( none 参数生效)。从允许的域名页面引用图片:应允许加载。从未允许的域名引用图片:返回 403 或占位图。4. 高级配置允许空 Referer 和 HTTPSvalid_referers none blocked server_names *.your-domain.com https://allowed-domain.com; 结合地理位置限制location ~* \.(jpg|jpeg|png)$ { valid_referers server_names *.your-domain.com; if ($invalid_referer) { return 403; } # 仅允许中国 IP 访问 if ($geoip_country_code != CN) { return 403; } }5. 注意事项Referer 的局限性: Referer 可能被篡改或缺失,如需更高安全性,可结合签名(如 secure_link 模块)。缓存问题:建议在图片 URL 中添加随机参数(如 ?v=123 )绕过 CDN 或浏览器缓存测试。
2025年03月17日
22 阅读
0 评论
0 点赞
2025-01-19
Nginx常用的301重定向规则
仅适用于Nginx, Apache请移步: Apache .htaccess 301重定向规则大全,赶紧收藏吧注意: 所有代码作用范围都在server配置区域中:server { #Rewrite Rules }不带www重定向带有wwwif ($http_host !~ "^www.towait.com$") { rewrite ^(.*) http://www.towait.com$1 permanent; }或if ($host !~* ^www\.) { rewrite ^(.*)$ $scheme://www.$host$1 permanent; }带有www重定向不带wwwif ($http_host !~ "^towait.com$") { rewrite ^(.*) http://towait.com$1 permanent; }域名a.com重定向b.comif ($http_host ~ "^a.com$") { rewrite ^(.*) http://b.com$1 permanent; }强制HTTPS访问1在服务端配置SSL的情况if ($scheme != "https") { return 301 https://$host$request_uri; }2在CDN端配置SSL证书的情况if ($http_x_forwarded_proto = "http") { return 301 https://$server_name$request_uri; }
2025年01月19日
27 阅读
1 评论
0 点赞
2025-01-19
解决Nginx中强制跳转HTTPS访问出现的太多重定向错误
因为可以白嫖HTTPS服务,所以目前很多项目都部署在cloudflare的CDN中,此前都用的自己服务端的SSL证书,今天在cloudflare申请了一年的免费证书,在做URL统一化的时候(强制www和https访问)发现重定向次数过多的错误(redirected you too many times),这是由于我未在服务端配置SSL证书,也就是说cloudflare以HTTP回源,所以服务器接收到的信息就是HTTP请求,但是受强制HTTPS访问规则影响,服务端又给它重定向到HTTPS,又回到了CDN那边,结果CDN又产生HTTP回源请求,这就形成了一个闭环,听上去有点绕,总之访问页面就这么来回无限循环了。此前在服务端配置了SSL并强制用HTTPS访问的nginx规则是if ($scheme != "https") { return 301 https://$host$request_uri; }现在如果我们未在服务端配置SSL使用CDN端的SSL证书并启用HTTPS访问的正确写法是if ($http_x_forwarded_proto = "http") { return 301 https://$server_name$request_uri; }
2025年01月19日
41 阅读
3 评论
0 点赞
2024-12-24
Nginx反代Cloudflare源站的两种写法
1前言最近在折腾nginx反代的问题,由于网站服务器在国外,给套了一层cf,直接用反代源站的办法基本都是失败,没办法只能网上查找资料,加上自力更生,找到两种反代cf的写法。2dns设置本文我们针对全面反代cloudflare来说,直接反代源站也是类似的操作,我们当前采取的是ns接入cloudflare的方式,即域名服务器已经修改成了cloudflare的服务器,在cloudflare上设置dns记录,添加两条记录。cf.example.com 解析到你的源站ip,并开启cdn(如果你是直接反代源站,那么这一步关闭cdn,仅作为dns使用即可)blog.example.com 解析到你的反代服务器ip,仅作为dns使用。1 利用proxy_ssl_name声明源站,告诉CF #PROXY-START/ location / { proxy_pass https://www.xboy.uk; proxy_set_header Host www.xboy.uk; #向后端传递访客 ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; #向后端传递访客 ip (反代CF增加规则) proxy_ssl_name www.xboy.uk; proxy_ssl_server_name on; #缓存设置 add_header X-Cache $upstream_cache_status; #Set Nginx Cache proxy_ignore_headers Set-Cookie Cache-Control expires; proxy_cache_key $host$uri$is_args$args; proxy_cache_valid 200 304 301 302 120m; expires 12h; } #PROXY-END/3 反代到cloudflare IP# 如果反代的是cloudflare location / { # 由于我们反代的cloudflare使用的是 https,所以我们需要指明sni,不然是无法握手的,另外还需要设置host,这两个都要设置成接入cloudflare的域名。 proxy_ssl_name cdn.example.com; proxy_ssl_server_name on; proxy_set_header Host cdn.example.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; # 重点!由于我们接入cloudflare的域名和我们反代服务器的域名不一样,typecho的数据库里面记录的链接都是cdn.example.com的形式,所以我们要做内容替换。我们还需要通过设置Accept-Encoding "";来告诉服务器不要对内容进行压缩,不然返回的数据没办法使用sub_filter替换。 proxy_set_header Accept-Encoding ""; sub_filter "https://cdn.example.com" "https://blog.example.com"; # 开启内容多次替换 sub_filter_once off; # 禁用缓存 (这个应该会影响到cloudfalre的缓存,不建议设置) add_header Cache-Control no-cache; expires 12h; # 这里随便找个cloudflare的ip即可 proxy_pass https://1.0.0.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
2024年12月24日
208 阅读
0 评论
0 点赞
2024-11-30
解决 nginx报错: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in /usr/local/nginx/conf/vhost/xxx.com.conf:18
在 1.25.1 版本后的 nginx 运行日志中,可能会发现以下警告信息: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in /usr/local/nginx/conf/vhost/xxx.com.conf:18原配置:listen 443 ssl http2;修改配置为:`listen 443 ssl;http2 on;`重启 nginx 即可。参考:https://github.com/nginxinc/kubernetes-ingress/issues/4237
2024年11月30日
35 阅读
0 评论
0 点赞
2024-11-29
Nginx反向代理教程
最近趁着黑五买了一个大盘鸡,但是直接访问速度很慢,于是决定利用快速访问的小鸡来反代比较好,网上找了半天,下面的代码好用。 location / { proxy_pass https://www.xboy.uk:80; # 后端服务器的地址 proxy_set_header Host $host; 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; # 可选:处理WebSocket(如果需要) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 可选:设置超时时间 proxy_read_timeout 60s; proxy_connect_timeout 60s; proxy_send_timeout 60s; }
2024年11月29日
78 阅读
17 评论
0 点赞
2021-05-02
SEO优化:nginx 301重定向带www的https链接配置方法-方法二
之前介绍过nginx 301重定向带www的https链接配置方法,且已应用到本站上,感兴趣的可以看这里:SEO优化:nginx 301重定向带www的https链接配置方法-方法一 https://www.vvars.com/Website-construction/SEO-optimization-nginx-301-redirection-https-link-configuration-method-with-www-method-one.html今天介绍另一种方式实现nginx链接301跳转到带www https的方法,配置如下:server { listen 80; listen 443 ssl; server_name vvars.com; return 301 $schmeme://www.vvars.com$request_uri; } server { listen 80; server_name *.vvars.com; return 301 https://host$request_uri; } server { listen 443 ssl; server_name www.vvars.com; root /home/wwwroot/PHP7/domain/aihaba.com/web$subdomain; ssl_certificate /home/wwwroot/PHP7/etc/aihabacom/214014475050178.pem; ssl_certificate_key /home/wwwroot/PHP7/etc/aihabacom/214014475050178.key; ...... } 补充说明如下:第一段代码是将vvars.com 301跳转到www.vvars.com 不管是http还是https链接。第二段代码是把任何非https的二级域名(www.vvars.com实际上是个二级域名 )跳转到https的对应二级域名。第三段是应对https的请求,挂载https证书。
2021年05月02日
1,555 阅读
0 评论
0 点赞
2021-05-02
SEO优化:nginx 301重定向带www的https链接配置方法-方法一
不少浏览器都开始逐渐更新至只支持https的网站,所以很多http网站都需要添加对https的支持,这时就需要涉及到www和不加www的跳转问题,由于www和不加www使用的是不同的证书,所以需要做301跳转处理。最近博客启用了https,为了实现http://vvars.com、http://www.vvars.com、https://vvars.com 用301重定向https://www.vvars.com查了很多资料 ,没有找到完美的解决方案,经过一番探索,特记录下折腾过程,下面是方法1。server { listen 80; server_name vvars.com www.vvars.com; return 301 https://www.vvars.com$request_uri; } server { listen 443 ssl; ssl_certificate /home/wwwroot/PHP7/etc/vvarsssl/vvars.crt; ssl_certificate_key /home/wwwroot/PHP7/etc/vvarsssl/vvars.key; server_name vvars.com; return 301 https://www.vvars.com$request_uri; } server { listen 443 ssl; ssl_certificate /home/wwwroot/PHP7/etc/vvarsssl/vvars.crt; ssl_certificate_key /home/wwwroot/PHP7/etc/vvarsssl/vvars.key; server_name www.vvars.com; ....... } 说明:第一段代码是将http://www.vvars.com和http://vvars.com  ; 301重定向https://www.vvars.com,第二段代码是将https://vvars.com 301重定向https://www.vvars.com,第三段代码为指定主机用ssl连接,......为网站程序的配置文件。然后用站长工具 http://tool.chinaz.com/pagestatus/ 检查下http状态:nginx强制启用https方法http 301跳转到带www的https链接方法可以看到返回状态码均为301,所有http和不带www的域名都301重定向到了带www的https链接,这样有利于SEO。
2021年05月02日
3,649 阅读
0 评论
1 点赞
2021-03-28
Nginx教程之反向代理教程
nginx作为web服务器一个重要的功能就是反向代理。当然你也可以使用nginx配置正向代理,本是介绍如何配置nginx的反向代理。nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。什么是反向代理服务器反向代理功能是nginx的三大主要功能之一(静态web服务器、反向代理、负载均衡)。nginx一般同时做为静态web服务器和反向代理服务器,做为web服务器访问静态文件图片、css、js、html等文件,做为反向代理服务器把请求发给后端业务处理服务,如果有多个后端处理节点,会配置负载均衡功能。反向代理服务器是一种代理服务器,用于管理从外部网络到内部网络的连接或任何特定请求。它保护、路由和管理从外部网络到内部网络、Web服务器或专用网络的流量。外网客户机:我们平时打开浏览器输入网址访问www.vvars.com的场景中,我们的笔记本就可以理解为一个外网客户机。nginx反向代理服务:浏览器输入网址并回车后,会发起一个http请求给nginx(反向代理服务器),这个请求如果是访问静态文件,那么nginx作为web服务器直接返回请求的内容,如果是访问的后台服务逻辑,那么nginx把请求转发给后端的服务处理。内网web服务:后端的服务可以是很多种类型,LNMP环境下的php-fpm进程,Java环境下的tomcat、jetty等容器,通过程序逻辑处理http请求,生成html页面或者json串返回给客户端。对于小型应用,后端服务可以和nginx部署在同一台机器上。反向代理服务器的好处nginx反向代理重要的作用是配合upstream实现负载均衡。同时增加安全性,客户端不能直接访问后端服务,多了一个中间的屏障。提升性能,通过异步非阻塞的方式把请求传给后端,提升了并发处理能力。也可利用缓存、压缩响应提高响应速度。nginx如何配置反向代理nginx反向代理不需要编译额外的模块,默认自带proxy_pass和fastcgi_pass指令,通过在location配置块中增加指令就可以实现反向代理功能。以www.vvars.com为例,这个网站用的typecho程序,typecho是php语言编写,那么需要通过php运行环境,可以选择nginx的php扩展或者php-fpm环境,主流的选择是php-fpm,php-fpm设置为Unix socket模式或者ip:端口模式 。Unix socket后端服务配置server { listen 80; server_name www.vvars.com vvars.com; location /app { fastcgi_pass unix:/tmp/php-cgi.sock; } }ip端口后端服务配置server { listen 80; server_name www.nginx.cn nginx.cn; location /app { proxy_pass http://127.0.0.1:8080; } }proxy_pass和fastcgi_pass区别对于上面介绍的两种情况下proxy_pass和fastcgi_pass可以互相替代使用,不过两者还是有区别的,从名字我们就可以看出来,fastcgi_pass是用来反向代理fastcgi协议,proxy_pass可以代理包括fastcgi协议在内的其它协议。例如镜像一个网站,这种情况下就需要proxy_pass:location /{ proxy_pass https://www.vvars.com; }
2021年03月28日
1,383 阅读
0 评论
0 点赞
2021-03-25
Nginx教程系列之端口占用问题解决:“nginx: (98: Address already in use)
今天良心云BA下来了,很是高兴,一早回家就用LNMP创建VHOST,结果修改了301定向后重启NGINX一直报错。那么Linux环境下,启动nginx报错,系统提示 nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use) ,该怎么呢?1.提示 nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use) ,一般原因是nginx端口443被占用了。首先使用下面的命令查看端口占用情况:netstat -apn|grep 80显示为:[root@VM-12-14-centos frp]# netstat -apn|grep 443 tcp6 0 0 :::443 :::* LISTEN 5842/./frps 原来是frp内网穿透占了接口,用下面的命令查询frp的进程号: ps -ef|grep frps显示如下,查到进程是5842: [root@VM-12-14-centos frp]# ps -ef|grep frps root 5842 1 0 Mar14 ? 00:03:18 ./frps -c ./frps.ini root 23982 15890 0 21:14 pts/0 00:00:00 grep --color=auto frps2.使用kill命令,将占用443端口的frp进程(进程号5842)给杀掉,如下命令:kill -9 5842之后可以再用命令ps -ef|grep frps查询一下进程是否被杀死,一般都是被杀死了。3.然后再次使用使用netstat -apn|grep 443查看端口占用情况,确认进程已经被杀掉;4.重新启动nginx,以军哥lnmp环境为例,运行之后网站443正常访问,大功告成:lnmp nginx restart5.接下来就是修改frp的443端口号,用下面的命令,找到443端口,我为了省事直接加个#号屏蔽掉,当然你也可以改成其他的端口号。vim /root/frp/frps.ini 好了,上面就是我处理的全部过程,希望能帮到你。
2021年03月25日
2,044 阅读
0 评论
0 点赞
1
2