Ubuntu Apache2服务器无域名站点配置别名问题
兄弟,我太懂你这种为了省空间共享几十万张图片的需求了!之前3个带域名的网站跑顺了,唯独这个用IP子路径访问的新站出状况,大概率是路径映射或者资源引用的锅,给你几个针对性的排查和解决方向:
先盯紧「资源引用路径」
你之前的域名站用的可能是根路径开头的引用,比如/uploads/xxx.jpg,这种在http://mywebsite.com/下会精准指向网站根目录的uploads文件夹,但换到195.111.111.111/mywebsite.com/这个路径后,/uploads/xxx.jpg会直接跳转到195.111.111.111/uploads/xxx.jpg,根本找不到你的共享文件夹。解决办法:要么在新站的配置里把资源根路径改成
/mywebsite.com/uploads/,要么用动态路径拼接——比如后端代码里自动获取当前请求的上下文路径(也就是/mywebsite.com/),再和图片的相对路径拼接,生成完整的访问URL。检查服务器的「静态资源路由配置」
不管你用Nginx还是Apache,都得给这个IP子路径单独配置共享文件夹的映射。比如Nginx的话,要加一段类似这样的配置:location /mywebsite.com/uploads { alias /实际的共享上传文件夹路径; expires 30d; # 给图片开缓存,提升访问速度 add_header Cache-Control "public, immutable"; }这样当用户访问
195.111.111.111/mywebsite.com/uploads/xxx.jpg时,服务器才会去你的共享文件夹里找对应的图片。最后确认「文件权限」
虽然其他站没问题,但难保新站的运行用户(比如Nginx的nginx用户、Apache的www-data用户)没权限读共享文件夹。可以用命令检查下:ls -l /实际的共享上传文件夹路径确保运行用户有读取权限,要是没有的话,用
chown或者chmod调整下就行。
另外提一句,30万+图片的话,后续配置域名后可以整个CDN,既能提速还能减轻服务器压力,不过先把当前IP访问的问题搞定再说~
内容的提问来源于stack exchange,提问作者Devbizz

