gpt4 book ai didi

通过 SSL 与 nginx 的 PHP websockets

转载 作者:可可西里 更新时间:2023-11-01 12:20:30 29 4
gpt4 key购买 nike

如何在 nginx 中使用 PHP 设置 websockets?

我已经看过这个教程了,但是还是不行

https://www.sanwebe.com/2013/05/chat-using-websocket-php-socket

已经将三个文件复制到www目录的根目录

/index.php/jquery-3.1.1.js/websocket/server.php

index.php 中,我更改了 URI

var wsUri = "wss://domain.com/websocket/server.php";

在nginx中我添加了这个

http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
location /websocket/ {
proxy_pass https://domain.com:9000/websocket/server.php;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}

http://nginx.org/en/docs/http/websocket.html

启动websocket服务器

php -q /var/www/websocket/server.php

聊天位于 https://domain.com/chat.php 并加载但在聊天窗口中出现此错误 发生错误 - 连接已关闭/p>

也试过通过这个工具连接,但是报错

http://www.websocket.org/echo.html

ERROR: undefined
DISCONNECTED

如果通过浏览器请求

wss://domain.com/websocket/server.php


ERR_DISALLOWED_URL_SCHEME

最佳答案

我在您的配置文件中发现了一些小问题;我的观察如下:

  • 运行 php -q/var/www/websocket/server.php 将启动简单的套接字服务器。它不会是 SSL;我想这就是你通过 nginx 传递它的原因。不是吗?
  • 因此 proxy_pass https://domain.com:9000/websocket/server.php; 不应该是 https。您也不需要完整路径,因为它是一个简单的 tcp 套接字而不是文件路径。因此只需 proxy_pass http://127.0.0.1:9000; 就可以了。
  • 如果您在 nginx 上实现 SSL;这些设置在哪里?
  • 在所有新浏览器中;您无法从安全的 https 页面访问不安全的 http 或 ws 资源。

因此下面是我的配置文件,它似乎按预期工作。

 server {
listen 8080 default_server;
listen 8443 ssl;

ssl_certificate /home/ubuntu/Desktop/php-sock/newcert.pem;
ssl_certificate_key /home/ubuntu/Desktop/php-sock/newkey.pem;

root /home/ubuntu/Desktop/php-sock;

index index.php index.html index.htm;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location /websocket/ {
proxy_pass http://127.0.0.1:9000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}

同时将 index.php 更改为 var wsUri = "wss://localhost:8443/websocket/";

关于通过 SSL 与 nginx 的 PHP websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41841676/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com