当你想要通过Apache使用Mattermost时

首先

在确认可以构建Mattermost(可以通过端口号连接)并且已经允许了相应端口号的防火墙的基础上,我们将继续进行讨论。
如果不能构建,请参考其他人的发帖。
这次我参考了以下的发帖。

CentOS 7.2 上安装 Mattermost – shadowhat 写的帖子
http://qiita.com/shadowhat/items/c29a6d0362a2742425ba

环境如下,请根据操作系统的不同进行相应的更改。

環境内容OSCentOS 7.3.1611mattermost3.4.0 TeamEditionmattermostの言語(サーバー・クライアント)日本語(Beta)apache2.4.6

模块的检查(启用)

由于本次使用了Websocket,因此需要准备必要的apache模块。CentOS版本的apache基本上应该已经加载了,所以不需要特别配置。如果没有加载的话,请将以下内容添加到httpd.conf文件中:LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

這個問題

这次我使用VirtualHost进行配置。以下内容是在配置proxy之前的设置。

<VirtualHost team.example.com:80>
DocumentRoot "/var/www/html"
ServerName team.example.com
RewriteEngine on
RewriteRule ^(.*)$ https://team.example.com/ [R=301,L]
<Directory "/var/www/html">
allow from all
Require all granted
</Directory>
</VirtualHost>
<VirtualHost team.example.com:443>
DocumentRoot "/var/www/html"
ServerName team.example.com:443
<Directory "/var/www/html">
allow from all
Require all granted
</Directory>
Header always set Strict-Transport-Security "max-age=15768000"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/team.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/team.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/team.example.com/chain.pem
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on
SSLCompression          off
</VirtualHost>

項目は設定する必要はないと思いますが一応設定しています。

team.example.comにしていますが、適宜変更してください。
SSL証明書は”Let’s Encrypt”を使用していますが、他のものでも構いません。

我需要将代理服务器设置为这个,但以下的内容是错误的。

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / "http://localhost:8065/"
ProxyPassReverse / "http://localhost:8065/"

在上述的设置中,虽然可以进行连接,但无法使用WebSocket进行通信。即使查看日志也是如此。

[YYYY/MM/DD {TIME} JST] [EROR] github.com/mattermost/platform/api.connect:31 :: ウェブソケット接続エラー: websocket: could not find connection header with token 'upgrade'

因此无法进行实时聊天,只能退出。

这是正确答案 (Zhè shì dá’àn)

Header add Upgrade "Websocket"
Header add Connection "Upgrade"
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / "ws://localhost:8065/"
ProxyPassReverse / "ws://localhost:8065/"

如果我这次在SSL的虚拟主机上进行了设置。
如果你改变了端口号,请更改相应的端口。
这样就可以作为WebSocket连接,并可以进行实时聊天。

额外的东西

最初に,我将ProxyPass和ProxyPassReverse的配置设置为http://localhost:8065,但不小心忘记了最后的斜线导致资源加载错误,所以务必在最后加上斜线,不能忘记。哈哈哈……

虽然将协议设置为ws可以工作,但将其设置为wss后却出现了”内部服务器错误”。也许是我没有正确处理好这个问题吧…

设定完毕后,为了安全起见,请关闭相关端口的防火墙!(或者可以将连接等待地址更改为localhost:8065或127.0.0.1:8065)

bannerAds