linux--nginx(八)防盗链

server1:

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述在这里插入图片描述

真机要有解析

在这里插入图片描述在这里插入图片描述
server2;

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

mkdir /web
vim /web/index.html

在这里插入图片描述
要有解析

在这里插入图片描述

nginx -t
nginx -s reload

真机得知道server1和server2

在这里插入图片描述
测试:

在这里插入图片描述

防盗

server1:

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

nginx -t
nginx -s reload

测试:

在这里插入图片描述

重定向到另外一个网页

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述在这里插入图片描述
注意在真机上要有解析

在这里插入图片描述

测试:

在这里插入图片描述

<think> 我们之前已经在一台Linux上搭建了两个FastDFS实例(实例1无防盗链,实例2带防盗链),但问题描述中用户提到两个Nginx都指向了没有防盗链的FastDFS(即实例1)。这可能是由于Nginx配置错误导致的。现在需要解决这个问题,确保: 1. 一个Nginx服务实例1(无防盗链) 2. 另一个Nginx服务实例2(带防盗链) 解决思路: 1. 配置两个独立的Nginx服务,分别监听不同端口(例如8080和8081)或使用不同虚拟主机。 2. 将第一个Nginx配置为代理实例1(无防盗链)的存储节点。 3. 将第二个Nginx配置为代理实例2(带防盗链)的存储节点,并在该Nginx配置中启用防盗链规则。 具体步骤: ### 一、配置第一个Nginx(无防盗链,代理实例1) 1. **安装Nginx**(如果尚未安装): ```bash # CentOS yum install nginx # Ubuntu apt-get install nginx ``` 2. **配置Nginx代理实例1**(修改或新建配置文件,例如`/etc/nginx/conf.d/fastdfs1.conf`): ```nginx server { listen 8080; # 使用8080端口 server_name localhost; location ~ /group1/M00 { # 代理到实例1的存储节点 root /data/fastdfs/storage1/data; # 注意:这里是实例1的存储路径 ngx_fastdfs_module; # 使用FastDFS的Nginx模块 } } ``` 3. **重启Nginx**: ```bash systemctl restart nginx ``` ### 二、配置第二个Nginx(带防盗链,代理实例2) 注意:为了避免与第一个Nginx冲突,我们可以通过两种方式: a) 再安装一个Nginx(编译安装到不同目录,使用不同端口) b) 在同一个Nginx中使用不同的server块监听不同端口(推荐,更简单) 这里采用同一个Nginx配置两个server块的方式: 1. **在Nginx配置目录中增加实例2的配置**(例如`/etc/nginx/conf.d/fastdfs2.conf`): ```nginx server { listen 8081; # 使用8081端口 server_name localhost; location ~ /group2/M00 { # 防盗链配置 valid_referers none blocked server_names *.yourdomain.com; if ($invalid_referer) { return 403; } # 代理到实例2的存储节点 root /data/fastdfs/storage2/data; # 实例2的存储路径 ngx_fastdfs_module; } } ``` 2. **重启Nginx**: ```bash systemctl restart nginx ``` ### 三、验证 1. **实例1(无防盗链)**: 访问:`http://服务器IP:8080/group1/M00/00/00/xxx` 应能直接访问文件,无防盗链限制。 2. **实例2(带防盗链)**: - 使用白名单域名访问:`http://服务器IP:8081/group2/M00/00/00/xxx` 应能访问。 - 使用非白名单域名或直接IP访问:`http://服务器IP:8081/group2/M00/00/00/xxx` 应返回403。 ### 四、问题排查 如果两个Nginx配置都指向了实例1,请检查: - 配置文件中`root`指向的路径是否正确(实例1和实例2的存储路径不同) - location中的组名是否正确(实例1为`group1`,实例2为`group2`) - 端口是否配置正确(8080和8081) 另外,确保两个FastDFS实例的存储节点配置正确,且分别连接到了对应的tracker(实例1的tracker端口22122,实例2的tracker端口22123)。 ### 五、补充说明 如果使用Docker环境,需要注意将Nginx配置文件、存储路径等挂载到容器中,并确保容器内路径正确。但根据用户描述,我们是在同一台Linux主机上操作,所以使用上述配置即可。 如果用户之前已经将两个Nginx都指向了实例1,现在只需要修改第二个Nginx配置(监听8081端口的那个)的`root`路径和location中的组名,并添加防盗链规则。 最后,确保防火墙或安全组开放了8080和8081端口。 ### 相关问题 1. 如何检查Nginx配置文件的语法错误? 2. 如何查看FastDFS存储节点的运行状态? 3. 防盗链配置中如何设置多个白名单域名? 通过以上步骤,应该能解决用户的问题:两个Nginx分别代理两个FastDFS实例(一个带防盗链,一个不带)。 </think> ### 解决两个Nginx都指向非防盗链FastDFS的问题 当两个Nginx都指向了未配置防盗链的FastDFS实例(实例1)时,需要调整配置使第二个Nginx指向配置防盗链的实例2。以下是完整解决方案: --- ### 一、问题排查与解决思路 1. **问题原因**: - Nginx配置中`ngx_fastdfs_module`指向了错误的存储路径 - `mod_fastdfs.conf`未正确关联实例2的配置 - 端口冲突导致服务指向混乱 2. **解决步骤**: - 分离两套FastDFS服务的存储路径 - 为每个实例配置独立的Nginx服务 - 在实例2的Nginx中启用防盗链规则 --- ### 二、具体配置步骤 #### 1. 确认FastDFS实例状态 ```bash # 检查实例1(无防盗链) ps aux | grep fdfs | grep tracker1 ps aux | grep fdfs | grep storage1 # 检查实例2(带防盗链) ps aux | grep fdfs | grep tracker2 ps aux | grep fdfs | grep storage2 ``` #### 2. 修改实例2的Nginx配置 编辑实例2的Nginx配置文件(示例位置:`/etc/nginx/conf.d/fastdfs2.conf`): ```nginx server { listen 8081; # 使用不同端口 location ~ /group2/M00 { # 关键修改:指向实例2的存储路径 root /data/fastdfs/storage2/data; # 防盗链配置(仅实例2启用) valid_referers none blocked server_names *.yourdomain.com; if ($invalid_referer) { return 403; } ngx_fastdfs_module; } } ``` #### 3. 修正`mod_fastdfs.conf`关联 编辑实例2的模块配置文件(示例位置:`/etc/fdfs/mod_fastdfs2.conf`): ```ini [group2] group_name=group2 storage_server_port=23001 # 实例2的端口 store_path_count=1 store_path0=/data/fastdfs/storage2/data tracker_server=127.0.0.1:22123 # 实例2的tracker url_have_group_name=true ``` #### 4. 重启服务 ```bash # 重启实例2的Nginx nginx -s reload # 重启实例2的FastDFS /opt/fastdfs2/bin/fdfs_trackerd /opt/fastdfs2/etc/fdfs/tracker2.conf restart /opt/fastdfs2/bin/fdfs_storaged /opt/fastdfs2/etc/fdfs/storage2.conf restart ``` --- ### 三、关键检查点 1. **路径验证**: ```bash # 实例1应指向: /data/fastdfs/storage1/data # 实例2应指向: /data/fastdfs/storage2/data ``` 2. **端口隔离**: | 服务 | 实例1端口 | 实例2端口 | |---------|----------|----------| | Tracker | 22122 | 22123 | | Storage | 23000 | 23001 | | Nginx | 8080 | 8081 | 3. **防盗链测试**: ```bash # 实例1应可直接访问 curl -I http://127.0.0.1:8080/group1/M00/00/00/test.jpg # 实例2应验证Referer curl -I http://127.0.0.1:8081/group2/M00/00/00/test.jpg ``` --- ### 四、补充说明 1. **配置隔离原则**: - 使用不同配置文件:`tracker1.conf` vs `tracker2.conf` - 独立日志文件:`/data/fastdfs/tracker1/logs` 和 `/data/fastdfs/tracker2/logs` - 分离存储目录:`/data/fastdfs/storage1` 和 `/data/fastdfs/storage2` 2. **常见错误处理**: - **端口冲突**:使用`netstat -tunlp | grep 8081`检查端口占用 - **权限问题**:确保Nginx用户有存储目录访问权限 ```bash chown -R nginx:nginx /data/fastdfs/storage2 ``` - **模块加载**:确认Nginx加载了正确的`mod_fastdfs.so` ```nginx load_module modules/ngx_http_fastdfs_module.so; ``` --- ### 五、最终架构验证 ```mermaid graph LR A[客户端] --> B[Nginx:8080] A --> C[Nginx:8081] B --> D[FastDFS 实例1<br>无防盗链] C --> E[FastDFS 实例2<br>带防盗链] ``` --- ### 相关问题 1. 如何验证Nginx是否正确关联了不同的FastDFS实例? 2. 防盗链配置中`valid_referers`参数支持哪些匹配模式? 3. 同一服务器部署多实例时如何避免存储路径冲突? 4. FastDFS多实例环境下如何进行性能监控
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值