我是 proxypass 的新手,假设这是我们的配置:
<IfModule mod_ssl.c>
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ServerName www.xzos.net
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias xzos.net
SSLCertificateFile /etc/letsencrypt/live/www.xzos.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.xzos.net/privkey.pem
<LocationMatch "/ray/">
ProxyPass ws://127.0.0.1:1080/ray/ upgrade=WebSocket
ProxyAddHeaders Off
ProxyPreserveHost On
RequestHeader set Host %{HTTP_HOST}s
RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
</LocationMatch>
</VirtualHost>
</IfModule
由于我们将这些提供给 apache
SSLCertificateFile /etc/letsencrypt/live/www.xzos.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.xzos.net/privkey.pem
我们不应该也需要在运行的 websocket 服务器中使用它们,对ws://127.0.0.1:1080/ray/
吗?
即使我们可以做到,但 Apache 处理得对吗?我想,因为这是本地服务器,所以专门做两次是多余的。我认为如果我们这样做,那么ws://127.0.0.1:1080/ray/
需要成为wss://127.0.0.1:1080/ray/
我们提供相同证书密钥的 websocket 服务器内部。
使用 proxyPass 代理到本地主机上不安全的侦听器仍然可以暴露攻击面。您是否担心有人在本地主机上嗅探流量?如果我是一个具有适当访问权限的不法分子,我可以在端口 1080 上的环回接口上进行 tcpdump 并读取流量。如果你使用 wss:// 那么这样做会更加困难。我会在两个链接上都使用 TLS,除非有技术原因不这样做,或者如果我正在调试应用程序并需要在该过程中获取更多信息。