vless配置gRPC+nginx前端加CDN

进几个月v2fly推出了gRPC协议,应粉丝要求开一篇博文。仅供大家参考。gRPC 使用 HTTP/2 协议传输搭配nginx,内置连接复用(mux)功能。(v4.36.0+)(请大家更新最新版本,不管是v2fly还是xray)。

##重要提示:
v2ray N最新下载
v2ray core最新下载
xray core最新下载
Finalshell SSH连接工具下载
Mobaxterm SSH连接工具下载

准备工作及环境

1.准备一台VPS服务器centos7系统(博主搭建使用GCP测试)自行选择服务器(记得开防火墙端口)
2.注册cloudflare等会需要解析用到gRPC(意思就是通过cloudflare接管域名解析权限,比如阿里云解析或者namesilo,为什么选择cloudflare因为专业解析(国外解析基本几秒内搞定)有些注册域名商后台解析要很长时间,然后我们需要用到cloudflare的gRPC功能)
3.准备一个域名(自己去买个域名推荐namesilo)

安装Xray服务

温馨提示:请选择最新官方推荐版本安装。(温馨提示:请看清楚我用的是centos7 64框架搭建不要等下遇到些问题找我,告诉我你用Debian系列或者其他系统,有些系统多少是有点点区别安装代码也多少会不一样)
更新下系统

1
yum update -y

Install & Upgrade Xray-core and .dat files (很老的版本:博客部分代码是用这个,不管v2fly还是xray更新迭代很快,我只是不想老改以前写好的博客所以自己备份了。但是我还是建议你们使用最新官方脚本)
老版本(备用)

