Docker下部署Ngnix+Trojan

最近发现服务器被挖矿病毒侵害,Nginx里的网站源码都是静态的,只暴露了22和80,443接口,密码长度16位,实在不知道是怎么被人搞的。

思来想去,怀疑Trojan一键搭建脚本里可能有什么不干净的东西,于是决定自己手工用Docker搭建一个Trojan。

一、安装Docker

apt-get update
apt-get upgrade

apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  bionic \
  stable"

apt-get install docker-ce docker-ce-cli containerd.io

二、获取Https证书

申请https证书,在Docker下,为了方便,用DNS的方式验证网站的所有权。

domain=""
Ali_Key=""
Ali_Secret=""
output="$(pwd)/out"

docker run --rm  -it  \
  -v "$output":/acme.sh  \
  -e Ali_Key="$Ali_Key" \
  -e Ali_Secret="$Ali_Secret" \
  neilpang/acme.sh --issue --log --dns dns_ali -d "$domain"

mkdir -p /etc/trojan/
ln -sf "$output"/"$domain"/fullchain.cer /etc/trojan/fullchain.crt
ln -sf "$output"/"$domain"/"$domain".key /etc/trojan/private.key

续期

docker run --rm  -it  \
  -v "$output":/acme.sh  \
  -e Ali_Key="$Ali_Key" \
  -e Ali_Secret="$Ali_Secret" \
  neilpang/acme.sh --renew --force --log --dns dns_ali -d "$domain"

三、Nginx

mkdir -p /var/www/html
mkdir -p /opt/nginx/logs

#拷出默认配置,便于定制化
docker pull nginx
docker run --name tmp-nginx -d nginx
docker cp tmp-nginx:/etc/nginx/nginx.conf /opt/nginx/
docker cp tmp-nginx:/etc/nginx/conf.d /opt/nginx/
docker cp tmp-nginx:/usr/share/nginx/html/index.html /var/www/html/
docker rm -f tmp-nginx

#运行
docker run \
    --name nginx \
    --net host \
    -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \
    -v /opt/nginx/conf.d:/etc/nginx/conf.d \
    -v /opt/nginx/logs:/var/log/nginx \
    -v /var/www/html:/usr/share/nginx/html \
    -d nginx

四、Trojan

运行Trojan

docker run \
    --name trojan \
    --net host \
    -v /etc/trojan:/etc/trojan \
    -v /etc/trojan/fullchain.crt:/etc/trojan/fullchain.crt \
    -v /etc/trojan/private.key:/etc/trojan/private.key \
    -d teddysun/trojan

五、Nginx配置

开启全站https,在conf.d/default.conf配置修改至如下:

#本地网站目录,供Trojan访问
server {
    listen 127.0.0.1:80 default_server;

    server_name ;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

}

# server_name替换为服务器ip,目的是,当有人直接访问服务器ip时,跳转至https网站
server {
    listen 127.0.0.1:80;

    server_name <10.10.10.10>;

    return 301 https://$host$request_uri;
}

# 将所有80端口的流量重定向至443
server {
    listen 0.0.0.0:80;
    listen [::]:80;

    server_name _;

    location / {
        return 301 https://$host$request_uri;
    }
}

你可能感兴趣的:(Docker下部署Ngnix+Trojan)