环境安装与 Nginx 代理配置指南
1. 更新系统并安装依赖环境
首先,更新软件包列表并安装 PostgreSQL、Redis、Nginx 以及 Certbot 等必要组件:
Bash
sudo apt update
sudo apt install postgresql postgresql-contrib redis-server nginx certbot python3-certbot-nginx -y
2. 配置 PostgreSQL 数据库
设置 PostgreSQL 默认用户密码,并创建所需的数据库:
Bash
# 修改 postgres 用户密码
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '你的密码';"
# 创建名为 sub2api 的数据库
sudo -u postgres createdb sub2api
3. 配置 Nginx 反向代理 (HTTP)
创建并编辑 Nginx 站点配置文件:
Bash
sudo nano /etc/nginx/sites-available/example.com
将以下内容粘贴到文件中:
Nginx
server {
# 监听 80 端口(普通 HTTP)
listen 80;
underscores_in_headers on;
client_max_body_size 100m;
# 你的域名
server_name example.com;
# 将所有请求转发到本地的 8080 端口
location / {
proxy_pass http://127.0.0.1:8080;
# 携带真实的客户端信息给你的本地服务
proxy_set_header Host $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;
}
}
保存并退出: > 在 nano 编辑器中,按
Ctrl + O保存,敲击Enter确认,然后按Ctrl + X退出。
4. 启用配置并重启 Nginx
创建一个软链接以启用该配置,并测试语法:
Bash
# 创建一个软链接,告诉 Nginx 启用这个配置 (注意替换为你实际的配置文件名)
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# 测试一下我们刚才写的配置文件有没有语法错误
sudo nginx -t
# 如果提示 test is successful,就重新加载 Nginx 让配置生效
sudo systemctl reload nginx
5. 申请并配置 SSL 证书 (HTTPS)
使用 Certbot 自动为域名申请证书并配置 Nginx:
Bash
sudo certbot --nginx -d example.com
6. 开启 HTTP/2 与添加安全响应头
再次编辑 Nginx 配置文件,进行性能优化和安全加固:
Bash
sudo nano /etc/nginx/sites-available/example.com
开启 HTTP/2
在配置文件中,找到被 Certbot 修改的这一行: listen 443 ssl; # managed by Certbot
将其修改为(加上 http2): listen 443 ssl http2; # managed by Certbot
注意: 可以使用
nginx -v查看版本。如果 Nginx 版本在 1.25.1 以上,直接在后面加http2可能会提示语法弃用。如果后续测试报错,将其改回listen 443 ssl;并在下方另起一行写上http2 on;即可。
添加安全响应头 (TLS加固与HSTS)
在 server_name 这一行的下方,找个空位复制粘贴以下内容:
Nginx
# 1. 开启 HSTS,强制浏览器在 1 年内只使用 HTTPS 访问你的网站 (包含子域名)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# 2. 防止网站被恶意嵌套在别人的 iframe 网页里 (防点击劫持)
add_header X-Frame-Options SAMEORIGIN;
# 3. 防止浏览器错误猜测文件类型 (防 MIME 类型嗅探攻击)
add_header X-Content-Type-Options nosniff;
# 4. 开启基础的跨站脚本(XSS)过滤器
add_header X-XSS-Protection "1; mode=block";
7. 最终测试与生效
保存修改后,再次测试并重载 Nginx:
Bash
# 1. 测试配置语法是否正确
sudo nginx -t
# 2. 重新加载 Nginx 让最新配置生效
sudo systemctl reload nginx
附录:完整的 HTTPS 配置文件示例
为了防止粘贴错位置,你的配置文件(HTTPS 部分)最终看起来应该大致像这样:
Nginx
server {
server_name example.com; # 你的域名
# === 我们刚才加的安全响应头 ===
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# ==============================
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $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;
}
# === Certbot 自动生成的证书配置 ===
listen 443 ssl http2; # 注意这里我们加了 http2
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
# 下面通常还有一个 server 块,是 Certbot 自动加的,用来把 80(HTTP) 强制定向到 443(HTTPS),保持原样即可。
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name example.com;
return 404; # managed by Certbot
}
BD
最简单的方案
打开 codex,把项目地址粘贴给他,帮我部署这个项目。等待完成。
我的评价是我脚本里有做一键部署