反向代理,即把公网地址隐藏,通过域名访问搭建网站。
【前提条件】
公网地址+端口,可以正常访问。
【目的】
让ngnix站在服务器的门口,把关每个ip,把他们送去其访问服务对应的端口。服务器网站的”摆渡人“。
(服务器一般都开80/443 端口,假如服务就在80或443端口,那便可在域名服务上直接添加一条指向服务器公网网址的记录即可。)
【方法】
1. 下载nginx
sudo apt update #更新索引,找最新安装包
sudo apt install nginx -y #安装
sudo systemctl enable nginx #设置开机自启
sudo systemctl start nginx #原神启动!创建nginx配置
sudo vim /etc/nginx/sites-available/xxx #vim和nano随意选,我习惯vim了输入以下配置:
server {
listen 80;
server_name 你的网址;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name 你的网址;
ssl_certificate /etc/letsencrypt/live/域名(请求后一般会自动放到这里)/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名(请求后一般会自动放到这里)/privkey.pem;
location / {
proxy_pass http://本地地址+端口;
proxy_http_version 1.1;
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;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}启用配置
sudo ln -sf /etc/nginx/sites-available/xxx /etc/nginx/sites-enabled/xxx重启服务
sudo nginx -t #检查 Nginx 配置文件是否存在语法错误
sudo systemctl restart nginx #重启 Nginx 服务申请证书
我直接申请证书一直报错,所以通过dns获取证书。
sudo certbot certonly --manual --preferred-challenges dns -d 域名
Certbot 会给你一条 TXT 记录,例如:
名称: xxxx
值: xxxxxxxx
在 DNS 控制台添加:
主机记录: xxxx
记录类型: TXT
记录值: certbot 给你的 value
添加后不要立刻按回车,先查:
nslookup -type=TXT 公网+端口
看到对应 TXT 值后,再回到 Certbot 按回车。
成功后证书路径是:
/etc/letsencrypt/live/xxx
/etc/letsencrypt/live/xxx
5. 测试
sudo nginx -t
sudo systemctl restart nginx
curl -i https://域名
(不过这个证书一般是90天,到期要自己再弄一次。)