安装好带伪装 V2Ray 后,浏览器打开伪装域名时,通常会显示一个默认网页,例如静态页面、演示页面或其它预设页面。这个页面只是让域名访问时有正常网站内容,如果想长期使用,最好换成自己可控的网站页面。
很多用户做到这一步后,会想继续把默认页面换成自己的网站。比如放一个简单的静态网页、反向代理到已有站点,或者直接搭建一个 WordPress 博客。这样域名打开后就是一个正常网站页面,而 V2Ray 原来的 WebSocket 路径和服务端配置仍然保留。
下面以已经安装好带伪装 V2Ray 的服务器为基础,讲解如何把默认网页换成静态网站、反向代理页面或 WordPress 博客。整个过程不需要重新安装 V2Ray,也不需要重新申请域名证书,重点是修改 Nginx 的普通网页入口,并保留原来的 WebSocket 转发配置。
开始之前需要注意:不要随便删除 V2Ray 使用的 WebSocket location 配置,也不要重新运行会接管 80/443 端口的建站脚本。本文会分别介绍静态网站、反向代理网站和 WordPress 博客三种处理方式,新手建议先从静态网站开始,步骤少,后期维护也少。
如果你使用的不是 V2Ray,而是 Trojan-Go 伪装环境,配置文件和转发规则会有所不同,可以参考 Trojan-Go 伪装搭建网站教程,不要直接照搬本文的 V2Ray WebSocket 配置。
一、V2Ray 伪装搭建网站前的准备工作
开始修改之前,先确认服务端安装状态、域名对应的 Nginx 配置文件,以及后续可以恢复的备份文件。这里不要直接改配置,先把基础信息查清楚。
1. 确认服务端已经安装并运行
如果还没有安装带伪装 V2Ray,不建议直接从本文开始操作,应先根据系统选择对应教程:
- CentOS 用户参考:CentOS 系统带伪装 V2Ray 一键脚本安装教程
- Ubuntu 用户参考:Ubuntu 系统带伪装 V2Ray 一键脚本安装教程
如果已经安装完成,先检查 Nginx 和 V2Ray 服务状态:
systemctl status nginx --no-pager | sed -n '1,4p' systemctl status v2ray --no-pager | sed -n '1,4p'
正常情况下,两条命令的输出中都应该能看到 Active: active (running)。如果 Nginx 或 V2Ray 没有运行,先不要继续修改网站页面,应先回到前面的安装教程排查服务端配置。

通过 systemctl status 检查 Nginx 与 V2Ray 服务运行状态
本文主要处理伪装域名打开后的网页内容,如果你还想继续了解 V2Ray 伪装思路、路径设置和流量特征,可以再看 V2Ray 高级使用技巧之流量伪装。
2. 查找当前域名对应的 Nginx 配置文件
下面以 Ubuntu 22.04 + V2Ray WS+TLS 环境为例。安装完成后,Nginx 配置文件可能位于:
/etc/nginx/conf/conf.d/v2ray.conf
不同一键脚本生成的 Nginx 配置路径可能不同。如果你的配置文件不在这个位置,可以用下面命令查找当前域名对应的 Nginx 配置:
grep -Ril "server_name.*你的域名" /etc/nginx 2>/dev/null
例如你的域名是 your-domain.com,可以执行:
grep -Ril "server_name.*your-domain.com" /etc/nginx 2>/dev/null
3. 修改前备份 V2Ray 伪装网站配置
查到配置文件后,先备份再修改。本文后续以 /etc/nginx/conf/conf.d/v2ray.conf 为例,如果你的配置文件路径不同,把命令中的路径替换成自己的实际路径即可:
cp /etc/nginx/conf/conf.d/v2ray.conf /etc/nginx/conf/conf.d/v2ray.conf.bak.before-648-$(date +%F-%H%M)
如果后面修改出错,可以用备份文件恢复。V2Ray 伪装网站和 V2Ray WebSocket 转发都在 Nginx 配置里,修改前备份能避免网页和节点同时受影响。
二、检查 V2Ray 伪装域名解析是否正确
V2Ray 伪装搭建网站之前,伪装域名必须已经解析到当前 VPS。常见主机记录可以使用 @、www、v2ray、blog 等。
添加 A 记录后,可以在 SSH 中检查解析结果:
domain="your-domain.com" echo "Domain A record:" dig +short A "$domain" echo "Server IPv4:" curl -4 ip.sb echo "Domain AAAA record:" dig +short AAAA "$domain"
执行前把 your-domain.com 换成自己的伪装域名。正常结果应该是:
Domain A record输出当前 VPS IPv4;Server IPv4输出同一个 IPv4;Domain AAAA record没有输出,或者确认 IPv6 也指向当前服务器。
如果你使用 Cloudflare,建议先把代理状态改成“仅 DNS”,等证书申请和 V2Ray 伪装网站都正常后,再根据实际情况决定是否开启代理。