1
bash <(curl -L https://raw.githubusercontent.com/ComeBey/xray/master/install-release.sh)

新版本(官方)推荐使用

1
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

仅更新(geoip和geosite)dat

老版本(备用)

1
bash <(curl -L https://raw.githubusercontent.com/ComeBey/xray/master/install-dat-release.sh)

新版本(官方)推荐使用

1
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install-geodata

关于acme.sh证书

生成证书

1.安装acem.sh证书生成工具,以下提供3种方法安装,选其中任意一种方法安装证书工具 (温馨提示:自动升级acme.sh在root下输入 acme.sh upgrade)

1
2
3
4
5
6
7
curl  https://get.acme.sh | sh   // 如提示安装失败 请先安装curl 输入 yum -y install curl

wget -O - https://get.acme.sh | sh //如提示安装失败请(先安装wget)输入 yum -y install wget 已经安装了忽略

git clone https://github.com/acmesh-official/acme.sh.git // 如提示安装失败 先安装git 已经安装了的忽略 输入 yum install git
cd ./acme.sh
./acme.sh --install

温馨提示:acme.sh官方已经更新了下播证书的命令请大家知晓,-m 后面写一个你自己的邮箱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~/.acme.sh/acme.sh --register-account -m 邮箱

```

通过以上代码安装acme.sh提示红色抱错 你可以按实际相关情况而定安装依赖 比如安装socat 或者 netcat
```bash
centos7 yum install openssl #安装依赖 openssl version 查看版本
centos7 yum install socat #通过80端口生成证书的依赖
centos7 yum install netcat

debian apt-get install openssl cron socat curl #通过80端口生成证书的依赖和openssl
debian apt-get -y install netcat

安装成功后执行 source ~/.bashrc 以确保脚本所设置的命令别名生效

2.生成证书 路径为/root/.acme.sh文件下 安装好后可自行查看
温馨提示:通过acme.sh生成证书有多种方法:
例如—自动DNS API集成 如:cloudflare DNS API 令牌 和 使用全局API密钥 acme.sh支持大多数dns生成证书
例如—使用DNS手动模式,等多种其他安装方法,如果你是个好学的人可Google

生成证书如下:本期视频只用指定端口 生成证书 **推荐使用443端口生成证书**(一般用单域名足以,毕竟是翻墙用无需搞那么多花里胡哨的多域,比如:主域baidu.com那么不建议使用www.baidu.com,因为是翻墙的前端web请自定义比如tw.baidu.com,前缀tw可以自定义请控制三个字符,主域baidu.com和二级www.baidu.com可以备用你懂的)

1.~/.acme.sh/acme.sh –register-account -m 邮箱
1.通过侦听80端口申请证书,如果80端口被占用,请使用443端口,请确保这些端口都打开了

1
~/.acme.sh/acme.sh --issue -d www.rootfw.tk --standalone

2.侦听443端口以颁发证书,请确保443端口开启

1
sudo ~/.acme.sh/acme.sh --issue -d www.rootfw.tk --alpn
输出的参考模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+ [root@host-10-0-0-2 ~]# sudo ~/.acme.sh/acme.sh --issue -d kr.rofw.com --alpn
+ [2021年 07月 07日 星期三 19:03:40 CST] Using CA: https://acme-v02.api.letsencrypt.org/directory
+ [2021年 07月 07日 星期三 19:03:40 CST] Standalone alpn mode.
+ [2021年 07月 07日 星期三 19:03:40 CST] Creating domain key
+ [2021年 07月 07日 星期三 19:03:41 CST] The domain key is here: /root/.acme.sh/kr.rofw.com/kr.rofw.com.key
+ [2021年 07月 07日 星期三 19:03:41 CST] Single domain='kr.rofw.com'
+ [2021年 07月 07日 星期三 19:03:41 CST] Getting domain auth token for each domain
+ [2021年 07月 07日 星期三 19:03:46 CST] Getting webroot for domain='kr.rofw.com'
+ [2021年 07月 07日 星期三 19:03:46 CST] Verifying: kr.rofw.com
+ [2021年 07月 07日 星期三 19:03:46 CST] Starting tls server.
+ [2021年 07月 07日 星期三 19:03:53 CST] Pending
+ [2021年 07月 07日 星期三 19:03:56 CST] Success
+ /root/.acme.sh/acme.sh: 行 3200: 16118 已终止 $__S_OPENSSL > /dev/null 2>&1
+ [2021年 07月 07日 星期三 19:03:57 CST] Verify finished, start to sign.
+ [2021年 07月 07日 星期三 19:03:57 CST] Lets finalize the order.
+ [2021年 07月 07日 星期三 19:03:57 CST] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/122770105/10908879336'
+ [2021年 07月 07日 星期三 19:03:59 CST] Downloading cert.
+ [2021年 07月 07日 星期三 19:03:59 CST] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/0484346242e6a3314e314c1d429d4653a82c'
+ [2021年 07月 07日 星期三 19:04:01 CST] Cert success.
+ -----BEGIN CERTIFICATE-----
+ MIIFHzCCBAegAwIBAgISBIQ0YkLmozFOMUwdQp1GU6gsMA0GCSqGSIb3DQEBCwUA
+ MDIxCzAJBgNVBAYTAwerwerwerwerwerwrwwMDUxMDAzNTdaMBcxFTATBgNVBAMT
+ DGtyLnJvb3Rmdy50azCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyZ
+ /02vJM1UFaKtAeyBNtzD8MFOLyoZ/5fMWM5FtMohyce/QG6CYnkrmm/kcpV8WPCw
+ xBpna0nz9UMhuYqX2TPmpjU5RHeYW1XxA58wc1PB+07UyBGkcpzq+iadp/XIj591
+ werwererwrwerwerwer==
+ -----END CERTIFICATE-----大家只需要记得红色cer和key路径即可
- [2021年 07月 07日 星期三 19:04:01 CST] Your cert is in /root/.acme.sh/kr.rofw.com/kr.rofw.com.cer
- [2021年 07月 07日 星期三 19:04:01 CST] Your cert key is in /root/.acme.sh/kr.rofw.com/kr.rofw.com.key
+ [2021年 07月 07日 星期三 19:04:01 CST] The intermediate CA cert is in /root/.acme.sh/kr.rofw.com/ca.cer
+ [2021年 07月 07日 星期三 19:04:01 CST] And the full chain certs is there: /root/.acme.sh/kr.rofw.com/fullchain.cer

证书和密钥安装到指定路径

1
/etc/v2ray (路径可自定义)
1
sudo ~/.acme.sh/acme.sh --installcert -d kr.rootfw.tk --fullchainpath /etc/v2ray/v2ray.cer --keypath /etc/v2ray/v2ray.key

编辑config.json

1
2
3
4
/usr/local/etc/xray #推荐通过Finalshell 或者Mobaxterm ssh链接服务器编辑
vim /usr/local/etc/v2ray #vim编辑 部分VPS需要安装依赖
vi /usr/local/etc/v2ray #vi编辑
nano /usr/local/etc/v2ray #nano编辑 部分VPS需要安装依赖

server config.json

在/usr/local/etc/xray下面编辑config.json配置文件(温馨提示:这里代码是官方项目墙友提交的模板,实际上我们可以改动里面的配置及部分功能。不懂的老铁手不要那么贱,错一个标点符号就不能正常运行,我已经解释的很清楚了。)
复制以下代码到server config.json

/usr/local/etc/xray/config.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{
"log": {
"loglevel": "warning"
},
"inbounds": [{
"port": 16889,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [{
"id": "2332424556457234556" // 填写你的 UUID
}],
"decryption": "none"
},
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "" // 填写你的 ServiceName
}
}
}],
"outbounds": [{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "blocked",
"protocol": "blackhole",
"settings": {}
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "blocked"
}]
}
}
//以上配置只是个模板,解释的很清楚,当然如果你想json更多功能,你完全可以参考v2ray和xray官方文档规范匹配相关code (不要忘记给 https://www.rootfw.com 点赞)

