目录
介绍
上次我们说了手动安装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并搭建伪装网站