搬瓦工机场
Just My Socks教程

V2Ray 伪装搭建网站教程:静态网站、反向代理与 WordPress

本文于 2026-06-07 14:49 更新,部分内容具有时效性,如有失效,请留言

安装好带伪装 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,不建议直接从本文开始操作,应先根据系统选择对应教程:

如果已经安装完成,先检查 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 没有运行,先不要继续修改网站页面,应先回到前面的安装教程排查服务端配置。

Ubuntu 22.04 检查 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。常见主机记录可以使用 @wwwv2rayblog 等。

添加 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 伪装网站都正常后,再根据实际情况决定是否开启代理。

V2Ray 伪装域名 A 记录指向当前 VPS IPv4

检查伪装域名 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 使用的转发路径,不要删除,不要改成本节的静态网站内容。

V2Ray Nginx 配置中的网站目录和 WebSocket 路径

查看 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。

V2Ray 默认伪装网站目录备份结果

查看默认伪装网站目录和备份目录是否存在

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 oktest is successful,说明 Nginx 配置测试通过。部分环境可能同时出现 ssl_stapling ignored 之类的警告,只要配置测试通过,一般不影响本次静态页面替换。

V2Ray 静态网站切换后 Nginx 配置测试成功

测试 Nginx 配置并确认静态网站切换后配置可正常加载

5. 浏览器检查静态网站页面

最后在浏览器中打开:

https://你的域名

如果页面中显示 网站页面已成功替换,说明默认页面已经被替换为自定义静态网站测试页面。

V2Ray 伪装域名显示静态网站测试页面

浏览器打开伪装域名后显示静态网站测试页面

静态网站方案的维护成本低。后续如果要换成正式页面,只需要把网站文件上传到 /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 配置

不建议新手直接使用 nanovi 手动编辑大段 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;,说明普通网页入口已经切换为反向代理配置。

V2Ray Nginx 配置中添加反向代理 location

检查 Nginx 中是否已经添加反向代理 location 配置

4. 测试并重载 Nginx 配置

改完后先测试 Nginx 配置:

/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf

如果输出中看到 syntax is oktest 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 oktest is successful,一般不影响本次反向代理配置。

5. 浏览器检查反向代理页面

浏览器打开:

https://你的域名

如果页面显示 Example Domain,说明反向代理网站已经生效。

V2Ray 伪装域名显示反向代理页面

浏览器打开伪装域名后显示反向代理目标页面

如果页面显示不完整,通常是目标网站资源路径、跳转规则或防盗链导致的,不一定是 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 版本号。

Ubuntu 22.04 查看 WordPress 所需 PHP-FPM socket 路径

查看 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 数据库,以及 wpuserlocalhost,说明 WordPress 需要的数据库和数据库用户已经准备好。

MariaDB 中 WordPress 数据库和 wpuser 用户创建成功

检查 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 -qcp -a 执行成功时通常不会输出提示。可以继续执行下面命令,检查 WordPress 文件是否已经复制到网站目录:

ls -l "$webroot" | head

如果能看到 index.phpwp-adminwp-contentwp-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_NAMEwordpressDB_USERwpuserDB_HOSTlocalhost,并且 DB_PASSWORD 后面已经不是 password_here,说明数据库密码已经写入配置文件。

WordPress wp-config.php 数据库配置检查结果

检查 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 处理。
V2Ray 伪装域名接入 WordPress 的 Nginx 配置检查结果

检查 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 路径和本地转发端口。

V2Ray WebSocket 转发配置在接入 WordPress 后仍然保留

检查接入 WordPress 后 V2Ray WebSocket 本地转发配置仍然存在

7. 测试并重载 Nginx 配置

WordPress 相关配置写入完成后,先测试 Nginx 配置,再重载服务,让新的 WordPress 网站入口生效:

/etc/nginx/sbin/nginx -t -c /etc/nginx/conf/nginx.conf && systemctl reload nginx

如果输出中看到 syntax is oktest is successful,说明 Nginx 配置没有语法错误,并且已经执行重载。

部分环境可能会出现 ssl_stapling ignored 之类的警告,只要同时看到 syntax is oktest is successful,一般不影响 WordPress 访问。

需要注意,单独执行 nginx -t 只是测试配置,不会让新配置生效。如果只测试没有重载,浏览器打开域名时可能还是旧页面。确认测试通过后,必须执行 systemctl reload nginx,或者直接使用上面的合并命令。

8. 浏览器进入 WordPress 安装向导

Nginx 重载完成后,在浏览器中打开:

https://你的域名

正常情况下会进入 WordPress 安装向导。第一次打开时,WordPress 可能会先显示语言选择页面,默认选中的通常是 English (United States)

中文站点可以向下拖动语言列表,找到并选择 简体中文,然后点击 Continue 继续。

V2Ray 伪装域名 WordPress 安装向导选择简体中文

在 WordPress 安装向导中向下拉动语言列表并选择简体中文

选择 简体中文 后,页面会进入 WordPress 安装信息填写界面。这里需要填写站点标题、管理员用户名、管理员密码和邮箱。

