现在 Docker 被广泛用在自建服务上,几个命令就能启动自己的服务,十分方便。有些服务需要开启 HTTPS 保证安全,通过反代开启 HTTPS 是一种简单又通用的方式。
本文简单介绍如何使用 Nginx 反向代理。
指标 | 描述 |
---|---|
适用系统 | Debian 系发行版,包括 Ubuntu, Armbian,其他发行版稍改命令一般也可 |
走通流程时间 | 10 分钟 |
I might have made some mistakes, please let me know if I’ve gotten anything wrong!
安装 Nginx
sudo apt update && sudo apt upgrade -y && sudo apt install nginx
编写配置文件
HTTP 反代
编写 Nginx 配置文件(注意修改 vfly2.com 文件名)
sudo vim /etc/nginx/sites-available/vfly2.com
当在 80 端口收到访问 vfly2.com 的请求时,就将请求转发给 http://127.0.0.1:7456
server {
listen 80;
server_name vfly2.com;
location / {
proxy_pass http://127.0.0.1:7456;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
假设本机地址是 1.2.3.4,最终效果是:访问 http://vfly2.com 相当于访问 http://1.2.3.4:7456
简单介绍:
proxy_pass
,指定后端服务的地址proxy_set_header
,修改 HTTP 请求头- Host,修改前是 vfly2.com,修改后是 127.0.0.1
- X-Real-IP,修改前是 127.0.0.1 (如果不修改,后端服务收到的地址其实是 Nginx 的 IP 地址),修改后是真实的访问 IP
- X-Forwarded-For,不了解
创建软链接,使配置文件生效(新创建的配置文件执行一次就行,后续修改无须再次执行)
sudo ln -s /etc/nginx/sites-available/vfly2.com /etc/nginx/sites-enabled/vfly2.com
HTTPS 反代
如果需要使用 HTTPS,则先获取证书:[[02acme.sh]] 使用 acme.sh 申请和自动更新证书的完整指南 – 技焉洲 (yanh.tech)
申请证书
acme.sh --issue -d vfly2.com --webroot /var/www/html
安装证书
acme.sh --install-cert -d vfly2.com \
--key-file /etc/ssl/private/vfly2.com.key \
--fullchain-file /etc/ssl/certs/vfly2.com.cer
编写 Nginx 配置文件(注意修改文件名)
sudo vim /etc/nginx/sites-available/vfly2.com
# (可省略)当在 80 端口收到访问 vfly2.com 的请求时,301 重定向到 HTTPS,即 443 端口
server {
listen 80;
server_name vfly2.com;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl;
server_name vfly2.com;
# 指定证书的路径
ssl_certificate /etc/ssl/certs/vfly2.com.cer;
ssl_certificate_key /etc/ssl/private/vfly2.com.key;
# 避免阻断 acme 的自动申请
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
proxy_pass http://127.0.0.1:7456;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
sudo ln -s /etc/nginx/sites-available/vfly2.com /etc/nginx/sites-enabled/vfly2.com
重定向
301是永久重定向,302是临时重定向
acme.sh --issue -d technique.vfly2.com --webroot /var/www/html
acme.sh --install-cert -d technique.vfly2.com \
--key-file /etc/ssl/private/technique.vfly2.com.key \
--fullchain-file /etc/ssl/certs/technique.vfly2.com.cer
sudo vim /etc/nginx/sites-available/tech
同时监听 80 和 443 上对 technique.vfly2.com 的请求
server {
listen 80;
listen 443 ssl;
server_name technique.vfly2.com;
ssl_certificate /etc/ssl/certs/technique.vfly2.com.cer;
ssl_certificate_key /etc/ssl/private/technique.vfly2.com.key;
location / {
return 301 https://yanh.tech$request_uri;
}
}
sudo ln -s /etc/nginx/sites-available/tech /etc/nginx/sites-enabled/tech
重启生效
检查配置
sudo nginx -t
重启生效
sudo systemctl reload nginx
当域名更改解析 IP 后,需要重启 Nginx,因为它可能缓存了 IP
原文链接: https://yanh.tech/2024/09/tutorial-of-nginx-reverse-proxy-and-redirection/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。