client config.json

client config.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"log": {
"loglevel": "warning" //基别
},
"inbounds": [{
"listen": "127.0.0.1", //监听
"port": "1080", //端口
"protocol": "socks", //socks
"settings": {
"auth": "noauth"
}
}],
"outbounds": [{
"protocol": "vless", //vlwss协议
"settings": {
"vnext": [{
"address": "your_server_ip", //域名
"port": 443, //端口
"users": [{
"id": "", //uuid
"encryption": "none"
}]
}]
},
"streamSettings": {
"network": "gun", //伪装类型
"security": "tls", //加密tls传输
"tlsSettings": {
"serverName": "your_domain", //域名
"alpn": [
"h2"
]
},
"grpcSettings": {
"serviceName": "rootfwService" //路径类似(path)
}
}
}]
}

v2ray调试

1
2
3
sudo systemctl restart xray
sudo systemctl status -l xray
sudo systemctl daemon-reload

设置v2ray开机启动

1
systemctl enable xray

nginx安装配置

nginx安装

1
2
3
4
5
6
7
8
9
#安装 EPEL 仓库(谷歌云忽略此步骤,如果你是使用其他品牌vps服务器如果没有安装EPEL请先安装)
sudo yum install epel-release

#安装 Nginx 【 yum remove nginx 如果想删除nginx卸载命令 】
sudo yum install nginx

sudo systemctl enable nginx.service #设置开机启动Nginx

sudo systemctl start nginx.service #启动Nginx服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
调试代码如下:
sudo systemctl start nginx.service //开启 Nginx
sudo systemctl stop nginx.service //停止 Nginx
sudo systemctl status -l nginx.service //查看 Nginx运行状态
sudo systemctl restart nginx.service //重新启动 Nginx
sudo systemctl disable nginx.service //取消开机启动 Nginx
sudo systemctl reload nginx.service //重载Nginx (如更改Nginx配置需要重新载入数据)
sudo systemctl enable nginx.service //开机启动


调试代码如下: Nginx调试也可以不需要代码后面添加 **.service** 请先**sudo systemctl start nginx.service**
和**sudo systemctl enable nginx.service** 然后在通过下面代码也可以调试.

sudo systemctl start nginx //开启 Nginx
sudo systemctl stop nginx //停止 Nginx
sudo systemctl status -l nginx //查看 Nginx运行状态
sudo systemctl restart nginx //重新启动 Nginx
sudo systemctl disable nginx //取消开机启动 Nginx
sudo systemctl reload nginx //重载Nginx (如更改Nginx配置需要重新载入数据)
sudo systemctl enable nginx //开机启动

通过以上方式安装的 Nginx,所有相关的配置文件都在 /etc/nginx/ 目录中
Nginx 的主配置文件是 /etc/nginx/nginx.conf
Nginx 日志文件(access.log 和 error.log )位于 /var/log/nginx/ 目录中。

