我正在进行如下特定设置:
ServerName
提供某些内容并将其他ServerName
转发给{{1} },让nginx完成负载均衡工作我遇到的问题是要重定向到nginx的主机名数量正在快速增长,而且我有一个烦人的vhost列表,这些列表很难维护。
所以,问题是:有没有办法在没有ServerNames的情况下在apache中定义默认vhost,并将所有与其他vhost不匹配的流量重定向到localhost:8080?
我已经尝试删除localhost:8080
指令,但我遇到的问题是ProxyPassReverse将其ServerName
插入到传出的URL中。
目前,我唯一能做的就是将每个虚拟主机中的行数减少到最小,但它仍然太多了。
这里有一些配置示例:
Nginx的:
hostname
的Apache:
upstream foo {
server foo1.local:9999 max_fails=3 fail_timeout=30s;
server foo2.local:9999 max_fails=3 fail_timeout=30s;
}
upstream bar {
server bar1.local:8888 max_fails=3 fail_timeout=30s;
server bar2.local:8888 max_fails=3 fail_timeout=30s;
}
server {
listen *:8080;
server_name foo.public.com;
access_log /var/log/nginx/foo.public.com-access.log proxy;
error_log /var/log/nginx/foo.public.com-error.log;
location / {
proxy_pass http://foo/;
include /etc/nginx/proxy_app.conf;
}
}
server {
listen *:8080;
server_name bar.public.com;
access_log /var/log/nginx/bar.public.com-access.log proxy;
error_log /var/log/nginx/bar.public.com-error.log;
location / {
proxy_pass http://bar/;
include /etc/nginx/proxy_app.conf;
}
}
在这个例子中,只有两个vhost被转发到nginx,但在我的实际设置中有超过30个!
正如我所说,我已经尝试使用没有<VirtualHost *:80>
ServerName foo.public.com
ErrorLog /var/log/httpd/nginx-redirect.sis.service-error.log
CustomLog /var/log/httpd/nginx-redirect.sis.service-access.log combined
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://%{HTTP_HOST}:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName bar.public.com
ErrorLog /var/log/httpd/nginx-redirect.sis.service-error.log
CustomLog /var/log/httpd/nginx-redirect.sis.service-access.log combined
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://%{HTTP_HOST}:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName baz.public.com
DocumentRoot /some/local/path
<Directory "/">
some irrelevant options
</Directory>
</VirtualHost>
标记的单个虚拟主机来转发流量,但我最终在重定向中获得了http://balancer.local/some/path,这显然无效。< / p>
我还尝试使用单个ServerName
和多个ServerName
,但在这种情况下,ProxyPassReverse始终使用响应中的ServerName。
有什么建议吗?
答案 0 :(得分:1)
我还尝试使用单个ServerName和多个ServerAlias,但在这种情况下,ProxyPassReverse始终使用响应中的ServerName。
可能你的Apache配置中有UseCanonicalName On
。
尝试在VirtualHost中明确设置Off
。