Vultr VPS配置Nginx反向代理

要开启 HTTPS 访问,你需要为你的域名配置 SSL 证书,并修改 Nginx 配置以支持 HTTPS。以下是具体步骤:


1. 获取 SSL 证书

推荐使用 Let’s Encrypt 免费 SSL 证书。你可以使用 certbot 工具来获取证书。

在主机A上安装 Certbot

1
2
sudo apt update
sudo apt install certbot

获取 SSL 证书

运行以下命令获取证书(确保域名已解析到主机A的IP地址):

1
sudo certbot certonly --standalone -d your-domain.com
  • your-domain.com 替换为你的实际域名。
  • 证书会保存在 /etc/letsencrypt/live/your-domain.com/ 目录下。

2. 修改 Nginx 配置文件

更新主机A上的 Nginx 配置文件,使其支持 HTTPS。

编辑之前创建的 reverse-proxy.conf 文件:

1
nano ~/nginx-proxy/conf.d/reverse-proxy.conf

修改为以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri; # 将所有 HTTP 请求重定向到 HTTPS
}

server {
listen 443 ssl;
server_name your-domain.com;

ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
proxy_pass http://<服务器B的IP地址>:3000;
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;
}
}

3. 修改 Docker Compose 文件

为了让 Nginx 容器能够访问主机上的 SSL 证书文件,需要将证书目录挂载到容器中。

编辑 docker-compose.yml 文件:

1
nano ~/nginx-proxy/docker-compose.yml

修改为以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
restart: always

4. 重启 Nginx 容器

更新配置后,重启 Nginx 容器以应用更改:

1
2
3
cd ~/nginx-proxy
docker-compose down
docker-compose up -d

5. 测试 HTTPS 访问

现在,你可以通过以下方式测试 HTTPS 是否正常工作:

  1. 访问 https://your-domain.com,确保能够正常加载服务器B的内容。
  2. 检查浏览器地址栏,确认显示为安全的 HTTPS 连接(小锁图标)。

6. 自动更新 SSL 证书(可选)

Let’s Encrypt 证书有效期为 90 天,需要定期更新。可以通过以下步骤设置自动更新。

手动测试更新

1
sudo certbot renew --dry-run

设置定时任务

编辑 crontab:

1
sudo crontab -e

添加以下内容,每天凌晨 2 点检查并更新证书:

1
0 2 * * * certbot renew --quiet --post-hook "docker restart nginx-proxy"

7. 防火墙配置

确保主机A的防火墙允许 HTTPS 流量(443 端口):

1
sudo ufw allow 443

总结

通过以上步骤,你已经成功配置了 HTTPS 访问:

  1. 使用 Let’s Encrypt 获取 SSL 证书。
  2. 修改 Nginx 配置以支持 HTTPS。
  3. 挂载 SSL 证书到 Docker 容器。
  4. 重启 Nginx 并测试 HTTPS 访问。

如果遇到问题,可以检查 Nginx 日志(docker logs nginx-proxy)或 Certbot 日志(/var/log/letsencrypt/)来排查问题。

时间: 2025-02-28T22:13:14


👤 用户

我在Vultr的vps主机A上通过dokcer部署了nginx并配置了反向代理,访问A主机80端口指向服务器B的3000端口,如何配置A和B,实现正常访问

时间: 2025-02-28T22:11:57


🤖 DeepSeek (deepseek-chat)

要在Vultr的VPS主机A上通过Docker部署Nginx并配置反向代理,访问A主机的80端口指向服务器B的3000端口,你需要进行以下步骤:

1. 在主机A上安装Docker和Docker Compose

确保主机A上已经安装了Docker和Docker Compose。

1
2
3
4
5
6
7
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')" /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. 创建Nginx配置文件

在主机A上创建一个Nginx配置文件,用于反向代理到服务器B的3000端口。

1
2
mkdir -p ~/nginx-proxy/conf.d
nano ~/nginx-proxy/conf.d/reverse-proxy.conf

reverse-proxy.conf文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;

server_name your-domain.com; # 替换为你的域名或主机A的IP地址

location / {
proxy_pass http://<服务器B的IP地址>:3000;
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;
}
}

3. 创建Docker Compose文件

在主机A上创建一个docker-compose.yml文件来定义Nginx容器。

1
nano ~/nginx-proxy/docker-compose.yml

docker-compose.yml文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- ./conf.d:/etc/nginx/conf.d
restart: always

4. 启动Nginx容器

