问题描述
我想使用 Traefik 作为 Ratchet WebSocket 服务器背后的反向代理(deploy section 中建议的第三个选项)。
目标是使用反向代理管理 HTTPS 和 wss,同时在 Ratchet 服务器上保留简单的 HTTP 和 ws。
我的 WebSocket 服务器暴露在端口 8080 上,例如 this example:
public function run()
{
$loop = React\EventLoop\Factory::create();
$pusher = new Pusher();
// Listen for the web server to make a ZeroMQ push after an AJAX request
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://0.0.0.0:5555');
$pull->on('message',array($pusher,'onEntry'));
// Set up our WebSocket server for clients wanting real-time updates
$webSock = new React\Socket\Server('0.0.0.0:8443',$loop);
$webServer = new IoServer(
new HttpServer(
new WsServer(
new WampServer(
$pusher
)
)
),$webSock
);
$loop->run();
}
在 this post 之后,我已经能够通过 Traefik 配置 HTTPS。
这是我的简化版docker-compose.yml:
Nginx:
image: wodby/Nginx:$Nginx_TAG
container_name: "${PROJECT_NAME}_Nginx"
depends_on:
- PHP
environment:
Nginx_STATIC_OPEN_FILE_CACHE: "off"
Nginx_ERROR_LOG_LEVEL: debug
Nginx_BACKEND_HOST: PHP
Nginx_SERVER_ROOT: /var/www/html/webroot
Nginx_VHOST_PRESET: $Nginx_VHOST_PRESET
volumes:
- ./html:/var/www/html:cached
labels:
- "traefik.http.routers.${PROJECT_NAME}_Nginx.rule=Host(`${PROJECT_BASE_URL}`)"
- "traefik.http.middlewares.${PROJECT_NAME}_Nginx_https.redirectscheme.scheme=https"
- "traefik.http.routers.${PROJECT_NAME}_Nginx.entrypoints=web"
- "traefik.http.routers.${PROJECT_NAME}_Nginx.middlewares=${PROJECT_NAME}_Nginx_https@docker"
- "traefik.http.routers.${PROJECT_NAME}_Nginx_https.rule=Host(`${PROJECT_BASE_URL}`)"
- "traefik.http.routers.${PROJECT_NAME}_Nginx_https.tls=true"
- "traefik.http.routers.${PROJECT_NAME}_Nginx_https.entrypoints=websecure"
PHP:
build:
context: .
dockerfile: docker/PHP-fpm/Dockerfile
container_name: "${PROJECT_NAME}_PHP"
volumes:
- ./html:/var/www/html
labels:
- "traefik.http.routers.PHP.rule=Host(`${PROJECT_BASE_URL}`)"
traefik:
image: traefik:v2.0
container_name: "${PROJECT_NAME}_traefik"
command:
- "--api.insecure=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--providers.docker=true"
- "--providers.file.filename=/etc/traefik/dynamic_conf/config.yml"
- "--providers.file.watch=true"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./docker/traefik/config.yml:/etc/traefik/dynamic_conf/config.yml" # used to define the certificate path
- "./docker/certs:/tools/certs"
但是,我现在如何将 HTTPS/wss 到 HTTP/ws 转发到 PHP 服务?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)