Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定子域的Apache反向代理_Apache_Reverse Proxy_Virtualhost_Httpd.conf - Fatal编程技术网

特定子域的Apache反向代理

特定子域的Apache反向代理,apache,reverse-proxy,virtualhost,httpd.conf,Apache,Reverse Proxy,Virtualhost,Httpd.conf,我有一个Apache HTTP服务器,它有一个到tomcat服务器的反向代理。但是,我只希望在客户端使用子域www时发生反向代理。这是因为我希望使用其他子域来指向其他应用程序,例如电子邮件 e、 g.www.example.com将显示ApacheTomcatWebApp 我想,实现这一点的方法是配置我的DNS,以便我使用的每个子域都指向我的服务器。现在,除了www,还有server.example.com和posfixadmin.example.com。然而,问题是我的所有子域最终都指向tom

我有一个Apache HTTP服务器,它有一个到tomcat服务器的反向代理。但是,我只希望在客户端使用子域www时发生反向代理。这是因为我希望使用其他子域来指向其他应用程序,例如电子邮件

e、 g.www.example.com将显示ApacheTomcatWebApp

我想,实现这一点的方法是配置我的DNS,以便我使用的每个子域都指向我的服务器。现在,除了www,还有server.example.com和posfixadmin.example.com。然而,问题是我的所有子域最终都指向tomcat

因此,当我试图访问postfixadmin.example.com/setup.php通过其web设置来设置postfixadmin时,它最终会将我带到我的tomcat webapp的404

以下是我的virtualhost配置:

<VirtualHost www.example.com:80>
    ServerName http://www.example.com
    ProxyPass / http://localhost:8080
    ProxyPassReverse / http://localhost:8080
</Virtualhost>

<VirtualHost server.example.com:80>
    ServerName server.example.com
    DocumentRoot /var/www/html/
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =server.example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} {END,NE,R=permanent}
</VirtualHost>

<VirtualHost postfixadmin.example.com:80>
    ServerName postfixadmin.example.com
    DocumentRoot /var/www/postfixadmin/public

    ErrorLog /var/log/httpd/postfixadmin_error.log
    CustomLog /var/log/httpd/postfixadmin_access.log combined

    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>

    <Directory /var/www/postfixadmin/public>
       Options FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
</VirtualHost>


服务器名http://www.example.com
ProxyPass/http://localhost:8080
ProxyPassReverse/http://localhost:8080
ServerName server.example.com
DocumentRoot/var/www/html/
重新启动发动机
RewriteCond%{SERVER_NAME}=SERVER.example.com
重写规则^https://%{SERVER_NAME}%{REQUEST_URI}{END,NE,R=permanent}
ServerName postfixadmin.example.com
DocumentRoot/var/www/postfixadmin/public
ErrorLog/var/log/httpd/postfixadmin\u error.log
CustomLog/var/log/httpd/postfixadmin\u access.log组合
选项如下符号链接
允许超越所有
选项如下符号链接多视图
允许超越所有
命令允许,拒绝
通融
编辑 看起来代理配置文件没有做任何事情(??)。我决定尝试一下,将第一个virtualhost服务器名更改为:

<VirtualHost *:80>
    ServerName abcd.example.com
    ProxyPass / http://localhost:8080
    ProxyPassReverse / http://localhost:8080
</Virtualhost>

服务器名abcd.example.com
ProxyPass/http://localhost:8080
ProxyPassReverse/http://localhost:8080

然后,我重新启动并重新加载了Apache…但出于某种原因,访问www.example.com仍然让我访问了tomcat webapp!有人知道这是什么原因吗?

至于DNS:我已经为每个子域(包括www)设置了特定的CNAME条目;所有这些都指向我的服务器的公共IP,它包含我的example.com域(在我的例子中使用@,我认为大多数DNS都可能使用@)。在这方面可能会有一些不同的策略,但根据你在问题中提出的建议,我相信你走的是正确的道路

