前言
上一期留了一个问题,我们怎么样才能把IP+端口变成域名来访问?
答案是用反向代理。
看过之前几期视频的小伙伴应该知道,之前有宝塔的时候,碰到这个情况,我们会先新建一个站点,然后修改Nginx配置文件:
location / {
proxy_pass http://178.18.249.61:8123/;
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
就可以反向代理的操作(域名访问)了。
很多小伙伴跟着做可以成功,但是可能对反向代理并不是很了解,我们就趁着今天来简单介绍一下。
操作环境
- 大陆境外服务器一台,德国Netcup 服务器 VPS 1000 G9(腾讯云轻量香港和新开的新加坡均部署失败,不确定是否是服务器的问题还是腾讯云的问题,大家也可以在评论区反馈一下自己是否遇到同样的问题)
- 需要一个域名(域名购买参考:Namesilo域名购买 视频参考:【VPS服务器到底能干啥】P4 给自己搞一个牛叉的专属域名!~)
- Docker环境(具体看这篇:【Docker系列】不用宝塔面板,小白一样可以玩转VPS服务器!)
什么是代理
首先代理大家都懂 😃
代理就是第三方。
正向代理
你要买国外小G家的鞋子,你没有paypal和信用卡,买不了,于是你找到了叫小V的代购帮你到海外买,小V找到海外的卖家小G,帮你买了鞋子,然后寄回给了你。
这个小V就是正向代理。
正向代理的特点是,可以保护访问者的信息。因为小V是个职业代购,他在帮你代购鞋子的同时也帮别人代购鞋子,而且他不仅代购鞋子,还代购箱子、家具、电饭煲,卖家小G只知道有人买了我的鞋子,我交给了小V,但并不知道具体是谁买了他家的鞋子。
反向代理
反向代理,顾名思义,正好相反,可以保护卖家的信息。
具体可以看视频。
好了,回来。
没有了宝塔,我们今天用一个更简单的Docker项目来完成反向代理的操作。
Nginx Proxy Manager
Nginx proxy manager是一个很简单的反向代理工具。
官网:https://nginxproxymanager.com/
门槛极低,操作简单,不需要你掌握很复杂的Nginx配置知识,只需要几步就能很轻松完成反向代理的设置和SSL证书的部署。
it had to be so easy that a monkey could do it.
配置参考:
Docker-compose文件:
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: 'jc21/mariadb-aria:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
默认登陆名和密码:
Email: admin@example.com
Password: changeme
查看当前服务器IP:
curl ifconfig.me
查看Docker容器内部IP:
ip addr show docker0
关于Internal Server Error 问题
来自小伙伴@colinsoo 在评论区的反馈:
主要是因为数据库链接和初始化。 在
docker-compose
中有个映射是 →./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
这个.sql
文件可以去作者的仓库里面找到:https://github.com/mikecao/umami/blob/master/sql/schema.mysql.sql
需要提前映射到安装的地方,来初始化数据库(也就是要提前建表),整了一天才发现主要问题在这……可能主要是因为这个东西可以静态部署,所以没有整合到应用里,需要手动执行?
大家可以自行测试一下!
最后
NPM的功能还有很多,预计还有两期,一期讲泛域名证书的配置,一期讲安全防护,这次只是简单介绍一下,大家可以发挥钻研精神,自己先研究研究。
有了NPM,可以统一管理,的确方便了很多,但总觉得还缺少点什么?有没有类似NPM这种有UI界面的工具,可以让我们直观地看到Docker的容器呢?Docker容器如果也可以统一管理,查看状态就很棒,别急,下期给大家带来!
评论区