之前有人问我,怎么在内网用域名来访问各种服务,并且要带加密
很多人说~没啥实际意义~
好吧,一般家用而言是没什么意义~but bigger~你懂的

Nginx的架构我估计大家都可以倒背如流了~以免被杠上…我就不多作介绍了~没听过的估计也不会看这个文章~
好吧~首先我们需要一个能运行Nginx的内网机器~可以是Linux的VM也可以是Docker伪虚拟机可以是OP
我这里以VM为例~安装好Debian 10并且配置好网络
使用以下命令安装好必备的先决条件
apt install curl gnupg2 ca-certificates lsb-release
然后使用用以下命令导入证书
echo “deb http://nginx.org/packages/debian `lsb_release -cs` nginx” \
| tee /etc/apt/sources.list.d/nginx.list
curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key
然后验证你的证书
gpg –dry-run –quiet –import –import-options import-show /tmp/nginx_signing.key
结果是
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key
正确的话使用以下命令把证书放进去
mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
然后就可以最简单的方式安装了
apt update
apt install nginx
安装完了后你可以用两种方式运行
1、直接当作系统服务运行~
systemctl enable nginx
systemctl start nginx
2、另外一种方式是使用supervisord
这个我以后再专门写个文章教怎么弄~一般而言用Docker伪虚拟机就会用到

然后就是申请证书了~
首先你要有自己的域名
我这里以你把域名放在dnspod做dns解释托管来做例子




登录后打开右上角的用户菜单~选择API密钥
选择DNSPod Token然后创建密钥
我们这里取个例子叫做letencrypt
就会得到我们的ID和密钥~当然了要保存起来

然后在Nginx的那台机子上
首先要安装socat
apt install socat
然后下载acme的运行文件
curl https://get.acme.sh | sh
下载完了后文件会在/root/.acme.sh/目录下


编辑/root/.acme.sh/account.conf
写入你的ID和Token


然后使用以下命令写入你的账户
/root/.acme.sh/acme.sh –register-account -m 你的邮箱地址
然后使用以下命令申请证书
/root/.acme.sh/acme.sh –issue –dns dns_dp -d *.你的域名
你就会得到你的证书文件,放在/root/.acme.sh/*.你的域名/目录下
我们一般会用到fullchain.cer和key文件

然后我们就可以开始做内网指向了
我们编辑nginx的/etc/nginx/conf/目录录下的配置文件
这里我们假设要建立一个docker.conf用于解释portaniner
这里我们假设portainer的地址是192.168.200.254:9000
那么我们就在这里建立一个以下内容的docker.conf文件
内容如下

server {
listen 443 ssl http2;
server_name docker.你的域名;

ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:2m;
ssl_session_timeout 1d;

ssl_certificate /root/.acme.sh/*.你的域名/fullchain.cer;
ssl_certificate_key /root/.acme.sh/*.你的域名/*.你的域名.key;

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

location / {
proxy_pass http://192.168.200.254:9000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

error_page 500 502 503 504 /50x.html;

location = /50x.html {
root /usr/share/nginx/html;
}
}

server {
listen 80;
server_name docker.你的域名;
return 301 https://$host$request_uri;
}

使用以下命令重新加载nginx配置文件
nginx -s reload

然后在浏览器就可以直接打开docker.你的域名来访问了