测试环境可以填写临时站点名称,例如 测试站点;管理员用户名不要使用 admin,可以改成 wpadmin 这类不容易被猜到的名称。

这里的密码是 WordPress 后台管理员密码,用来登录 /wp-admin 后台,不是前面创建 MariaDB 时使用的数据库密码。

可以使用 WordPress 自动生成的强密码,也可以自己设置一个强密码,填写后要复制保存。邮箱填写自己的常用邮箱即可;如果只是测试安装,也可以临时填写格式正确的测试邮箱。

如果这是测试环境,可以勾选“建议搜索引擎不索引本站点”;如果后续要作为正式网站运营,并希望搜索引擎收录,就不要勾选这一项。填写完成后点击“安装 WordPress”。

WordPress 安装向导填写站点标题和管理员账号信息

填写 WordPress 站点标题、管理员用户名、密码和邮箱

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

V2Ray 伪装域名 WordPress 安装完成提示页面

WordPress 安装完成后显示成功提示和管理员用户名

接下来点击“登录”,会进入 WordPress 后台登录页面。这里填写的是 WordPress 后台管理员账号,不是数据库账号。

用户名填写刚才设置的管理员用户名,例如 wpadmin;密码填写安装时设置或自动生成的 WordPress 后台管理员密码。

V2Ray 伪装域名 WordPress 后台登录页面

使用管理员用户名和密码登录 WordPress 后台

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

V2Ray 伪装域名 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 配置中调整普通网页入口,把伪装域名打开后的页面换成自己需要的网站内容。

Just My Socks 套餐对比与选择
选择提示如果您只是想直接使用代理服务,不想自己购买 VPS、安装系统和维护环境,可以优先考虑搬瓦工官方出品的 Just My Socks
自己搭建上网环境虽然自由,但面对晚高峰线路抽风和 AI 工具(如 Gemini、ChatGPT)频繁的 IP 封锁,维护成本其实很高。如果你想追求极致的省心和纯净度,搬瓦工官方机场(Just My Socks)是目前最好的替代方案。
搬瓦工机场不仅自带 CN2 GIA 高速线路,更重要的是 IP 权重高,能完美解锁各类主流 AI 权限。
下面是目前搬瓦工机场 JMS 详细的套餐介绍:
机房位置带宽流量设备价格购买
洛杉矶 5002.5Gbit500GB/月5台$5.88/月-$58.88/年购买
洛杉矶 10005Gbit1T/月无限$9.88/月-$98.88/年购买
洛杉矶 50005Gbit5T/月无限$48.99/月-$489.99/年购买
洛杉矶 100005Gbit10T/月无限$93.99/月-$948.99/年购买
香港 CMI+NTT2.5Gbps500GB/月5台$8.99/月-$89.99/年购买
香港 CMI+NTT5Gbps1T/月无限$14.90/月-$113.99/年购买
香港 CMI+NTT5Gbps5T/月无限$59.99/月-$599.99/年购买
香港 IPLC 专线300MB 独享300GB/月3台$21.00/月-$210.00/年购买
香港 IPLC 专线1G 独享1T/月无限$59.00/月-$589.00/年购买
香港 CN2 GIA100MB 独享100GB/月3台$34.99/月-$349.99/年购买
香港 CN2 GIA500MB 独享500GB/月5台$149.99/月-$1499.99/年购买
香港 CN2 GIA1G 独享1T/月无限$279.99/月-$2799.99/年购买
日本 CN2 GIA100MB 独享100GB/月3台$29.99/月-$299.99/年购买
日本 CN2 GIA200MB 独享500GB月5台$135.99/月-$1349.99/年购买
日本 CN2 GIA500MB 独享1T/月无限$239.00/月-$2399.00/年购买
日本 CN2 GIA700MB 独享5T/月无限$1135.00/月-$11395.00/年购买
伦敦 5002.5Gbps500GB/月5台$6.8/月-$67.99/年购买
伦敦 10005Gbps1T/月无限$11.29/月-$113.99/年购买
伦敦 50005Gbps5T/月无限$59.99/月-$559.99/年购买
需要 VPS 服务器?Just My Socks 更适合直接使用代理服务;如果您需要建站、部署项目、搭建环境或学习 Linux,可以选择搬瓦工 VPS,参考 搬瓦工在售 VPS 套餐整理与购买推荐
未经允许不得转载:搬瓦工教程 » V2Ray 伪装搭建网站教程:静态网站、反向代理与 WordPress
Vultr 最新优惠活动:新用户注册 Vultr 赠送 50-100 美元

Just My Socks (JMS) 官方线路深度解析与稳定上网方案

搬瓦工官方出品,专为解决网络封锁而生。支持被封自动更换 IP,无需担心失联。拥有 IPLC 专线与 CN2 GIA 顶级链路,全线套餐现货在售。使用专属优惠码 JMS9248225 (5.2% 循环折扣),即刻畅享极速互联。

JMS 套餐汇总JMS 购买教程