关于Apache配置: 我认为
http
协议不需要在
ServerName
指令中指定,而且通常,域不需要出现在
标签中

我应该提到,我对Tomcat相对不熟悉,但我假设它正在本地主机上以8080进行监听,在这种情况下,这应该会有所帮助

我不能百分之百确定这就是困扰您的全部原因,但请尝试将
ServerName
向后修剪,并这样做,包括对
VirtualHost
open标记的更改:

<VirtualHost *:80>
    ServerName www.example.com
    ProxyPass / http://localhost:8080
    ProxyPassReverse / http://localhost:8080
</Virtualhost>
最后,与最后一个标签上的开头标记类似的更改:

<VirtualHost *:80>
    ServerName postfixadmin.example.com
    DocumentRoot /var/www/postfixadmin/public

    ErrorLog /var/log/httpd/postfixadmin_error.log
    CustomLog /var/log/httpd/postfixadmin_access.log combined

    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>

    <Directory /var/www/postfixadmin/public>
       Options FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
</VirtualHost>

ServerName postfixadmin.example.com
DocumentRoot/var/www/postfixadmin/public
ErrorLog/var/log/httpd/postfixadmin\u error.log
CustomLog/var/log/httpd/postfixadmin\u access.log组合
选项如下符号链接
允许超越所有
选项如下符号链接多视图
允许超越所有
命令允许,拒绝
通融
总的来说,这更像是您想要的:


服务器名www.example.com
ProxyPass/http://localhost:8080
ProxyPassReverse/http://localhost:8080
ServerName server.example.com
DocumentRoot/var/www/html/
重新启动发动机
RewriteCond%{SERVER_NAME}=SERVER.example.com
重写规则^https://%{SERVER_NAME}%{REQUEST_URI}{END,NE,R=permanent}
ServerName postfixadmin.example.com
DocumentRoot/var/www/postfixadmin/public
ErrorLog/var/log/httpd/postfixadmin\u error.log
CustomLog/var/log/httpd/postfixadmin\u access.log组合
选项如下符号链接
允许超越所有
选项如下符号链接多视图
允许超越所有
命令允许,拒绝
通融
我明白了

原来问题出在ssl配置文件中-443个端口重叠


谢谢你的帮助

谢谢你的回复。8080是文章中的一个输入错误,但不是在我的配置文件中,谢谢你指出这一点。然而,这一变化似乎对我没有什么影响。另外,我使用的是一个记录,而不是CNAME记录来指向我的IP地址。我的每个子域都指向服务器IP,但裸域不指向。应该吗?我无法评论你下面的自我回答,但很高兴听到你得到了!老实说,我说这是一个CNAME可能是不正确的;我总是把它们颠倒过来,这是我在写答案时没有查到的一件事。但在我的例子中,我的所有内容都指向服务器IP。(我的特定安装将配置分布在多个.conf文件中,因此我完全可以理解您的困境,因为我在网上看到的大多数说明都指向不完全适合我的安装的解决方案!)
<VirtualHost *:80>
    ServerName postfixadmin.example.com
    DocumentRoot /var/www/postfixadmin/public

    ErrorLog /var/log/httpd/postfixadmin_error.log
    CustomLog /var/log/httpd/postfixadmin_access.log combined

    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>

    <Directory /var/www/postfixadmin/public>
       Options FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName www.example.com
    ProxyPass / http://localhost:8080
    ProxyPassReverse / http://localhost:8080
</Virtualhost>

<VirtualHost *:80>
    ServerName server.example.com
    DocumentRoot /var/www/html/
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =server.example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} {END,NE,R=permanent}
</VirtualHost>

<VirtualHost *:80>
    ServerName postfixadmin.example.com
    DocumentRoot /var/www/postfixadmin/public

    ErrorLog /var/log/httpd/postfixadmin_error.log
    CustomLog /var/log/httpd/postfixadmin_access.log combined

    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>

    <Directory /var/www/postfixadmin/public>
       Options FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
</VirtualHost>