最后更新:2024-3-23 23:50:26
本文详细介绍如何在云服务器上安装 Docker 版 Nginx、Xay、Tuic、Hysteria,实现网盘与 Vless、Trojan、WS、gRPC 共用443 端口和非443端口的 Tuic、Hysteria 2 协议。以下配置命令是在 root 账户下完成,非 root 账户执行时需要在每条命令前加上 sudo。
443端口:Vless Vision TLS/Reality、Trojan、gRPC
2000端口:Reality
3000端口:Tuic v5
4000端口:Hysteria 2
ECS 准备
云服务器 OS 推荐 Ubuntu 或 Debian 的最新版,内存 >= 512M 。
升级安装必要软件以及设置时区
apt-get update && apt-get upgrade
apt-get install wget -y
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock -w
如果云服务器控制面板里有单独的防火墙面板,直接放行 80/443 端口。否则需要在系统里安装防火墙并配置。
apt-get install ufw -y
ufw enable
# 检查UFW是否运行
ufw status
# 设置默认规则
ufw default allow outgoing
ufw default deny incoming
# 允许以下端口通过防火墙 SSH 端口默认22 建议更换为其它端口
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 2000/tcp
ufw allow 3000/udp
ufw allow 4000/udp
# 列出当前UFW规则
ufw status verbose
申请和安装域名证书
假如域名为 domain.com,我们申请 Wildcard 泛域名证书。域名的 nameserver 推荐使用 Cloudflare,解析速度极快。
安装 acme.sh
wget -qO- get.acme.sh | bash
source ~/.bashrc
设置 Cloudflare 的 CF_Token(为了安全不要用Global API 详细教程网上找)
export CF_Token="xxxxxx"
export CF_Email="xxxxxx"
acme.sh 默认使用 ZeroSSL 申请证书,可更换默认服务商为 Let’s Encrypt。
acme.sh --set-default-ca --server letsencrypt
acme.sh 实现了 acme 协议支持的所有验证协议,一般有两种方式验证,http 和 dns 验证。由于 Wildcard 证书验证只支持 dns 验证,不支持 http 验证,所以要使用 dns api 模式。推荐申请 ECC 证书。
acme.sh --issue --dns dns_cf -d domain.com -d '*.domain.com' -k ec-256
安装证书
acme.sh --installcert -d domain.com --fullchain-file /etc/ssl/fullchain.cer --key-file /etc/ssl/domain.com.key --ecc
安装网盘服务
我推荐 Cloudreve 网盘。
mkdir /usr/local/bin/cloudreve && cd /usr/local/bin/cloudreve
wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_amd64.tar.gz
tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz
chmod +x ./cloudreve
./cloudreve
Cloudreve 在首次启动时,会创建初始管理员账号,请注意保管管理员密码,此密码只会在首次启动时出现。如果您忘记初始管理员密码,需要删除同级目录下的 cloudreve.db,重新启动主程序以初始化新的管理员账户。Cloudreve 默认会监听5212端口。你可以在浏览器中访问 http://服务器IP:5212 进入 Cloudreve。
接下来按 Ctrl+C 退出 Cloudreve,设置守护进程。
nano /usr/lib/systemd/system/cloudreve.service
# 输入以下代码
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target
[Service]
WorkingDirectory=/usr/local/bin/cloudreve
ExecStart=/usr/local/bin/cloudreve/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
StandardOutput=null
StandardError=syslog
[Install]
WantedBy=multi-user.target
设置开机启动
systemctl start cloudreve
systemctl enable cloudreve
设置 Cloudreve 配置文件并重启
nano /usr/local/bin/cloudreve/conf.ini
# 编辑以下代码
[System]
Mode = master
Debug = false
Listen = :5212
[UnixSocket]
Listen = /run/cloudreve.sock
# 重启 CLoudreve 服务
systemctl restart cloudreve
安装 Xray 和 Nginx
Xray 和 Nginx 都用 Docker版 方便维护和升级
# 安装 Docker
wget -qO- get.docker.com | bash
# 设置 Docker 开机启动
systemctl start docker
systemctl enable docker
# 拉取镜像 其中 watchtower 会自动监测并更新镜像
docker pull teddysun/xray
docker pull nginx
docker pull containrrr/watchtower
mkdir /var/log/xray
touch /var/log/xray/error.log && touch /var/log/xray/access.log
mkdir /var/log/nginx
touch /var/log/nginx/error.log && touch /var/log/nginx/access.log
配置 Xray
利用 Nginx 支持 SNI 分流特性,实现多协议共用 443 端口。其中 Trojan+TCP+TLS 为 WebSocket 提供分流转发;Nginx 同时为 Vless Vision TLS、Vless Vision Reality 与 Trojan 提供回落服务,为 Xray 的 gRPC 提供反向代理。
以下代码实现了 Xray 服务中 Vless+Vision+TLS、Vless+Version+Reality、Vless+ws、Vless gRPC、Trojan+tls、Trojan+ws、Trojan gRPC 七种组合协议共存。
mkdir /etc/xray && nano /etc/xray/config-vision.json
# 添加以下代码
{
"log": {
"loglevel": "warning",
"error": "/var/log/xray/error.log",
"access": "/var/log/xray/access.log"
},
"inbounds": [
{
"listen": "/dev/shm/vless.sock",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "048e0bf2-dd56-11e9-aa37-5600024c1d6a", # 修改为自己的UUID
"flow": "xtls-rprx-vision"
}
],
"decryption": "none",
"fallbacks": [
{
"alpn": "h2",
"dest": "/dev/shm/h2c.sock",
"xver": 2
},
{
"dest": "/dev/shm/h1.sock",
"xver": 2
},
{
"path": "/vws",
"dest": "@vless-ws",
"xver": 2
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"alpn": [
"h2",
"http/1.1"
],
"minVersion": "1.2",
"cipherSuites": "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
"certificates": [
{
"certificateFile": "/etc/ssl/fullchain.cer",
"keyFile": "/etc/ssl/domain.com.key",
"ocspStapling": 3600
}
]
},
"tcpSettings": {
"acceptProxyProtocol": true
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "@vless-ws",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "048e0bf2-dd56-11e9-aa37-5600024c1d6a" # 修改为自己的UUID
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/vws"
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "/dev/shm/reality.sock",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "048e0bf2-dd56-11e9-aa37-5600024c1d6a", # 修改为自己的UUID
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"show": false,
"dest": "/dev/shm/web.sock",
"xver": 2,
"serverNames": [
"r.domain.com"
],
"privateKey": "8GY5APNJPGftVueqa_pCH6ofL9ZlvxNPptZe7iTMdHc", # 修改为自己的privateKey
"shortIds": [
""
]
},
"tcpSettings": {
"acceptProxyProtocol": true
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "/dev/shm/trojan.sock",
"protocol": "trojan",
"settings": {
"clients": [
{
"password":"Your password" # 修改为自己的密码
}
],
"fallbacks": [
{
"alpn": "h2",
"dest": "/dev/shm/h2c.sock",
"xver": 2
},
{
"dest": "/dev/shm/h1.sock",
"xver": 2
},
{
"path": "/tws",
"dest": "@trojan-ws",
"xver": 2
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"alpn": [
"h2",
"http/1.1"
],
"minVersion": "1.2",
"cipherSuites": "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
"certificates": [
{
"certificateFile": "/etc/ssl/fullchain.cer",
"keyFile": "/etc/ssl/domain.com.key",
"ocspStapling": 3600
}
]
},
"tcpSettings": {
"acceptProxyProtocol": true
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "@trojan-ws",
"protocol": "trojan",
"settings": {
"clients": [
{
"password":"Your password" # 修改为自己的密码
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/tws"
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "/dev/shm/vgrpc.sock",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "048e0bf2-dd56-11e9-aa37-5600024c1d6a" # 修改为自己的UUID
}
],
"decryption": "none"
},
"streamSettings": {
"network": "grpc",
"security": "none",
"grpcSettings": {
"serviceName": "vdngrpc" # 修改为自己的服务名称 与Nginx配置里一致
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
},
{
"listen": "/dev/shm/tgrpc.sock",
"protocol": "trojan",
"settings": {
"clients": [
{
"password": "xxxxxx" # 修改为自己的密码
}
]
},
"streamSettings": {
"network": "grpc",
"security": "none",
"grpcSettings": {
"serviceName": "tdngrpc" # 修改为自己的服务名称 与Nginx配置里一致
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}
建议协议用新不用旧,在客户端支持的情况下,推荐 Vless + Vision、Vless + Vision+Reality。
Xray 配置文件里的 Private key 为 8GY5APNJPGftVueqa_pCH6ofL9ZlvxNPptZe7iTMdHc,在客户端里对应 Public key 为 zdZDyO6e4rZbY9ntngS8yXPRR5dF2JHdlfIl6cJEMic,也可以自己生成这对 Key。
docker exec -it xray-v sh
xray x25519
# 执行上面的命令后会生成 Private key 和 Public key,最后输入exit 退出容器。
配置 Nginx
因为需要多个域名来标记分流,所以事先应在 Cloudflare 里设置好二级域名。这里假设 v.domain.com 对应 Vless 协议,t.domain.com 对应 Trojan 协议,r.domain.com 对应 Reality 协议。
Nginx 配置文件是 /etc/nginx/nginx.conf
mkdir /etc/nginx
nano /etc/nginx/nginx.conf
# 添加以下代码
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
stream {
map $ssl_preread_server_name $backend_name {
v.domain.com vless;
t.domain.com trojan;
r.domain.com reality;
domain.com web;
default web;
}
upstream vless {
server unix:/dev/shm/vless.sock;
}
upstream trojan {
server unix:/dev/shm/trojan.sock;
}
upstream reality {
server unix:/dev/shm/reality.sock;
}
upstream web {
server unix:/dev/shm/web.sock;
}
server {
listen 443;
listen [::]:443;
ssl_preread on;
proxy_protocol on;
proxy_pass $backend_name;
}
}
http {
include 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" '
'$proxy_protocol_addr:$proxy_protocol_port';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Nginx 站点配置文件是 /etc/nginx/conf.d/default.conf
mkdir /etc/nginx/conf.d
nano /etc/nginx/conf.d/default.conf
# 添加以下代码
server {
listen 80;
listen [::]:80;
return 301 https://domain.com$request_uri;
}
server {
listen unix:/dev/shm/h1.sock proxy_protocol;
listen unix:/dev/shm/h2c.sock proxy_protocol;
set_real_ip_from unix:;
real_ip_header proxy_protocol;
return 301 https://domain.com$request_uri;
}
server {
listen unix:/dev/shm/web.sock ssl proxy_protocol;
http2 on;
set_real_ip_from unix:;
real_ip_header proxy_protocol;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_reject_handshake on;
} #限定域名连接(包括禁止以 IP 方式访问网站)
server {
listen unix:/dev/shm/web.sock ssl proxy_protocol;
server_name domain.com www.domain.com r.domain.com;
if ($host = www.domain.com) { return 301 https://domain.com$request_uri; }
http2 on;
set_real_ip_from unix:;
real_ip_header proxy_protocol;
ssl_certificate /etc/ssl/fullchain.cer;
ssl_certificate_key /etc/ssl/domain.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
location / {
proxy_pass http://unix:/run/cloudreve.sock;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
client_max_body_size 20000m;
proxy_redirect off;
proxy_buffer_size 64k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
}
location /vdngrpc { # 修改为自己的服务名称 与xray配置里一致
if ($request_method != "POST") {
return 404;
}
client_body_buffer_size 1m;
client_body_timeout 1h;
client_max_body_size 0;
grpc_read_timeout 1h;
grpc_send_timeout 1h;
grpc_set_header X-Real-IP $remote_addr;
grpc_pass grpc://unix:/dev/shm/vgrpc.sock;
}
location /tdngrpc { # 修改为自己的服务名称 与xray配置里一致
if ($request_method != "POST") {
return 404;
}
client_body_buffer_size 1m;
client_body_timeout 1h;
client_max_body_size 0;
grpc_read_timeout 1h;
grpc_send_timeout 1h;
grpc_set_header X-Real-IP $remote_addr;
grpc_pass grpc://unix:/dev/shm/tgrpc.sock;
}
}
启动 Nginx、Xray 服务
运行 Docker Xray 服务
docker run -d --network host --name xray-v --restart=always -v /etc/xray/config-vision.json:/etc/xray/config.json -v /var/log/xray:/var/log/xray -v /etc/ssl:/etc/ssl -v /dev/shm:/dev/shm teddysun/xray
运行 Docker Nginx 服务
docker run -d --network host --name nginx --restart=always -v /etc/nginx/conf.d:/etc/nginx/conf.d -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -v /run/cloudreve.sock:/run/cloudreve.sock -v /etc/ssl:/etc/ssl -v /var/log/nginx:/var/log/nginx -v /dev/shm:/dev/shm nginx
现在可以在浏览器里打开 domain.com,会自动跳转到 https://domain.com,页面就是 Cloudreve 网盘,用刚才保存的用户名和密码登录,可以配置 Cloudreve 网盘。
安装非443端口的 Reality 协议
上面代码实现的是共用 443 端口的 Reality 协议,要求网站开启 TLS 1.3,但是可能会带来一个问题,如果有人在同一个IP段中扫描到了你的域名,那么你的网站域名会被“偷走”用于别人的 Reality 协议。如果担心的话,就不要在 Nginx 配置里开启 TLS 1.3,在不支持 TLS 1.3 的情况下,上面的代码就没法使用 Reality 协议了,于是我建议再安装一个非 443 端口的 Reality 服务。
nano /etc/xray/config-reality.json
# 添加以下代码
{
"log": {
"loglevel": "warning",
"error": "/var/log/xray/error.log",
"access": "/var/log/xray/access.log"
},
"inbounds": [
{
"Port": "2000",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "048e0bf2-dd56-11e9-aa37-5600024c1d6a", # 修改为自己的UUID
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"show": false,
"dest": "www.figma.com:443", # 可自行替换符合要求的域名
"xver": 0,
"serverNames": [
"www.figma.com" # 可自行替换符合要求的域名
],
"privateKey": "8GY5APNJPGftVueqa_pCH6ofL9ZlvxNPptZe7iTMdHc", # 修改为自己的privateKey
"shortIds": [
""
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}
# 运行服务
docker run -d --network host --name xray-r --restart=always -v /etc/xray/config-reality.json:/etc/xray/config.json -v /var/log/xray:/var/log/xray teddysun/xray
安装 Tuic v5 协议
使用 UDP,可以在任何系统平台实现双向的 BBR,网络切换时的会话平滑转移,例如在从 Wi-Fi 切换到移动数据时连接不会像 TCP 一样直接断开,支持多路复用,实际体验是非常丝滑。
直接上代码
docker pull monkeyray/tuic
mkdir /etc/tuic
nano /etc/tuic/config.json
# 添加以下代码
{
"server": "[::]:3000",
"users": {
"048e0bf2-dd56-11e9-aa37-5600024c1d6a": "password" # 自行修改UUID和密码
},
"certificate": "/etc/ssl/fullchain.cer",
"private_key": "/etc/ssl/domain.com.key",
"congestion_control": "bbr",
"alpn": ["h3", "spdy/3.1"],
"dual_stack": true,
"max_idle_time": "300s",
"max_external_packet_size": 1500,
"auth_timeout": "3s",
"task_negotiation_timeout": "3s",
"send_window": 16777216,
"receive_window": 8388608,
"udp_relay_ipv6": true,
"zero_rtt_handshake": false,
"gc_interval": "3s",
"gc_lifetime": "15s",
"log_level": "info"
}
#运行服务
docker run -d \
--network host \
--name tuic \
--restart=always \
-v /etc/tuic/config.json:/etc/tuic/config.json \
-v /etc/ssl:/etc/ssl \
monkeyray/tuic
安装 Hysteria 2 协议
也是基于 UDP,相比 Tuic,更加“暴力”,速度更快些,还支持自定义路由功能。
直接上代码
docker pull teddysun/hysteria
mkdir /etc/hysteria
nano /etc/hysteria/server.yaml
# 添加以下代码
listen: :4000
tls:
cert: /etc/ssl/fullchain.cer
key: /etc/ssl/domain.com.key
auth:
type: password
password: your_password #自行修改密码
resolver:
type: udp
udp:
addr: 8.8.8.8:53
timeout: 10s
tls:
addr: 1.1.1.1:853
timeout: 10s
https:
addr: 1.1.1.1:443
timeout: 10s
# 运行服务
docker run -d --network host --name hysteria --restart=always -v /etc/hysteria:/etc/hysteria -v /etc/ssl:/etc/ssl teddysun/hysteria
最后,运行 Docker Watchtower 服务 自动监测并更新软件
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock --restart unless-stopped containrrr/watchtower --cleanup xray-v xray-r tuic hysteria
因为在实际运行中发现 Nginx Docker 镜像自动更新时,停止 Nginx 容器后仍然占用 /dev/shm/ 里面几个 sock 文件(h1.sock/h2c.sock/web.sock),这样新的 Nginx 容器启动后会报错,导致打不开网站和 Xray,只能重启服务器或者删除 /dev/shm/ 下所有文件后重启 Nginx 。因此上面的命令行不自动更新 Nginx 。
客户端
Windows:
v2rayN https://github.com/2dust/v2rayN
Nekoray https://github.com/MatsuriDayo/nekoray (推荐)
IOS:
Shadowrocket https://apps.apple.com/sg/app/shadowrocket/id932747118
Android:
Nekoray https://github.com/MatsuriDayo/NekoBoxForAndroid
请问xray 没有在宿主机上生成/h2c.sock. 如何解决呢?从docker中copy出来吗?
我也发现宿主机上没有h1.sock和h2c.sock,所以docker运行时没挂载。
重新看了一般入站流程恍然大悟,原来vless+gRPC方式是通过路径进来而不通过SNI,加上SNI就报错。
但官方文档不是说gRPC不能通过路径来分流,要通过SNI域名吗?这样不是说反了?或者是我理解错误了
我有很长一段时间没更新了,很抱歉今天才回复你。
grpc是通过nginx反向代理实现的,所以客户端的sni必须填写主域名domian.com,当TLS验证域名进行握手时会通过这个sni进行握手,而客户端里的address可以填写domain.com,也可以填写v.domain.com或t.domain.com,只要address里的域名都能解析到服务器IP即可。
大致流程:TLS验证SNI域名 -> Nginx(匹配vdncrpc或tdngrpc)-> Xray
另外今天更新了xray的配置,增加了vless+vision和trojan+ws支持。
nano /usr/local/etc/xray/config.json这个路径错误
感谢指正,这条指令写错了,应该是 nano /etc/xray/config.json。
除了grpc 其余的都不通,nginx配置是不是有问题?
grpc可以用,看起来nginx配置应该是对的。
1.输入docker logs xray,确认xray配置文件是否正确?
2.停止nginx/xray服务,删除/dev/shm下所有文件,重新运行xray和nginx服务。
3.客户端配置vless 协议,地址填写v.domain.com;配置trojan协议,地址填写t.domain.com。
都可以用了 谢谢!
是我设置代理的时候网址没有填对,调整之后都可以用了
能用就好,目前本文配置里只有Vless Vision能避免tls in tls,所以推荐用vision,其它的能不用就不用,除非客户端不支持。
用了几天有时候会连不上不知道什么原因,删除了/dev/shm/文件夹里面的内容之后,再重启docker又能用
我也遇到过这个情况,不是很频繁,重启服务器或删除所有sock文件能恢复正常。
看了这几个sock文件,发现tgrpc.sock、trojan.sock、vgrpc.sock、vless.sock这四个sock文件的权限是0755,其他的sock文件权限是0666。
怀疑是nginx和xray创建的文件权限不一致导致,可以在/etc/xray/config.json配置里,找到 “listen”: “/dev/shm/xxx.sock”, 修改为 “listen”: “/dev/shm/xxx.sock,0666”,应该有四个地方需要修改。
重启服务后查看/dev/shm下的sock文件权限是否一致,再运行观察几日。
@admin,大佬您好,请教两个问题。
1、证书能用多久,到期了是否要续期?
2、是否先要在cloudflare增加子域名的设置?
1、证书由acme每三个月自动更新,无需人工干预。
2、二级域名需要在cloudflare提前设置好,添加cname,指向主域名。
请教,按照教程走完,nginx无法启动,报错如下:
Error response from daemon: Cannot restart container nginx: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting “/run/cloudreve.sock” to rootfs at “/run/cloudreve.sock”: mount /run/cloudreve.sock:/run/cloudreve.sock (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
如果先启动nginx后再启动cloudreve没有报错,但是访问网页520,nginx日志如下:
2023/11/28 09:14:14 [error] 29#29: *37 connect() to unix:/run/cloudreve.sock failed (111: Connection refused) while connecting to upstream, client: x.x.x.x, server: domain.com, request: “GET / HTTP/2.0”, upstream: “http://unix:/run/cloudreve.sock:/”, host: “domain.com”
求指导思路,感谢!
我明天在服务器上测试一遍,再回复你。
你好,又查看了一遍配置,发现是我的失误,/etc/xray/config-vision.json 这个文件里有多余的符号,导致xray服务启动失败。配置已修正,请你自己修改后再试一次。
感谢博主回复,xray配置文件里有多余符号我检查出来了,现在还是服务冲突,我自己慢慢看看,再次感谢!
上面的配置,前几天我在vps上完整执行过一遍,是可以正常运行的。若有疑问,可以联系TG(首页里有链接)。
这种是什么东西…listen:/dev/shm/tgrpc.sock 这是个自己创建的文件吗 我是linux渣渣哈哈,不都是写个端口,没见过这玩意…
配置使用了unix socket监听方式,因为不需要经过tcp网络协议栈,会比端口监听方式性能更好。
不过实际使用中两者没有明显差别。