在主机A上使用Docker Compose启动Nginx容器。

1
2
cd ~/nginx-proxy
docker-compose up -d

5. 配置服务器B

确保服务器B上的3000端口已经开放,并且应用程序正在监听该端口。你可以使用以下命令检查:

1
sudo ufw allow 3000

6. 测试访问

现在,你可以通过访问主机A的IP地址或域名来测试反向代理是否正常工作。如果一切配置正确,访问http://<主机A的IP地址>应该会显示服务器B上3000端口的应用程序内容。

7. 防火墙配置

确保主机A和服务器B的防火墙允许相关端口的流量通过。

  • 在主机A上,确保80端口是开放的:
1
sudo ufw allow 80
  • 在服务器B上,确保3000端口是开放的:
1
sudo ufw allow 3000

8. 域名配置(可选)

如果你有域名,可以将域名解析到主机A的IP地址,并在Nginx配置中使用该域名。

总结

通过以上步骤,你应该能够在Vultr的VPS主机A上通过Docker部署Nginx并配置反向代理,访问A主机的80端口指向服务器B的3000端口。如果遇到问题,可以检查Nginx日志和服务器B的日志来排查问题。

时间: 2025-02-28T22:11:57


👤 用户

那如何开启https访问呢?

时间: 2025-02-28T22:13:14


🤖 DeepSeek (deepseek-chat)

要开启 HTTPS 访问,你需要为你的域名配置 SSL 证书,并修改 Nginx 配置以支持 HTTPS。以下是具体步骤:


1. 获取 SSL 证书

推荐使用 Let’s Encrypt 免费 SSL 证书。你可以使用 certbot 工具来获取证书。

在主机A上安装 Certbot

1
2
sudo apt update
sudo apt install certbot

获取 SSL 证书

运行以下命令获取证书(确保域名已解析到主机A的IP地址):

1
sudo certbot certonly --standalone -d your-domain.com
  • your-domain.com 替换为你的实际域名。
  • 证书会保存在 /etc/letsencrypt/live/your-domain.com/ 目录下。

2. 修改 Nginx 配置文件

更新主机A上的 Nginx 配置文件,使其支持 HTTPS。

编辑之前创建的 reverse-proxy.conf 文件:

1
nano ~/nginx-proxy/conf.d/reverse-proxy.conf

修改为以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri; # 将所有 HTTP 请求重定向到 HTTPS
}

server {
listen 443 ssl;
server_name your-domain.com;

ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
proxy_pass http://<服务器B的IP地址>:3000;
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;
}
}

3. 修改 Docker Compose 文件

为了让 Nginx 容器能够访问主机上的 SSL 证书文件,需要将证书目录挂载到容器中。

编辑 docker-compose.yml 文件:

1
nano ~/nginx-proxy/docker-compose.yml

修改为以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
restart: always

4. 重启 Nginx 容器

更新配置后,重启 Nginx 容器以应用更改:

1
2
3
cd ~/nginx-proxy
docker-compose down
docker-compose up -d

5. 测试 HTTPS 访问

现在,你可以通过以下方式测试 HTTPS 是否正常工作:

  1. 访问 https://your-domain.com,确保能够正常加载服务器B的内容。
  2. 检查浏览器地址栏,确认显示为安全的 HTTPS 连接(小锁图标)。

6. 自动更新 SSL 证书(可选)

Let’s Encrypt 证书有效期为 90 天,需要定期更新。可以通过以下步骤设置自动更新。

手动测试更新

1
sudo certbot renew --dry-run

设置定时任务

编辑 crontab:

1
sudo crontab -e

添加以下内容,每天凌晨 2 点检查并更新证书:

1
0 2 * * * certbot renew --quiet --post-hook "docker restart nginx-proxy"

7. 防火墙配置

确保主机A的防火墙允许 HTTPS 流量(443 端口):

1
sudo ufw allow 443

总结

通过以上步骤,你已经成功配置了 HTTPS 访问:

  1. 使用 Let’s Encrypt 获取 SSL 证书。
  2. 修改 Nginx 配置以支持 HTTPS。
  3. 挂载 SSL 证书到 Docker 容器。
  4. 重启 Nginx 并测试 HTTPS 访问。

如果遇到问题,可以检查 Nginx 日志(docker logs nginx-proxy)或 Certbot 日志(/var/log/letsencrypt/)来排查问题。

时间: 2025-02-28T22:13:14



对话统计

  • 消息总数: 4 条
  • 处理状态: 成功转换