- 假定自己的域名是:my.domain.com
- 要反代的域名是:proxy.domain.com
- 以 Debian 12 系统为例子
安装 Nginx
sudo apt update
sudo apt install nginx
初始化工作
放行端口
sudo apt install ufw -y
sudo ufw allow ssh
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw reload
设置 Nginx 开机启动和启动 Nginx
sudo systemctl enable nginx
sudo systemctl start nginx
新建反代网站配置文件
cd /etc/nginx/sites-enabled
touch my.domain.com
编辑 Nginx 配置文件
vi /etc/nginx/sites-enabled/my.domain.com
配置文件如下:(用于后续 Acme. Sh 使用 Nginx 来申请 SSL 证书)
server {
listen 80;
listen [::]:80;
server_name my.domain.com;
}
安装 acme. Sh
curl https://get.acme.sh | sh -s [email protected]
source ~/.bashrc
申请证书
- 假定自己的域名: my. Domain. Com
- 反代的域名:proxy. Domain. Com
acme.sh --issue -d my.domain.com --nginx
运行后没有问题会得到如下结果:
Your cert is in: /root/.acme.sh/my.domain.com_ecc/my.domain.com.cer
Your cert key is in: /root/.acme.sh/my.domain.com_ecc/my.domain.com.key
The intermediate CA cert is in: /root/.acme.sh/my.domain.com_ecc/ca.cer
And the full-chain cert is in: /root/.acme.sh/my.domain.com_ecc/fullchain.cer
然后再次编辑配置文件,完整配置文件如下:
# 这部分用于Acme.sh使用Nginx来申请SSL证书
server {
listen 80;
listen [::]:80;
server_name my.domain.com;
}
server {
# 监听IPv4和IPv6的443端口,启用SSL和HTTP/2协议
listen 443 ssl http2;
listen [::]:443 ssl http2;
# 指定服务器名称(域名)
server_name my.domain.com;
# SSL证书配置
# 指定SSL证书文件路径,用于加密HTTPS通信
ssl_certificate /root/.acme.sh/my.domain.com_ecc/fullchain.cer;
# 指定SSL证书密钥文件路径
ssl_certificate_key /root/.acme.sh/my.domain.com_ecc/my.domain.com.key;
# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3; # 启用TLS 1.2和1.3协议,禁用不安全的旧版本
ssl_ciphers HIGH:!aNULL:!MD5; # 强制使用安全加密算法
ssl_prefer_server_ciphers on; # 优先使用服务器端的加密算法
ssl_session_cache shared:SSL:10m; # 启用SSL会话缓存以提高性能
ssl_session_timeout 1d; # 设置SSL会话缓存过期时间为1天
# 安全相关的HTTP头配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 启用HSTS,强制所有子域名也使用HTTPS,缓存1年
add_header X-Frame-Options DENY; # 禁止页面被嵌入iframe,防止点击劫持
add_header X-Content-Type-Options nosniff; # 防止浏览器猜测文件类型
# 反向代理配置
location / {
# 将所有请求转发到后端服务器 https://proxy.domain.com:443
proxy_pass https://proxy.domain.com:443;
# 设置传递给后端的Host头信息为客户端请求的主机名
proxy_set_header Host $proxy_host;
# 设置X-Real-IP头,将客户端的真实IP传递给后端
proxy_set_header X-Real-IP $remote_addr;
# 设置X-Forwarded-For头,包含客户端的真实IP以及经过的代理IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 设置X-Forwarded-Proto头,指示原始请求的协议
proxy_set_header X-Forwarded-Proto $scheme;
# 配置代理SSL SNI(服务器名称指示)
proxy_ssl_name proxy.domain.com;
proxy_ssl_server_name on; # 启用SNI,使后端服务器根据域名提供正确的SSL证书
}
}
保存退出后执行:
nginx -s reload
没有报错,就可以愉快的看剧了~
主打简单,能直接放出来。别的可以自己根据需求修改。
我自己的特地dd小鸡走了一遍这个流程,测试没问题后发出来的 
技术贴,帮顶
个人感觉
用端口转发会更流畅点
仅在emby端装个nginx用来反代和套ssl
@vpsex #2 我主要用来反代屏蔽大陆的公益服来自己看。
BD,蹲一波NPM版
@jayolim #4
好麻烦 caddy 几行配置搞定。。
example.com {
reverse_proxy https://example.com {
header_up Host {upstream_hostport}
header_up Accept-Encoding identity
}
@kodeng #5
谢谢大佬
bd
@Tony #6 Caddy我前面也写了。看个人喜好了。
@jayolim #4
直接配置文件丢给gpt让他告诉你具体流程就行