注意事项

配置ssl证书开启https公网访问,请务必注意数据安全。

immich服务目前没有密码错误多次登录时触发登录保护的功能,所以存在暴力破解的可能性。

建议用tailscale、ngrok、frp、cloudflare tunnel之类内网穿透工具。

第一步:申请证书

申请证书这里不做赘述,阿里云送的免费证书,或者let’s encrypt的证书都可以。

我用的反代工具是nginx,所以证书是是nginx格式。

一共两个文件:

domain.key
domain.pem

第二步:安装nginx

我用的系统是debian,直接apt安装

apt install nginx

nginx安装好以后,默认配置文件路径/etc/nginx

如果没有这个目录,执行以下命令,会显示nginx的配置文件路径

nginx -t

第三步:上传证书

/etc/nginx目录下新建文件夹ssl,然后用工具(比如winscp/sftp等)把两个ssl证书文件放到ssl目录下。

最终ssl证书的路径如下:

/etc/nginx/ssl/domain.key
/etc/nginx/ssl/domain.pem

第四步:配置反代

进入目录/etc/nginx/sites-available,把默认的default配置文件备份,新建一个default文件。

# 进目录
cd /etc/nginx/sites-available

# 备份
mv default default.bak

# 新建
touch default

如果不懂为啥,就根据这个操作,如果懂,就根据自己的习惯操作。

用编辑器编辑default文件,录入一下内容,保存后退出。假定新端口是12345。

server {
	# 监听端口 12345
	listen 12345 ssl;
	listen [::]:12345 ssl;

	# 服务名
	server_name domain;

	# 因为需要上传照片视频,这里设定最大上传文件50GB
	client_max_body_size 50000M;

	# ssl证书路径
	ssl_certificate         ssl/domain.pem;
	ssl_certificate_key     ssl/domain.key;

	# ssl session缓存和时间
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 5m;

	# ssl加密的相关配置
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_prefer_server_ciphers on;

	# 这个是设置http访问报错后自动跳转到https
	error_page 497 https://$host:$server_port$uri$is_args$args;

	location / {
		# 跳转到本地2283端口
		proxy_pass  http://localhost:2283;

		# 以下配置是immich官网文档的内容,因为docker-immich还有一层nginx
		proxy_set_header Host              $http_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;
		proxy_http_version 1.1;
		proxy_set_header   Upgrade    $http_upgrade;
		proxy_set_header   Connection "upgrade";
		proxy_redirect off;
	}
}

第五步:重启服务

完成nginx的配置以后,先测试配置文件语法是否正确。

nginx -t

语法测试通过,会显示success,否则会显示错误行数,根据报错调整即可。

测试通过后,重启nginx。

systemctl restart nginx

重启成功后,就可以通过https://domain:12345来访问immich了。


参考文章

  1. Reverse Proxy https://immich.app/docs/administration/reverse-proxy