宝塔Nginx环境下配置网站访问追加index.php

本文详细介绍了如何在Nginx中使用URL重写规则,特别是针对不存在的请求路径将请求重定向到index.php,这对于PHP应用的路由管理至关重要。

放在站点配置文件中

 location / {
          if (!-e $request_filename) {
                  rewrite ^/(.*)$ /index.php/$1 last;
          }   
  		}
[root@yfw ~]# cd /www/wwwroot/yfw_szrengjing_com [root@yfw yfw_szrengjing_com]# chmod +x install-wp-im.sh [root@yfw yfw_szrengjing_com]# ./install-wp-im.sh --domain yfw.szrengjing.com --site-root /www/wwwroot/yfw_szrengjing_com 🚀 开始部署增强型 WebSocket IM 系统 🌐 域名: yfw.szrengjing.com 📁 网站根目录: /www/wwwroot/yfw_szrengjing_com 🔌 插件路径: /www/wwwroot/yfw_szrengjing_com/wp-content/plugins/wp-im-plugin 📁 创建插件目录... ✅ 已生成并授权 im-server.php (支持 JWT) 📦 初始化 Composer 并安装依赖... 📄 composer.json 已存在,跳过创建 ✅ vendor 目录已存在,跳过安装 ✅ 已生成 WordPress 插件主文件 ✅ 已生成前端测试页面: /www/wwwroot/yfw_szrengjing_com/websocket-test.html 📌【重要】请将以下配置添加到你的 Nginx 中: server { listen 80; server_name yfw.szrengjing.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name yfw.szrengjing.com; root /www/wwwroot/yfw_szrengjing_com; index index.php index.html; ssl_certificate /ssl/fullchain.pem; ssl_certificate_key /ssl/privkey.pem; location / { try_files $uri $uri/ /index.php?$args; } # WebSocket 反向代理 location /im-ws { proxy_pass http://127.0.0.1:2121; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; 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_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ✅ 已生成 systemd 服务: /etc/systemd/system/wp-im-server.service ✅ 权限设置完成 🎉 ========================================= ✅ IM 系统部署成功! ========================================== 🔧 1. 编辑 Nginx 配置: sudo nano /www/server/panel/vhost/nginx/yfw.szrengjing.com.conf 添加上面的 server 块或合并到现有站点 🔄 2. 重启 Nginx: sudo systemctl restart nginx ▶️ 3. 启动 IM 服务: sudo systemctl enable wp-im-server sudo systemctl start wp-im-server 🔍 4. 查看状态: sudo systemctl status wp-im-server tail -f /tmp/workerman_stdout.log 🌐 5. 测试访问: https://yfw.szrengjing.com/websocket-test.html 🔑 SECRET_KEY: p7jurynOs7pDJ9har/pU9His (请备份用于后续开发) 💡 扩展建议: - 添加数据库记录消息历史 - 实现私聊功能(toUserId) - 集成 Redis 存储在线状态 - 使用 WAF 防止攻击 💪 你现在可以实现完整的实时通信系统! [root@yfw yfw_szrengjing_com]# WebSocket IM 实时聊天测试 状态:等待连接... 发送
最新发布
11-14
你已经成功运行了部署脚本 ✅,并且看到输出日志表明: - `im-server.php` 已生成 - Composer 依赖已安装 - Nginx 配置提示已完成 - systemd 服务已创建 - 前端测试页已就位 现在你想在浏览器中访问: 👉 https://yfw.szrengjing.com/websocket-test.html 但你在终端里输入了 `WebSocket IM 实时聊天测试` 和 `发送` —— 这不是命令行能处理的,说明你可能误以为可以在这里测试 WebSocket 聊天功能。 --- ## ✅ 当前状态分析 | 项目 | 状态 | |------|------| | 脚本执行 | ✅ 成功完成 | | 文件生成 | ✅ 全部存在 | | Nginx 配置 | ⚠️ 尚未合并进现有站点 | | IM 服务启动 | ❌ 还未执行 `systemctl start wp-im-server` | | WebSocket 服务监听 | ❌ 2121 端口尚未开启 | | 浏览器访问测试页 | ⚠️ 若 Nginx配置则无法连接 WSS | --- ## 🛠️ 下一步操作:让 WebSocket 正常工作 ### 🔧 第一步:将生成的 Nginx 配置合并到你的站点 你的服务器使用的是 **宝塔面板**(路径 `/www/server/panel/vhost/nginx/...`),所以不能直接替换整个配置文件,否则会破坏原有 WordPress 设置。 ### ✅ 正确做法:只添加 WebSocket 反向代理块 #### 编辑当前站点配置: ```bash sudo nano /www/server/panel/vhost/nginx/yfw.szrengjing.com.conf ``` 在 `server { ... }` 块中(通常是 HTTPS 的那个 server),找到类似位置: ```nginx location ~ \.php$ { include ... } ``` **在这之后、`}` 之前**,插入以下内容: ```nginx # WebSocket 反向代理 location /im-ws { proxy_pass http://127.0.0.1:2121; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; 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_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } ``` > 💡 注意:不要加 `listen 80;` 或 `listen 443;`,因为这是追加到已有 `server` 中! 保存并退出:`Ctrl+O → Enter → Ctrl+X` --- ### 🔧 第二步:重启 Nginx ```bash sudo systemctl restart nginx ``` 确保没有报错: ```bash sudo nginx -t # 检查语法 ``` --- ### 🔧 第三步:启动 IM 后端服务 ```bash sudo systemctl enable wp-im-server sudo systemctl start wp-im-server ``` 检查是否运行成功: ```bash sudo systemctl status wp-im-server ``` 你应该看到: ``` active (running) ``` 查看日志确认服务已监听: ```bash tail -f /tmp/workerman_stdout.log ``` 预期输出: ``` ✅ IM Server started at 2025-04-05 10:00:00 ``` 也可以检查端口是否监听: ```bash ss -tulnp | grep :2121 ``` 应有输出类似: ``` tcp LISTEN 0 10 0.0.0.0:2121 0.0.0.0:* users:(("php",pid=1234,fd=6)) ``` --- ### 🔧 第四步:开放防火墙端口(如果启用) 虽然你通过 Nginx 的 `/im-ws` 路径反向代理,**实际不需要开放 2121 外网访问**,但本地通信需允许: ```bash # 如果用了 firewalld sudo firewall-cmd --permanent --add-port=2121/tcp sudo firewall-cmd --reload # 或者用 ufw(Ubuntu) sudo ufw allow 2121 ``` 不过更安全的做法是:仅限 `127.0.0.1` 访问 2121。 --- ## 🌐 第五步:浏览器测试 打开浏览器,访问: 🔗 https://yfw.szrengjing.com/websocket-test.html 你应该看到: 1. 页面加载成功 2. 状态变为:“✅ 已连接” 3. 日志显示:“🔐 正在认证…” 4. 如果你是登录用户,会收到欢迎消息;否则提示“游客模式” 然后你可以输入消息点击【发送】,所有人可见(广播模式)。 --- ## 🧪 手动测试 PHP 是否能运行 Workerman 进入插件目录手动启动一次看看错误: ```bash cd /www/wwwroot/yfw_szrengjing_com/wp-content/plugins/wp-im-plugin/ php im-server.php start ``` 按 `Ctrl+C` 停止。 如果有报错,比如: - `Class 'Firebase\JWT\JWT' not found` → 表示 `composer install` 没装好 - 权限问题 → 查看用户是否为 `www` 或 `www-data` --- ## ✅ 成功标志总结 | 检查项 | 命令或方式 | 预期结果 | |-------|-----------|---------| | Nginx 配置生效 | `nginx -t && systemctl restart nginx` | 无报错 | | IM 服务运行 | `systemctl status wp-im-server` | active (running) | | 监听 2121 端口 | `ss -tnlp \| grep 2121` | 显示 php 进程 | | 日志正常 | `tail /tmp/workerman_stdout.log` | 有 “IM Server started” | | 浏览器连接 | 访问 `/websocket-test.html` | 显示“已连接”,可发消息 | --- ## 🚨 常见问题排查 ### ❌ 页面提示 “连接失败” 或 “Error during WebSocket handshake” 原因: - Nginx配置 `proxy_set_header Upgrade $http_upgrade;` - SSL 证书路径不对(不影响 WebSocket,但页面必须 HTTPS) 解决: - 确保 Nginx 中包含完整的 `location /im-ws { ... }` 块 - 使用 Chrome 开发者工具 → Network → WS 查看错误详情 --- ### ❌ Token 无效 / 认证失败 可能: - SECRET_KEY 不一致 - JWT 解码库未加载 检查: ```bash ls vendor/firebase/php-jwt/ ``` 必须存在。 --- ### ❌ 页面显示“游客模式,无法发言” 说明前端未获取到 WordPress 登录用户的 JWT Token。 这是因为 `wp-im-plugin.php` 是独立插件,必须在 WordPress 后台 **激活插件** 才能调用 `wp_head` 输出 JS 配置! #### 激活插件方法: 1. 登录 WordPress 后台 2. 进入「插件」→ 找到 “WP IM Plugin (Enhanced)” 3. 点击「启用」 刷新页面后再试。 --- ## ✅ 最终验证流程图 ``` [浏览器] ↓ HTTPS 加载 websocket-test.html ↓ 自动连接 wss://yfw.szrengjing.com/im-ws ↓ Nginx 反向代理 → ws://127.0.0.1:2121 ↓ Workerman 接受连接 ↓ 发送 auth + token ↓ JWT 验证通过 → 加入聊天 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wise man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值