检查伪装域名 A 记录是否指向当前 VPS IPv4
三、V2Ray 伪装静态网站搭建方法
静态网站是新手优先选择的方案。它不需要 PHP、数据库、后台和插件,只要把默认伪装页面替换成自己的 HTML 页面,浏览器打开域名时就能看到正常网页。
这一节按“查看配置、备份目录、写入页面、测试重载、浏览器验证”的顺序操作。只要你的默认网站目录和示例不同,把命令里的目录替换成自己在 Nginx 配置中看到的 root 目录即可。
1. 查看默认网站目录和 WebSocket 转发路径
先查看当前域名对应的 Nginx 配置:
sed -n '1,32p' /etc/nginx/conf/conf.d/v2ray.conf
在配置中,普通网站入口一般会看到类似内容:
server_name your-domain.com; index index.html index.htm; root /home/wwwroot/3DCEList;
其中 root 后面的路径就是默认网站目录。浏览器直接打开伪装域名时,显示的网页文件就来自这个目录。
同时还会看到一段 V2Ray WebSocket 转发配置,例如:
location /你的WebSocket路径/
{
proxy_pass http://127.0.0.1:本地端口;
}
这两部分要分清楚:root 后面的目录是普通网页目录,可以用来放静态页面;location /你的WebSocket路径/ 是 V2Ray 使用的转发路径,不要删除,不要改成本节的静态网站内容。

查看 Nginx 配置中的默认网站目录和 V2Ray WebSocket 转发路径
2. 备份默认伪装网站目录
确认默认网站目录后,先备份这个目录。
下面以 /home/wwwroot/3DCEList 为例,如果你的 root 目录不是这个路径,把命令中的目录替换成自己的实际目录。
cp -a /home/wwwroot/3DCEList /home/wwwroot/3DCEList.bak.before-static-$(date +%F-%H%M)
这条 cp 命令执行成功时通常不会输出提示,直接回到命令行是正常现象。
备份完成后,可以用下面命令查看当前目录和备份目录:
ls -ld /home/wwwroot/3DCEList*
如果能看到 /home/wwwroot/3DCEList 和带有 bak.before-static 的备份目录,说明备份已经完成。这个步骤不会修改 V2Ray 配置,也不会重启 Nginx。

查看默认伪装网站目录和备份目录是否存在
3. 写入静态网站测试页面
接下来写入一个简单的 HTML 测试页面,用来确认默认页面是否已经替换成功。后续如果要换成正式网站,只需要把自己的 HTML、CSS、图片等文件上传到同一个目录即可。
下面命令会覆盖 /home/wwwroot/3DCEList/index.html,所以前面要先备份目录:
cat > /home/wwwroot/3DCEList/index.html <<'EOF'
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>网站页面测试</title>
<style>
body {
font-family: Arial, "Microsoft YaHei", sans-serif;
background: #f5f7fb;
color: #222;
max-width: 760px;
margin: 80px auto;
line-height: 1.8;
}
.box {
background: #fff;
padding: 36px;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,.08);
}
h1 {
margin-top: 0;
color: #1f4e79;
}
</style>
</head>
<body>
<div class="box">
<h1>网站页面已成功替换</h1>
<p>这是当前域名的临时测试页面。</p>
<p>如果浏览器可以正常打开这个页面,说明默认网站目录已经替换成功。</p>
</div>
</body>
</html>
EOF
这条命令执行成功时通常不会输出提示,直接回到命令行即可。如果你的默认网站目录不是 /home/wwwroot/3DCEList,把上面命令中的路径替换为自己的 root 目录。
4. 测试并重载 Nginx 配置
如果只是替换 index.html 文件,通常不需要重载 Nginx,刷新浏览器就能看到新页面。不过为了确认当前 Nginx 配置仍然正常,建议测试一次配置并重载服务:
/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
执行后如果看到 syntax is ok 和 test is successful,说明 Nginx 配置测试通过。部分环境可能同时出现 ssl_stapling ignored 之类的警告,只要配置测试通过,一般不影响本次静态页面替换。

测试 Nginx 配置并确认静态网站切换后配置可正常加载
5. 浏览器检查静态网站页面
最后在浏览器中打开:
https://你的域名
如果页面中显示 网站页面已成功替换,说明默认页面已经被替换为自定义静态网站测试页面。

