Laravel双TLD部署:仅开放mysite.net/upload并限制访问来源
当然可行!这个思路非常合理——既绕开了Cloudflare的大文件限制,又能把暴露的路由严格锁起来,只给你的负载均衡服务器开权限。下面是具体的实现步骤,完全适配你已经在Forge里配置好mysite.net的情况:
具体实现方法
1. 限制mysite.net仅开放/upload路由
登录Forge找到mysite.net的Nginx配置文件,修改server块逻辑:只允许访问/upload开头的路径,其他所有请求直接返回403禁止访问(或者跳转到你的主站mysite.com)。示例配置如下:
server { listen 80; listen [::]:80; server_name mysite.net; # 拦截所有非/upload的请求 location / { return 403; # 也可以改成 return 301 https://mysite.com$request_uri; 跳转到主站 } # 仅放行/upload路径,指向你的主站文件目录 location /upload { root /path/to/mysite.com/public; # 替换成你mysite.com的实际根目录路径 try_files $uri $uri/ /index.php?$query_string; # 如果是PHP项目,保留FastCGI配置(Forge默认会生成这部分) fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } }
2. 给/upload路由添加IP白名单,仅允许负载均衡服务器访问
在上面的location /upload块中,加入IP限制规则,只放行你的负载均衡服务器的IP(如果有多个出口IP,全部添加进去)。修改后的配置如下:
location /upload { # 先设置IP白名单 allow 192.168.1.100; # 替换成你的负载均衡服务器实际IP # 如果有多个IP,继续添加allow行,比如 allow 192.168.1.101; deny all; # 拒绝所有不在白名单内的IP # 保留原有的根目录和FastCGI配置 root /path/to/mysite.com/public; try_files $uri $uri/ /index.php?$query_string; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; }
注意:一定要确认负载均衡服务器的所有出口IP都在白名单里,避免合法的上传请求被拦截。
3. 验证配置并重启Nginx
在Forge里修改完配置后,先点击Test Nginx Configuration按钮检查语法是否正确,确认没问题后点击Restart Nginx让配置生效。
额外防护建议
- 可以给
/upload路由再加一层HTTP Basic Auth作为双重保险,万一IP限制出现疏漏,还有一道防线:location /upload { allow 192.168.1.100; deny all; # 添加Basic Auth auth_basic "Restricted Upload Area"; auth_basic_user_file /etc/nginx/.htpasswd; # 用`htpasswd`命令生成这个密码文件 # 原有的根目录和FastCGI配置... } - 定期查看Nginx的访问日志,监控是否有非授权IP尝试访问
/upload路由,及时调整白名单或加强防护。
内容的提问来源于stack exchange,提问作者timgavin
相关产品推荐
相关产品推荐

