安装NPM
Nginx proxy manager(NPM)是一个基于 Nginx 和 Nginx Plus 的开源项目,用Web界面简化和管理反向代理和虚拟主机的配置。
什么是反向代理呢?我们先来看正向代理,正向代理服务器代表客户端发送请求,将请求转发给目标服务器(常用的加速器)
反向代理是当客户端访问服务器时,首先请求反向代理服务器,然后由反向代理服务器根据服务器的负载情况(比如服务器的当前工作负荷)来动态选择将请求转发到哪个后端服务器。这就是负载均衡,而负载均衡是反向代理的一种常见策略,因此它们经常一同使用。
简单来说 正向代理服务端不知道真正的客户端,反向代理客户端不知道真正的服务端
创建目录并创建compose.yml文件,后面基本上每个软件都会创建一个目录和compose.yml文件用来管理和方便迁移
mkdir -p ~/docker/npm && cd ~/docker/npm && vim compose.yml
10000端口可以根据自己的喜好更改,一般在1024到65535中取值,注意避开系统已经使用的端口,可以使用
netstat -t4lpn
查看ipv4的tcp端口,:
后面的就是端口号避免重复就可以了
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '10000:81' # 可修改
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Esc:wq退出并保存 然后部署
docker compose up -d
打开网址
http://xxx.xxx.xxx.xxx:10000/
输入默认的账户
[email protected]
密码
changeme
然后进来填写一下个人信息,Email邮箱需要填写一个真实的邮箱,到时候SSL证书过期会发邮箱提醒
然后在输入changeme
默认密码再修改成你想要的密码
先添加SSL证书
添加一个主域名和通配符域名
勾选Use a DNS Challenge
选择你域名托管的供应商,我这里是DNSPod
使用腾讯云的DNSPod需要用DNSPod Token 别使用 腾讯云 API 密钥 生成的
然后把DNSPod账号绑定的邮箱和申请的id,key传入点击save按钮即可成功(DNSPod保存会报错,请参考这篇文章)
接下来就开始反代Docker应用
点击Add Proxy Hosts
添加一个子域名作为你后面访问时通过这个域名来访问,ip默认都是172.17.0.1
这是docker的bridge网络默认ip地址,端口就填写当前使用docker compose映射出来的管理端口,也就是当前页面路径:后面的数字
下面这三个选项分别是
Cache Assets
启用或禁用对静态资产(如图像、CSS文件、JavaScript文件等)的缓存
Block Common Exploits
启用或禁用对常见网络攻击和漏洞的阻止措施。防止SQL注入、跨站脚本攻击(XSS)等 必须开启
Websockets Support
启用或禁用对WebSocket协议的支持 一般有标注项目用到了WebSocket才启用
接下来点击SSL选项
Force SSL
强制将所有传入的 HTTP 请求重定向到 HTTPS 协议上
HTTP/2 Support
HTTP/2 是 HTTP 协议的第二个主要版本,旨在提高网页加载性能。它引入了一些新特性,包括多路复用(Multiplexing)、头部压缩、服务器推送等,以减少页面加载时间并提高性能。如果确定没有使用HTTP/2的项目可以关闭
HSTS Enabled
强制使用加密连接(HTTPS)来访问网站,以提高站点的安全性。当启用 HSTS 后,服务器会向客户端发送特定的 HTTP 头部,其中包含 HSTS 指令,告诉浏览器在未来一段时间内只使用 HTTPS 访问该站点。
HSTS Subdomains
对于该域名及其所有子域名都应用 HSTS 规则, 比如主域名是aaa.com 子域名就是blog.aaa.comForce SSL 和 HSTS Enabled 的区别
Force SSL 是一种通过服务器端的重定向规则强制将 HTTP 请求重定向到 HTTPS 地址的方式,HSTS Enabled 是通过在服务器响应中使用 HSTS 头部告诉浏览器在未来的一段时间内始终使用 HTTPS。使用 HSTS 可以减少重定向次数,提高站点性能和安全性。通常推荐同时启用 Force SSL 以处理初次访问时的重定向,并启用 HSTS 以加强安全性
一般是这四个选项都开启,然后点击 Save 保存,接下来就可以直接点击连接使用https网址访问当前的npm项目了
你可能有这样的疑惑,为什么需要反向代理呢?直接用ip:端口不行吗?
ip:端口肯定是可以的,但是你要为了更安全来做考虑,首先就是使用了HTTPS可以有效的防止窃听、截取或篡改数据。第二点,使用子域名来访问,可以有效的防止别人通过ip:端口从1024扫描到65535,这样很容易就扫描出你开放了那个端口然后再根据这个端口部署的应用是否有漏洞,从而入侵你的服务器