要在 Nginx 上同时支持 HTTP 和 WebSocket,可以配置 Nginx 作为反向代理将传入的 WebSocket 连接转发到本地的目标端口,并且保持 HTTP 请求的正常代理。

    以下是一个示例 Nginx 配置文件的片段,展示了如何实现这个目标:

    1. server {
    2. listen 443 ssl;
    3. server_name yourdomain.com;
    4. ssl_certificate /path/to/ssl_certificate.crt;
    5. ssl_certificate_key /path/to/ssl_certificate.key;
    6. location / {
    7. proxy_pass http://localhost:6789;
    8. proxy_http_version 1.1;
    9. proxy_set_header Upgrade $http_upgrade;
    10. proxy_set_header Connection "upgrade";
    11. }
    12. }

    这个配置假设已经有一个有效的 SSL 证书用于 HTTPS 连接,并将其路径指定在 ssl_certificate 和 ssl_certificate_key 中。

    关键部分是在 location / 块中的配置。proxy_pass 指令将所有传入的请求代理到本地的 6789 端口。proxy_http_version 指令设置使用 HTTP/1.1 协议,proxy_set_header Upgradeproxy_set_header Connection 指令会将 Upgrade 和 Connection 标头传递给后端服务器,以启用 WebSocket 连接。

    通过这样配置,Nginx 将同时支持 HTTP 和 WebSocket 连接,将传入的请求代理到本地的 6789 端口上。请确保后端应用程序(运行在本地的 6789 端口上)能够处理和响应 WebSocket 连接。

    将上述配置文件的内容添加到 Nginx 配置中,并重新加载 Nginx 配置文件,以使配置生效。