我通常会遇到虚拟主机和Apache的问题。我所缺少的是对它的工作原理的一个大的解释,而不是一个特定的命令,让我解释一下:
我有一个域my.domain,并且关联了一个SSL证书。我无法为诸如toto.my.domain之类的子域生成证书。
我有4个正在运行的服务:
我在sites-available文件夹中创建了4个配置文件。对于Zabbix和Nextcloud,它们不是虚拟主机,而只是使用Alias和Directory指令进行配置。
通过此配置,我可以通过https://my.domain/zabbix访问Zabbix,并通过https://my.domain/nextcloud访问Nextcloud
对于Emby和Transmission,我想通过以下方式访问它:
因此,我通过脚本编写的副本从互联网上粘贴了以下vhost conf,它似乎适用于每个人。
传输用
<VirtualHost *:443>
ServerName my.domain
ServerAlias www.my.domain
Redirect permanent /transmission https://my.domain/transmission
RewriteEngine on
RewriteRule /transmission[/]?$ /transmission/web/ [R]
ProxyRequests On
ProxyPreserveHost Off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass /transmission http://127.0.0.1:9091/transmission
ProxyPassReverse /transmission http://127.0.0.1:9091/transmission
</Virtualhost>
<VirtualHost *:80>
ServerName my.domain
ServerAlias www.my.domain
Redirect permanent /transmission https://my.domain/transmission
</Virtualhost>
对于Emby
<VirtualHost *:80>
ServerName my.domain
Redirect permanent /emby https://my.domain/emby
</VirtualHost>
<VirtualHost *:443>
ServerName my.domain
RewriteEngine on
RewriteRule ^/emby$ /emby/ [R]
<proxy *>
Order Allow,Deny
Allow from all
</proxy>
ProxyRequests Off
ProxyPreserveHost On
Header set Connection "Upgrade"
RequestHeader setifempty Connection "Upgrade"
Header set Upgrade "websocket"
RequestHeader setifempty Upgrade "websocket"
# Notice!!! Put me before http!!!
ProxyPass /socket ws://localhost:8096/socket
ProxyPassReverse /socket ws://localhost:8096/socket
# Notice!!! Put me after ws!!!
ProxyPass / http://localhost:8096/
ProxyPassReverse / http://localhost:8096/
</VirtualHost>
问题是,由于我只有一个域名,因此我无法创建实际上不是真正的虚拟主机的“虚拟主机”。就我而言,Zabbix和Nextcloud不是Vhost,Emby和Transmission共享相同的域名,所以我们不能说这些是Vhost吗?
这些配置的结果是,如果我首先启用传输,则可以工作,但Emby无法。我收到消息您没有访问/ emby的权限
如果我先启用Emby,则Emby可以工作,但是Transmission不能。我收到消息,您无权访问/ transmission / web /
阅读此https://httpd.apache.org/docs/2.4/vhosts/name-based.html和特定语句后,我了解Apache的行为“如果在包含以下内容的虚拟主机集中找不到匹配的ServerName或ServerAlias最具体的匹配IP地址和端口组合,然后是将使用的第一个列出的匹配虚拟主机。 ”。
这就是为什么Emby在我首先启用它的情况下工作的原因,而在我首先启用Transmission的情况下也是如此。
所以最后一个问题是:如何解决!
预先感谢您的任何提示!
是的,在同一address:port上为同一域创建多个VirtualHosts没有任何意义。如果要使用相同的路径(URL),则Web服务器无法区分它们。如果它们打算服务于不同的路径,则一台VirtualHost已经可以做到这一点。
因为Emby似乎只使用路径/emby/
,不需要整个根/
,所以首先要相应地调整其ProxyPass;然后将所有Web应用程序的所有ProxyPass设置都放在同一VirtualHost中。同样,将所有“重定向到HTTPS”设置组合到一个VirtualHost中。
如果某些Web应用程序需要不同的设置,请使用<Location>
VirtualHost内部的块。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句