纯docker安装nginx部署ws+tls并搭建伪装网站

实用教程 admin 2个月前 (03-11) 279次浏览 0个评论

image.png

介绍

上次我们说了手动安装nginx部署ws+tls,详情见:纯手动安装nginx部署ws+tls并设置伪装网站,小白的v2ray是采用的docker版,那nginx是不是也可以采用docker版呢?当然也是可以的,今天我们就来看看如何通过纯docker的方式安装nginx部署ws+tls并搭建伪装网站。

实操

安装docker

wget -qO- get.docker.com | bash

安装v2ray

具体可参考:docker配合宝塔部署ws+tls并搭建伪装网站,这里我们采用秋水大佬的v2ray的docker镜像,下面简要描述

写入配置文件

vi /root/v2ay/config.json,或者直接上传现成的config.json文件也可以。其中id和path请自己自定义,其中的端口和path要和接下来的nginx的配置文件中保持一致。

{
  "inbounds": [
    {
      "port": 29569,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "f9950445-a796-454d-a2c7-9745dc2eb9e3"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "ws",
        "security": "none",
        "tlsSettings": {},
        "tcpSettings": {},
        "kcpSettings": {},
        "httpSettings": {},
        "wsSettings": {
          "path": "/bueEnIYC/",
          "headers": {
            "Host": ""
          }
        },
        "quicSettings": {}
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom"
    }
  ]
}

启动容器

docker run -d --network host --name v2ray --restart=always -v /root/v2ray:/etc/v2ray teddysun/v2ray

安装nginx

nginx的安装稍微复杂一点,也可以有稍微简单的方法,我们待会再说,先一步一步来。

启动一个临时容器

docker run -d --network host --name nginx nginx

nginx运行在docker容器中对应的目录如下:

配置文件目录:/etc/nginx;
日志目录:/var/log/nginx;
项目根目录:/usr/share/nginx/html;
了解nginx在docker中运行的目录地址是为了把他们给复制到宿主机的目录下。

复制容器nginx的配置文件到宿主机中

小白直接将容器的/etc/nginx目录映射到/root/nginx,我们直接把docker容器中的nginx配置复制进去。将/usr/share/nginx/html映射到/root/nginx/html。

docker cp nginx:/etc/nginx /root

停止之前启动的临时nginx容器,并删除

docker stop nginx
docker rm nginx

修改配置文件并放入证书

备份原来的配置文件:

mv /root/nginx/nginx.conf /root/nginx/nginx.conf.bk

新建配置文件:

vi /root/nginx/nginx.conf

模板如下:

user  root;
worker_processes  1;
#error_log  /etc/nginx/error.log warn;
#pid    /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  /etc/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  120;
    client_max_body_size 20m;
    #gzip  on;
server {
    # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
    listen 80;
    listen [::]:80 ipv6only=on;
    listen 443 ssl http2;
    listen [::]:443 ssl ipv6only=on http2;
    # 域名,多个以空格分开
    server_name  example.example.com; //请改成自己的域名
    index index.php index.html index.htm default.php default.htm default.html;
    root /usr/share/nginx/html; 
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate        /etc/nginx/example.com.crt; 
    ssl_certificate_key    /etc/nginx/example.com.key; 
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;
 
    #SSL-END
    
    #ws反代部分,location路径和proxy_pass端口请与v2ray配置文件保持一致
    location /bueEnIYC/ { 
    if ($http_upgrade != "websocket") { 
        return 404;
    }
    proxy_redirect off;
    proxy_pass http://127.0.0.1:29569; 
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    # Show real IP in v2ray access.log
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
}

 

启动新的nginx服务

docker run -d --network=host \
    -e TZ="Asia/Shanghai" \
	-v /root/nginx:/etc/nginx:ro \
	-v /root/nginx/html:/usr/share/nginx/html:ro \
    --name nginx --restart=unless-stopped \
    nginx

:ro:表示容器内部的nginx文件是只读的,想要修改配置内容,只能修改宿主机的conf文件夹;这样带来的好处是安全性更高。
-e TZ=”Asia/Shanghai”:表示把时区设置为中国的时区;

拉取伪装站点

随便找个网页文件扔进宿主机的站点映射目录,可以去mack-a大佬的仓库里随便拖一个站点文件下来。

wget -O /root/nginx/html/web.zip https://github.com/mack-a/v2ray-agent/raw/master/fodder/blog/unable/html8.zip
unzip web.zip

好了,大功告成。

构建个人一键脚本

有能力的童鞋可以自己封装docker镜像,小白不会,只能想到笨办法,这里提供一个思路。可以将v2ray的配置文件、从docker版nginx复制来的/etc/nginx目录压缩、适合自己的nginx.conf、以及伪装站点的网页网页上传到远程目录,写一个个人用的一键脚本,从远程拉取文件部署容器即可。

参考文献:

1.Docker安装nginx

2.纯手动安装nginx部署ws+tls并设置伪装网站

3.docker配合宝塔部署ws+tls并搭建伪装网站

 


VPS小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址