写在最前面
-
几个月前,看笔记的时候发现图片都坏掉了。当时还在发了一条沸点,问了下jym的情况。当时的沸点
-
之前一直在白嫖微博的图床,用浏览器的插件上传生成url。在这之前的时候微博好像就屏蔽了其他的referer,如果在一些评论区直接使用markdown引用来自微博图床的url就会访问不到。考虑到自己只是写笔记时使用,也没有太过在意。
事情经过
-
但是这次笔记里去访问的时候referer应该是空的才对,打开浏览器直接访问url同样403,说明微博图床把空referer的情况也给禁用了。
-
那微博自己的referer总要可以访问的,在chrome里安装下ModHeader插件在请求头里添加下referer参数,值可以给微博的。先把图片down到本地目录
搭建MinIO
-
交流后发下大家用图床方式有很多种,有像我一样直接白嫖的,也有一些买付费的,还有自己通过云服务商对象存储服务+cdn实现的。但是呢,白嫖的现在不能用了,付费的图床和对象存储+cdn 也都是要花钱的。自己在hk有台机器好闲置一部分资源,就想在这台机器里面多跑个容器自己搞一下。
-
刚刚机器里有容器环境,直接写好 docker-compose.yaml 起容器就好了。用docker-compose 而不是直接起容器是因为docker-compose管理更方便一些,而且要用自己的域名所以前面还有挂一个nginx做反向代理。
[root@VM-8-10-centos nginx]# cat docker-compose.yaml
version: "3.7"
services:
minio:
image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
container_name: minio-server
restart: always
ports:
- "9000:9000"
- "9001:9001"
volumes:
- "/data/minio/data:/data"
command: server --console-address ":9001" /data
environment:
- MINIO_ROOT_USER=miniouser
- MINIO_ROOT_PASSWORD=miniopassword
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
networks:
- minio-net
nginx:
image: nginx # 镜像名称
container_name: minio-nginx # 容器名字
restart: always # 开机自动重启
ports: # 端口号绑定(宿主机:容器内)
- "80:80"
- "443:443"
depends_on:
- minio
volumes: # 目录映射(宿主机:容器内)
- "/data/minio/nginx/nginx.conf:/etc/nginx/nginx.conf"
- "/data/minio/nginx/ssl_cert:/ssl_cert"
networks:
- minio-net
networks:
minio-net:
driver: bridge
[root@VM-8-10-centos nginx]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name file.yestodayhadrain.com;
return 301 https://$http_host$request_uri;
access_log off;
}
server {
listen 443 ssl;
server_name file.yestodayhadrain.com;
index index.html index.htm;
ssl_certificate /ssl_cert/file.yestodayhadrain.com.pem;
ssl_certificate_key /ssl_cert/file.yestodayhadrain.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /image {
proxy_pass http://minio-server:9000;
add_header Access-Control-Allow-Origin *;
}
location / {
proxy_pass http://minio-server:9001;
add_header Access-Control-Allow-Origin *;
}
}
}
- ssl证书的话国内的云服务商都可以申请免费的,随便找一家申请一个下载下来上传到机器上就好了。
[root@VM-8-10-centos nginx]# pwd
/data/minio/nginx
[root@VM-8-10-centos nginx]# ll ssl_cert/
total 12
-rwxrwxrwx 1 root root 1704 Jan 17 15:19 file.yestodayhadrain.com.key
-rwxrwxrwx 1 root root 4113 Jan 17 15:19 file.yestodayhadrain.com.pem
-
启动容器,把下载到本地的图片上传到MinIO的桶里,然后把笔记中图片url的域名改成自己的就完美恢复啦。

-
MinIO的桶尽量要设置成公有读,私有写的。MinIO的桶策略设置和aws的S3比较类似,我是直接修改了Action下面的操作。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::image/*"
]
}
]
}