如果在设置完成之后不能成功使用,可能是由于 SElinux 机制(如果你是 CentOS 7 的用户请特别留意SElinux 这一机制)阻止了 Nginx 转发向内网的数据
如果是这样的话,在V2Ray的日志里不会有访问信息,在 Nginx 的日志里会出现大量的 “Permission Denied” 字段
要解决这一问题需要在终端下键入以下命令:

1
setsebool -P httpd_can_network_connect 1    //非常重要debian忽略

验证 Nginx 是否成功启动,可以在浏览器中打开 http://YOUR_IP 注意:打开则显示centos网页 但是提示不安全网站没开启ssl加密https

nginx配置

/etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;


events {
worker_connections 1024;
}

http {
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 /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;

server {
listen 443 ssl http2; #监听443
server_name comebey;

index index.html;
root /usr/share/nginx/html; #网站模板路径只建议用html 当然也可以配置其他的比如php等

ssl_certificate /etc/v2ray/v2ray.pem; #证书注意后缀名,重要事情说三遍!重要事情说三遍!重要事情说三遍!
ssl_certificate_key /etc/v2ray/v2ray.key; #密钥
ssl_protocols TLSv1.2 TLSv1.3; #你懂得!
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5; #可以自己修改,不懂勿动

# 在 location 后填写 /你的 ServiceName和服务器json保持一致
location /rootfwService {
if ($content_type !~ "application/grpc") {
return 404;
} #timeout这些后面数值也可以改,不懂别手贱
client_max_body_size 0;
keepalive_time 10719064m;
keepalive_requests 42949672;
client_body_timeout 10719064m;
send_timeout 10719064m;
lingering_close always;
grpc_read_timeout 10719064m;
grpc_send_timeout 10719064m;
grpc_pass grpc://127.0.0.1:16889;
}
}
}

#温馨提示:这里配置是可以加很多功能的,大家好好研究下,也可以在博客评论区留言贴上你的问题,也可以加我们电报群交流!感谢xray和v2fly项目组所有成员。

cloudflare配置

  1. 注册并且登录cloudflare 解析域名非常简单这里就不详细讲解,自己Google很多教程。解析域名添加A记录指向☞你的服务器IP地址.

  2. 转到您在 CloudFlare 中的域。在“网络”选项卡中,打开 gRPC。

  3. 在“SSL/TLS”选项卡中,选择“源服务器”子选项卡。创建一个新证书并保存为 v2ray.pemv2ay.key


    卸载xray

    温馨提示:注意是新版本还是老版本在操作

新版本
1
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove
老版本
1
bash <(curl -L https://raw.githubusercontent.com/ComeBey/xray/master/install-release.sh) --remove

总结

1.本篇博客用的是cloudflare证书,手动的,你用acme.sh申请也可以。当然也可以用CF aip令牌下播证书。证书配置很多种不管你用acme.sh温馨提示:acme.sh申请证书方法官方更改了请参考 还是freessl,还是宝塔账号申请还是怎么滴,都可以申请。只需要记住证书格式。
2.密钥记得给权限不是无法使用

1
chmod 644 /etc/v2ray/v2ray.key

3.cloudflare加CDN或者不加你们自己拿主意。个人建议:个人翻墙真没必要搞那么多花里胡哨的东西,v2fly优化了那么多迭代更新包括xray,已经很不错了和安全了。只是有些老铁基础不行,瞎搞导致IP瓦特了。假设你要有内网线路IEPL或者iplc 搭建ssr是最理想的选择,怕锤子了,根本不需要捣腾这些。当然每个人情况不一样,请各位墙友自己斟酌吧!

重要提示:弄好域名解析后,先申请证书和密钥(如果你是通过acme.sh申请443或者80端口),cloudflare申请证书忽略此步骤。然后在安装nginx是最后安装。如果端口占用同一个,你先安装nginx后通过443端口在下播证书会失败。可以使用sudo systemctl stop nginx 停止nginx运行在申请证书。如果还是不成功就自己kill端口,自己Google方法kill端口

电报群讨论组

温馨提示:如果遇到问题电报群找我,把报错代码贴出发群里或在博客留言栏告知。我看到信息会第一时间回答你问题。

Nginx前端模板下载


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×