浏览器打开伪装域名后显示静态网站测试页面
静态网站方案的维护成本低。后续如果要换成正式页面,只需要把网站文件上传到 /home/wwwroot/3DCEList 目录;如果你的 Nginx 配置中 root 指向其它目录,就上传到自己实际的 root 目录。
四、V2Ray 伪装反向代理网站搭建方法
反向代理网站是把伪装域名的普通网页请求转发到另一个站点。用户访问 https://你的域名 时,看到的是目标站点页面;而 V2Ray 的 WebSocket 路径仍然保留在原来的 location 中。
这个方案适合临时展示页面,不适合长期当正式博客使用。很多大型网站会有防盗链、跳转、跨域和资源路径限制,反向代理后可能出现样式错乱、图片加载失败或跳转异常。
因此,建议反代自己可控的网站,或者反代允许公开访问的简单页面。
下面以 [www.example.com](http://www.example.com) 作为反向代理测试目标。这个页面结构简单,适合用来确认反向代理配置是否生效。实际使用时,可以把 [www.example.com](http://www.example.com) 换成自己可控的目标域名。
1. 备份当前 Nginx 配置文件
反向代理需要修改 Nginx 配置,操作前先备份配置文件。下面以 /etc/nginx/conf/conf.d/v2ray.conf 为例,如果你的配置文件路径不同,把命令中的路径替换为自己的实际路径:
cp /etc/nginx/conf/conf.d/v2ray.conf /etc/nginx/conf/conf.d/v2ray.conf.bak.before-proxy-$(date +%F-%H%M)
这条 cp 命令执行成功时通常不会输出提示,直接回到命令行是正常现象。可以用下面命令查看备份文件是否生成:
ls -l /etc/nginx/conf/conf.d/v2ray.conf*
2. 自动添加反向代理 location 配置
不建议新手直接使用 nano 或 vi 手动编辑大段 Nginx 配置。手动编辑时,如果位置放错、少写分号、括号不成对,都会导致 Nginx 配置测试失败。下面用一段命令自动在 V2Ray WebSocket location 前面插入普通网页入口 location /。
执行下面命令:
python3 - <<'PY'
from pathlib import Path
conf = Path("/etc/nginx/conf/conf.d/v2ray.conf")
text = conf.read_text()
proxy_block = """ location / {
proxy_pass https://www.example.com;
proxy_ssl_server_name on;
proxy_set_header Host www.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
"""
if "proxy_pass https://www.example.com;" in text:
print("反向代理配置已存在,不重复添加。")
elif "location / {" in text:
print("检测到已有 location / 配置,请先检查配置文件,避免重复添加。")
else:
marker = "\n\tlocation /"
if marker not in text:
marker = "\n location /"
if marker not in text:
raise SystemExit("没有找到 V2Ray WebSocket location,停止修改。")
text = text.replace(marker, "\n" + proxy_block + marker.lstrip("\n"), 1)
conf.write_text(text)
print("反向代理 location / 已添加。")
PY
这段命令的作用是:如果配置文件里还没有 location /,就在原来的 V2Ray WebSocket location 前面插入一个普通网页入口。
这样浏览器直接访问域名时,会显示 [www.example.com](http://www.example.com) 的页面;V2Ray 客户端访问原来的 WebSocket 路径时,仍然走原来的转发配置。
如果你的配置文件路径不是 /etc/nginx/conf/conf.d/v2ray.conf,需要先把命令里的路径改成自己的实际路径再执行。
3. 检查反向代理配置是否写入
执行下面命令查看新加入的 location / 配置:
grep -n "location / {" -A8 /etc/nginx/conf/conf.d/v2ray.conf
正常情况下会看到类似内容:
location / {
proxy_pass https://www.example.com;
proxy_ssl_server_name on;
proxy_set_header Host www.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
如果能看到 proxy_pass https://www.example.com;,说明普通网页入口已经切换为反向代理配置。

检查 Nginx 中是否已经添加反向代理 location 配置
4. 测试并重载 Nginx 配置
改完后先测试 Nginx 配置:
/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
如果输出中看到 syntax is ok 和 test is successful,说明配置没有语法错误。然后重载 Nginx:
systemctl reload nginx
也可以合并执行:
/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
如果看到 ssl_stapling ignored 之类的警告,但同时出现 syntax is ok 和 test is successful,一般不影响本次反向代理配置。
5. 浏览器检查反向代理页面
浏览器打开:
https://你的域名
如果页面显示 Example Domain,说明反向代理网站已经生效。

浏览器打开伪装域名后显示反向代理目标页面
如果页面显示不完整,通常是目标网站资源路径、跳转规则或防盗链导致的,不一定是 Nginx 配置错误。反向代理只适合临时展示页面,不建议把大型商业网站当成长期反代目标。
6. 恢复反向代理修改前的配置
如果后续要恢复到前面的静态网站配置,可以使用本节开头备份的配置文件还原。先查看反向代理配置前生成的备份文件名:
ls -l /etc/nginx/conf/conf.d/v2ray.conf.bak.before-proxy-*
然后把对应备份文件复制回原配置文件。下面命令中的 备份文件名 要替换成你服务器上实际存在的备份文件名:
cp /etc/nginx/conf/conf.d/备份文件名 /etc/nginx/conf/conf.d/v2ray.conf /etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
五、V2Ray 伪装 WordPress 博客搭建方法
如果你不只是想放一个简单页面,而是想真正搭建博客、发布文章、安装主题和插件,可以选择 WordPress 方案。
需要注意的是,WordPress 不是 V2Ray 的一部分。V2Ray 负责节点服务和 WebSocket 转发,Nginx 负责 HTTPS 网站入口,WordPress 则需要额外安装 PHP-FPM、MariaDB 或 MySQL,并把 WordPress 程序接入当前域名的 Nginx 配置。
不建议在已经运行 V2Ray + Nginx + TLS 的服务器上直接运行来路不明的 WordPress 一键安装脚本。这类脚本可能会接管 80/443 端口、重写 Nginx 配置,导致原来的伪装网站或 V2Ray WebSocket 路径受到影响。
下面的做法是在现有 Nginx 配置基础上安装 WordPress 所需组件。
1. 安装 PHP-FPM、MariaDB 和 WordPress 所需扩展
以下命令适用于 Ubuntu 22.04 环境:
apt update apt install -y mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip unzip wget
安装完成后,检查 PHP-FPM socket 路径:
find /run/php -name "php*-fpm.sock"
常见输出类似:
/run/php/php8.1-fpm.sock
如果输出多个 socket,优先使用带具体 PHP 版本号的路径,例如 /run/php/php8.1-fpm.sock。
这个路径后面要写进 Nginx 配置。不同 Ubuntu 版本、PHP 版本输出可能不同,后面命令会自动读取这个路径,不需要手动改 PHP 版本号。

查看 PHP-FPM socket 文件路径用于配置 WordPress
2. 创建 WordPress 数据库和数据库用户
安装好 MariaDB 后,需要先为 WordPress 创建数据库、数据库用户和数据库密码。下面先生成一个随机数据库密码:
wp_db_pass=$(openssl rand -base64 24) echo "$wp_db_pass"
执行 echo "$wp_db_pass" 后,终端输出的整行随机字符就是数据库密码。例如示例中的 0w/kWNy/YbGLXurFynSAjfuWDufBTN/q 就是一整条密码。
复制时要复制完整一行,包括其中可能出现的斜杠、大小写字母和数字,不要只复制其中一部分。后面创建数据库和配置 WordPress 时都会用到这串密码。
接着执行下面命令,创建 WordPress 数据库和数据库用户:
mysql -u root <<MYSQL
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '${wp_db_pass}';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
MYSQL
这条命令执行成功时通常不会输出提示,直接回到命令行是正常现象。如果没有看到报错,说明数据库、数据库用户和授权已经创建完成。
为了确认数据库和用户是否已经创建成功,可以继续执行下面命令检查:
mysql -u root -e "SHOW DATABASES LIKE 'wordpress'; SELECT User,Host FROM mysql.user WHERE User='wpuser';"
如果输出结果中能看到 wordpress 数据库,以及 wpuser、localhost,说明 WordPress 需要的数据库和数据库用户已经准备好。

检查 MariaDB 中是否已经创建 wordpress 数据库和 wpuser 用户
后面 WordPress 会使用下面这些信息:
- 数据库名:
wordpress - 数据库用户:
wpuser - 数据库密码:前面
echo "$wp_db_pass"输出的完整随机字符串 - 数据库地址:
localhost
3. 下载 WordPress 程序并生成 wp-config.php
创建好数据库后,接下来下载 WordPress 程序,并把数据库信息写入 wp-config.php 配置文件。
下面的操作会用到前面生成的数据库密码,如果中途关闭过 SSH 或重新登录过服务器,需要重新设置一次域名、网站目录和数据库密码。
先设置自己的域名和网站目录。执行前把 your-domain.com 换成自己的伪装域名:
domain="your-domain.com"
webroot="/var/www/${domain}"
mkdir -p "$webroot"
这条 mkdir -p 命令执行成功时通常不会输出提示,直接回到命令行是正常现象。
接着下载并解压 WordPress:
cd /tmp wget -O latest.zip https://wordpress.org/latest.zip unzip -q latest.zip cp -a wordpress/. "$webroot/"
其中 wget 会显示下载进度,unzip -q 和 cp -a 执行成功时通常不会输出提示。可以继续执行下面命令,检查 WordPress 文件是否已经复制到网站目录:
ls -l "$webroot" | head
如果能看到 index.php、wp-admin、wp-content、wp-includes 等文件和目录,说明 WordPress 程序已经放到网站目录。这一步只是确认 WordPress 文件是否已经复制成功,不会修改 Nginx 配置。
然后设置文件权限:
chown -R www-data:www-data "$webroot"
find "$webroot" -type d -exec chmod 755 {} \;
find "$webroot" -type f -exec chmod 644 {} \;
这几条权限命令执行成功时通常不会输出提示,直接回到命令行即可。
接着生成 WordPress 配置文件:
cd "$webroot" cp wp-config-sample.php wp-config.php
如果 cp 执行后没有输出,通常就是复制成功。此时网站目录中会多出一个 wp-config.php 文件,后面 WordPress 会从这个文件读取数据库信息。
接下来把数据库信息写入 wp-config.php。执行前先重新设置一次域名、网站目录和数据库密码,避免 SSH 断开或重新登录后变量为空。
下面的 your-domain.com 要换成自己的伪装域名,这里填数据库密码 要换成前面 echo "$wp_db_pass" 输出的完整随机字符串:
domain="your-domain.com"
webroot="/var/www/${domain}"
wp_db_pass='这里填数据库密码'
注意,数据库密码要填写完整一整行。如果密码中包含斜杠 /、大小写字母或数字,都属于密码内容,不要只复制其中一部分。
然后执行下面命令写入数据库名、数据库用户和数据库密码。
这里不要直接用简单的 sed 替换数据库密码,因为随机密码里可能包含斜杠 / 等特殊字符,容易导致替换失败:
WEBROOT="$webroot" WP_DB_PASS="$wp_db_pass" python3 - <<'PY'
from pathlib import Path
import os
import re
wp_config = Path(os.environ["WEBROOT"]) / "wp-config.php"
password = os.environ["WP_DB_PASS"]
if not wp_config.exists():
raise SystemExit(f"没有找到 wp-config.php:{wp_config}")
text = wp_config.read_text()
text = text.replace("database_name_here", "wordpress")
text = text.replace("username_here", "wpuser")
text = re.sub(
r"define\(\s*'DB_PASSWORD'\s*,\s*'[^']*'\s*\);",
f"define( 'DB_PASSWORD', '{password}' );",
text
)
wp_config.write_text(text)
print("wp-config.php 数据库信息已写入。")
PY
如果看到 wp-config.php 数据库信息已写入。,说明数据库信息已经写进配置文件。
写入完成后,可以执行下面命令检查数据库配置是否已经写入:
grep -n "DB_NAME\|DB_USER\|DB_PASSWORD\|DB_HOST" "$webroot/wp-config.php"
正常情况下可以看到 DB_NAME 为 wordpress,DB_USER 为 wpuser,DB_HOST 为 localhost,并且 DB_PASSWORD 后面已经不是 password_here,说明数据库密码已经写入配置文件。

检查 wp-config.php 中的数据库名、数据库用户和数据库主机配置
4. 备份当前 Nginx 配置文件
WordPress 程序和 wp-config.php 配置文件准备好后,接下来要修改 Nginx,把当前伪装域名的普通网页入口接入 WordPress。修改 Nginx 配置前,先备份当前配置文件。
下面以 /etc/nginx/conf/conf.d/v2ray.conf 为例。如果你的 Nginx 配置文件路径不同,把命令中的路径替换为自己的实际路径:
cp /etc/nginx/conf/conf.d/v2ray.conf /etc/nginx/conf/conf.d/v2ray.conf.bak.before-wordpress-$(date +%F-%H%M)
这条 cp 命令执行成功时通常不会输出提示,直接回到命令行是正常现象。可以用下面命令查看备份文件是否生成:
ls -l /etc/nginx/conf/conf.d/v2ray.conf*
如果能看到原配置文件和带有 bak.before-wordpress 的备份文件,说明 Nginx 配置已经备份完成。
5. 自动修改 Nginx 配置接入 WordPress
这一步会把伪装域名的普通网页入口从默认静态目录切换到 WordPress 目录,并加入 WordPress 伪静态和 PHP 解析规则。原来的 V2Ray WebSocket location 会继续保留,不要删除,也不要修改 WebSocket 路径和本地转发端口。
执行前先确认两件事:
- 前面已经生成 WordPress 网站目录,例如
/var/www/your-domain.com; - 前面已经备份 Nginx 配置文件,后面出错可以恢复。
下面命令中的 your-domain.com 要换成自己的伪装域名。如果你的 Nginx 配置文件不是 /etc/nginx/conf/conf.d/v2ray.conf,也要把命令里的配置文件路径换成自己的实际路径。
先设置域名、Nginx 配置文件路径、WordPress 网站目录和 PHP-FPM socket:
domain="your-domain.com"
conf="/etc/nginx/conf/conf.d/v2ray.conf"
webroot="/var/www/${domain}"
php_sock=$(find /run/php -name 'php*-fpm.sock' | grep -E '/php[0-9.]+-fpm\.sock$' | sort | head -n 1)
if [ -z "$php_sock" ]; then
php_sock=$(find /run/php -name 'php*-fpm.sock' | head -n 1)
fi
echo "WordPress 目录:$webroot"
echo "PHP-FPM socket:$php_sock"
如果能看到 WordPress 目录和 PHP-FPM socket 路径,再继续写入自动修改脚本:
cat > /tmp/v2ray-wordpress-nginx.py <<'PY'
from pathlib import Path
import os
import re
conf = Path(os.environ["CONF"])
webroot = os.environ["WEBROOT"]
php_sock = os.environ["PHP_SOCK"]
if not conf.exists():
raise SystemExit(f"没有找到 Nginx 配置文件:{conf}")
if not php_sock:
raise SystemExit("没有找到 PHP-FPM socket,请先确认 php-fpm 是否安装成功。")
text = conf.read_text()
text, root_count = re.subn(
r"root\s+[^;]+;",
f"root {webroot};",
text,
count=1
)
if root_count == 0:
raise SystemExit("没有找到 root 网站目录配置,停止修改。")
if "index index.php index.html index.htm;" not in text:
text = re.sub(
r"index\s+index\.html\s+index\.htm;",
"index index.php index.html index.htm;",
text,
count=1
)
wp_block = f""" location / {{
try_files $uri $uri/ /index.php?$args;
}}
location ~ \\.php$ {{
include /etc/nginx/conf/fastcgi.conf;
fastcgi_pass unix:{php_sock};
}}
"""
if "try_files $uri $uri/ /index.php?$args;" in text:
print("WordPress location 配置已存在,不重复添加。")
else:
match = re.search(r"\n[ \t]*location /[^ \n{]+/\s*\n[ \t]*\{", text)
if not match:
raise SystemExit("没有找到 V2Ray WebSocket location,停止修改。")
insert_at = match.start() + 1
text = text[:insert_at] + wp_block + text[insert_at:]
conf.write_text(text)
print("WordPress Nginx 配置已写入。")
print(f"WordPress 目录:{webroot}")
print(f"PHP-FPM socket:{php_sock}")
PY
然后运行这个脚本:
CONF="$conf" WEBROOT="$webroot" PHP_SOCK="$php_sock" python3 /tmp/v2ray-wordpress-nginx.py
执行成功后,终端会输出类似下面的信息:
WordPress Nginx 配置已写入。 WordPress 目录:/var/www/your-domain.com PHP-FPM socket:/run/php/php8.1-fpm.sock
如果看到 WordPress Nginx 配置已写入。,说明 WordPress 目录、PHP-FPM socket 和 Nginx 配置已经完成写入。接下来继续检查 Nginx 配置内容是否正确。
6. 检查 WordPress 的 Nginx 配置是否写入
自动修改完成后,需要检查 Nginx 配置中是否已经写入 WordPress 网站目录、首页优先级、伪静态规则和 PHP-FPM 解析配置。执行下面命令:
grep -n "root /var/www\|index index.php\|try_files\|fastcgi_pass" /etc/nginx/conf/conf.d/v2ray.conf
正常情况下应该能看到类似下面的输出:
9: index index.php index.html index.htm; 10: root /var/www/your-domain.com; 20: try_files $uri $uri/ /index.php?$args; 25: fastcgi_pass unix:/run/php/php8.1-fpm.sock;
这几行分别表示:
index index.php index.html index.htm;:Nginx 会优先识别 WordPress 的index.php;root /var/www/your-domain.com;:伪装域名的普通网页入口已经切换到 WordPress 网站目录;try_files $uri $uri/ /index.php?$args;:WordPress 固定链接所需的伪静态规则已经写入;fastcgi_pass unix:/run/php/php8.1-fpm.sock;:PHP 请求会交给 PHP-FPM 处理。

检查 Nginx 中的 WordPress root、伪静态和 PHP-FPM 配置
还需要确认原来的 V2Ray WebSocket location 仍然存在。执行下面命令:
grep -n "proxy_pass http://127.0.0.1" /etc/nginx/conf/conf.d/v2ray.conf
如果能看到 proxy_pass [http://127.0.0.1:本地端口](http://127.0.0.1:本地端口);,说明原来的 V2Ray WebSocket 转发配置仍然保留。不要删除这段配置,也不要修改 WebSocket 路径和本地转发端口。

检查接入 WordPress 后 V2Ray WebSocket 本地转发配置仍然存在
7. 测试并重载 Nginx 配置
WordPress 相关配置写入完成后,先测试 Nginx 配置,再重载服务,让新的 WordPress 网站入口生效:
/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
如果输出中看到 syntax is ok 和 test is successful,说明 Nginx 配置没有语法错误,并且已经执行重载。
部分环境可能会出现 ssl_stapling ignored 之类的警告,只要同时看到 syntax is ok 和 test is successful,一般不影响 WordPress 访问。
需要注意,单独执行 nginx -t 只是测试配置,不会让新配置生效。如果只测试没有重载,浏览器打开域名时可能还是旧页面。确认测试通过后,必须执行 systemctl reload nginx,或者直接使用上面的合并命令。
8. 浏览器进入 WordPress 安装向导
Nginx 重载完成后,在浏览器中打开:
https://你的域名
正常情况下会进入 WordPress 安装向导。第一次打开时,WordPress 可能会先显示语言选择页面,默认选中的通常是 English (United States)。
中文站点可以向下拖动语言列表,找到并选择 简体中文,然后点击 Continue 继续。

在 WordPress 安装向导中向下拉动语言列表并选择简体中文
选择 简体中文 后,页面会进入 WordPress 安装信息填写界面。这里需要填写站点标题、管理员用户名、管理员密码和邮箱。
测试环境可以填写临时站点名称,例如 测试站点;管理员用户名不要使用 admin,可以改成 wpadmin 这类不容易被猜到的名称。
这里的密码是 WordPress 后台管理员密码,用来登录 /wp-admin 后台,不是前面创建 MariaDB 时使用的数据库密码。
可以使用 WordPress 自动生成的强密码,也可以自己设置一个强密码,填写后要复制保存。邮箱填写自己的常用邮箱即可;如果只是测试安装,也可以临时填写格式正确的测试邮箱。
如果这是测试环境,可以勾选“建议搜索引擎不索引本站点”;如果后续要作为正式网站运营,并希望搜索引擎收录,就不要勾选这一项。填写完成后点击“安装 WordPress”。

填写 WordPress 站点标题、管理员用户名、密码和邮箱
填写站点信息并点击安装后,如果看到“成功!WordPress 安装完成。”,说明 WordPress 初始化安装已经完成。页面中会显示刚才设置的管理员用户名,后面登录 WordPress 后台时会用到。

WordPress 安装完成后显示成功提示和管理员用户名
接下来点击“登录”,会进入 WordPress 后台登录页面。这里填写的是 WordPress 后台管理员账号,不是数据库账号。
用户名填写刚才设置的管理员用户名,例如 wpadmin;密码填写安装时设置或自动生成的 WordPress 后台管理员密码。

使用管理员用户名和密码登录 WordPress 后台
登录成功后会进入 WordPress 后台仪表盘。如果能看到仪表盘页面,说明 WordPress 程序已经可以正常运行,数据库连接也没有问题,管理员账号可以正常登录管理网站。

登录 WordPress 后台后进入仪表盘页面
到这里,V2Ray 原来的 WebSocket 转发配置仍然保留,伪装域名的普通网页入口已经切换为 WordPress 博客。如果后续需要查看前台效果,可以点击后台左上角的站点名称,或者直接在浏览器中打开 https://你的域名/。
9. WordPress 文章页 404 的处理方法
如果 WordPress 安装完成后,首页可以打开,但文章页、分类页或固定链接页面出现 404,先检查 Nginx 配置中是否已经包含下面这段规则:
location / {
try_files $uri $uri/ /index.php?$args;
}
本文前面自动写入 Nginx 配置时已经加入这段规则。正常情况下,只需要进入 WordPress 后台,打开“设置 – 固定链接”,选择需要的链接格式后保存一次即可。
如果仍然打不开文章页,可以重新测试并重载 Nginx:
/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
10. 恢复接入 WordPress 前的 Nginx 配置
如果接入 WordPress 后页面异常,或者想恢复到前面的静态网站配置,可以使用本节前面备份的 Nginx 配置文件还原。
先查看备份文件名:
ls -l /etc/nginx/conf/conf.d/v2ray.conf.bak.before-wordpress-*
然后把对应备份文件复制回原配置文件。下面命令中的 备份时间 需要换成你服务器上的实际文件名:
cp /etc/nginx/conf/conf.d/v2ray.conf.bak.before-wordpress-备份时间 /etc/nginx/conf/conf.d/v2ray.conf /etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
恢复完成后,浏览器重新打开伪装域名,页面会回到接入 WordPress 前的状态。
六、为什么不建议直接运行 WordPress 一键脚本
有些 WordPress 一键脚本会自动安装 Nginx、PHP、数据库或 Docker,并尝试接管 80/443 端口。对于已经安装带伪装 V2Ray 的服务器,这种做法容易影响原来的 Nginx 配置和 WebSocket 转发路径。
常见问题主要有三个:
- 脚本可能重写 Nginx 配置,导致原来的 V2Ray WebSocket
location丢失; - 脚本可能占用或重建 80/443 网站入口,影响现有 HTTPS 站点;
- 脚本只负责安装 WordPress,不会判断当前服务器是否已经运行 V2Ray WS+TLS 伪装环境。
所以在本文这种环境中,不建议再直接运行 WordPress 一键安装脚本。更合适的做法是在现有 Nginx 配置基础上接入 PHP-FPM、MariaDB 和 WordPress,同时保留原来的 V2Ray WebSocket 转发配置。
七、V2Ray 伪装搭建网站常见问题
前面已经分别介绍了静态网站、反向代理网站和 WordPress 博客三种处理方式。实际操作时,不同一键脚本生成的 Nginx 路径、网站目录和配置格式可能不完全一样,下面整理几个新手容易遇到的问题,方便排查。
1. 找不到 v2ray.conf 配置文件怎么办?
不同脚本生成的配置路径不同,先用下面命令查找:
grep -Ril "server_name.*你的域名" /etc/nginx 2>/dev/null
如果仍然找不到,说明域名可能没有写进 Nginx 配置,或者当前环境不是通过 V2Ray WS+TLS 脚本安装的。
2. 修改后 Nginx 重载失败怎么办?
修改 Nginx 后,如果页面打不开,或者重载 Nginx 失败,先测试配置文件:
/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
如果输出中提示错误,根据行号回到配置文件检查括号、分号、路径和 location 是否写错。常见问题包括少写 ;、多写或少写 {}、location 放错位置、root 目录写错、PHP-FPM socket 路径不对等。
如果一时找不到错误,可以先查看当前已有的备份文件:
ls -l /etc/nginx/conf/conf.d/v2ray.conf.bak.*
然后选择修改前对应阶段的备份文件还原。下面命令中的 备份文件名 要替换成你服务器上实际存在的备份文件名:
cp /etc/nginx/conf/conf.d/备份文件名 /etc/nginx/conf/conf.d/v2ray.conf /etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx
例如,如果是接入 WordPress 后出错,可以优先找带有 bak.before-wordpress 的备份文件;如果是反向代理配置出错,可以优先找带有 bak.before-proxy 的备份文件。测试通过并重载 Nginx 后,再重新打开伪装域名检查页面是否恢复。
3. 静态网站、反向代理和 WordPress 怎么选?
只想让域名打开后显示正常网页,选静态网站。它不需要数据库和 PHP,后期维护也少。
只是临时展示一个外部页面,可以用反向代理,但不建议反代大型商业网站,页面样式和跳转容易出问题。
需要后台、文章发布、主题插件和长期维护,再选择 WordPress。WordPress 功能多,但要维护 PHP、数据库、插件和安全更新。
4. 修改普通网站页面会不会影响 V2Ray 节点?
只要不修改 V2Ray 的 WebSocket location、本地转发端口和服务端配置,一般不会影响节点连接。本文所有方案都只处理普通网页入口,V2Ray 使用的路径应保留原样。
如果你后续还需要给不同用户分配不同 UUID,或者想了解同端口、多端口的 V2Ray 用户配置,可以参考 V2Ray 多用户配置教程:同端口不同 UUID 与多端口配置教程。这类配置属于 V2Ray 服务端用户管理,不属于本文的网页伪装入口修改。
八、总结
这篇文章适合已经安装好带伪装 V2Ray、并且想把默认伪装页面换成网站的用户。操作重点不是重新安装 V2Ray,而是在现有 Nginx 配置中调整普通网页入口。
如果只是想快速替换默认页面,静态网站方案最省事,把自己的 HTML、CSS、图片等文件上传到当前 root 目录即可。
如果只是临时显示另一个页面,可以使用反向代理网站方案,但要选择自己可控或允许代理的页面,避免资源加载和跳转问题。
如果想搭建真正的博客,可以使用 WordPress 方案。WordPress 需要 PHP-FPM、MariaDB 和网站目录配置,不建议直接运行会接管端口和 Nginx 的一键脚本。
无论选择哪种方式,都不要重新安装 V2Ray,也不要修改原来的 WebSocket 路径。只需要在现有 Nginx 配置中调整普通网页入口,把伪装域名打开后的页面换成自己需要的网站内容。
| 机房位置 | 带宽 | 流量 | 设备 | 价格 | 购买 |
|---|---|---|---|---|---|
| 洛杉矶 500 | 2.5Gbit | 500GB/月 | 5台 | $5.88/月-$58.88/年 | 购买 |
| 洛杉矶 1000 | 5Gbit | 1T/月 | 无限 | $9.88/月-$98.88/年 | 购买 |
| 洛杉矶 5000 | 5Gbit | 5T/月 | 无限 | $48.99/月-$489.99/年 | 购买 |
| 洛杉矶 10000 | 5Gbit | 10T/月 | 无限 | $93.99/月-$948.99/年 | 购买 |
| 香港 CMI+NTT | 2.5Gbps | 500GB/月 | 5台 | $8.99/月-$89.99/年 | 购买 |
| 香港 CMI+NTT | 5Gbps | 1T/月 | 无限 | $14.90/月-$113.99/年 | 购买 |
| 香港 CMI+NTT | 5Gbps | 5T/月 | 无限 | $59.99/月-$599.99/年 | 购买 |
| 香港 IPLC 专线 | 300MB 独享 | 300GB/月 | 3台 | $21.00/月-$210.00/年 | 购买 |
| 香港 IPLC 专线 | 1G 独享 | 1T/月 | 无限 | $59.00/月-$589.00/年 | 购买 |
| 香港 CN2 GIA | 100MB 独享 | 100GB/月 | 3台 | $34.99/月-$349.99/年 | 购买 |
| 香港 CN2 GIA | 500MB 独享 | 500GB/月 | 5台 | $149.99/月-$1499.99/年 | 购买 |
| 香港 CN2 GIA | 1G 独享 | 1T/月 | 无限 | $279.99/月-$2799.99/年 | 购买 |
| 日本 CN2 GIA | 100MB 独享 | 100GB/月 | 3台 | $29.99/月-$299.99/年 | 购买 |
| 日本 CN2 GIA | 200MB 独享 | 500GB月 | 5台 | $135.99/月-$1349.99/年 | 购买 |
| 日本 CN2 GIA | 500MB 独享 | 1T/月 | 无限 | $239.00/月-$2399.00/年 | 购买 |
| 日本 CN2 GIA | 700MB 独享 | 5T/月 | 无限 | $1135.00/月-$11395.00/年 | 购买 |
| 伦敦 500 | 2.5Gbps | 500GB/月 | 5台 | $6.8/月-$67.99/年 | 购买 |
| 伦敦 1000 | 5Gbps | 1T/月 | 无限 | $11.29/月-$113.99/年 | 购买 |
| 伦敦 5000 | 5Gbps | 5T/月 | 无限 | $59.99/月-$559.99/年 | 购买 |
需要 VPS 服务器?Just My Socks 更适合直接使用代理服务;如果您需要建站、部署项目、搭建环境或学习 Linux,可以选择搬瓦工 VPS,参考 搬瓦工在售 VPS 套餐整理与购买推荐。 |
|||||

搬瓦工教程