标签: virtualhost

Apache2 多个主机名重定向到一个

我正在尝试将多个主机名重定向到一个,例如,如果您输入以下任何一个:

foo.example.com
www.example.com
bar.example.com
eample.com
Run Code Online (Sandbox Code Playgroud)

你必须被重定向到 www.example.com

我已经安装了一个www.example.com作为 ServerName的虚拟主机,其他的作为 ServerAlias,并使用 mod_rewrite 检查主机名是否正确,如果不正确则进行重定向。

问题是一切似乎都与 ServerName 指令主机名一起提供,所以 mod_rewrite 总是得到www.example.com,这与 apache2 文档一致:

例如,假设您正在为域 www.domain.tld 提供服务,并且您希望添加指向相同 IP 地址的虚拟主机 www.otherdomain.tld。然后您只需将以下内容添加到 httpd.conf:

名称虚拟主机 *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain

<VirtualHost *:80>
服务器名称 www.otherdomain.tld
DocumentRoot /www/otherdomain

您也可以指定显式 IP 地址来代替 NameVirtualHost 和指令中的 *。例如,您可能希望这样做是为了在一个 IP 地址上运行一些基于名称的虚拟主机,以及在另一个地址上运行基于 IP 或另一组基于名称的虚拟主机。

许多服务器希望通过多个名称进行访问。这可以通过放置在该部分内的 ServerAlias 指令实现。例如,在上面的第一个块中,ServerAlias 指令指示列出的名称是人们可以用来查看同一网站的其他名称:

ServerAlias domain.tld *.domain.tld 然后对 domain.tld 域中所有主机的请求将由 www.domain.tld 虚拟主机提供服务

是否有任何 apache2 指令来避免此功能并使用它们匹配的 ServerAlias 的主机名获取请求服务器?

或者我必须为重定向创建另一个虚拟主机?

谢谢

virtualhost redirection serveralias apache-2.2

11
推荐指数
1
解决办法
4万
查看次数

_default_ VirtualHost 在端口 80 上重叠

我在我的 apache2 conf 文件中添加了 2 个虚拟主机,如下所示:

<VirtualHost *:80>
    DocumentRoot /var/www/html/site1
    ServerName www.site1.com
    ServerAlias site1.com
</VirtualHost>


<VirtualHost *:80>
    DocumentRoot /var/www/html/site2
    ServerName www.site2.com
    ServerAlias site2.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

然后我在重新启动 apache 后得到错误:

[warn]默认VirtualHost 在 80 端口重叠,第一个优先

搜索谷歌,他们说要取消注释下面的行,所以我做了:

NameVirtualHost *:80
Run Code Online (Sandbox Code Playgroud)

重新启动,现在我没有收到错误消息,但是两个站点都转到第一个站点。

运行 Centos5。我该如何解决这个问题?

virtualhost apache-2.2

10
推荐指数
1
解决办法
1万
查看次数

SSL 站点未在 Apache 和 Ubuntu 中使用正确的 IP

我正在尝试设置一个 apache-ubuntu-php 网络服务器。我的网络服务器将托管多个 SSL 站点,每个 SSL 站点都有自己的 IP 地址(除非有更好的方法来做到这一点)。

所以我想第一步是让 apache 识别至少两个不同的 IP 地址。现在,我有一个网站的 SSL 和非 SSL 版本,分别是http://mysite.comhttps://mysite.com。尽管两者目前都在我的服务器上运行,但我无法让两者都使用不同的 IP 地址。现在,两者都使用 IP 1.1.1.1。我购买了第二个 IP 地址 2.2.2.2,但https://mysite.com不接受它,firefox 抱怨错误“ssl_error_rx_record_too_long”。这是我的 2 个 vhost 文件

/etc/apache2/site-enabled/000-default

#NameVirtualHost 1.1.1.1:80

#<VirtualHost 1.1.1.1:80>
<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order …
Run Code Online (Sandbox Code Playgroud)

ubuntu ssl virtualhost apache-2.2

10
推荐指数
1
解决办法
6910
查看次数

如何禁用对特定虚拟主机的 https 访问?

好的,所以我有一个使用以下指令设置的 Apache 服务器:

NameVirtualHost *:80

<VirtualHost *:80>  
ServerName example1.com  
ServerAlias www.example1.com  
DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
ServerName example2.com
ServerAlias *.example2.com
DocumentRoot /var/www/example2
</VirtualHost>

<VirtualHost example1.com:443>
DocumentRoot /var/www/html
ServerName example1.com:443
SSLEngine on
...
</VirtualHosts>
Run Code Online (Sandbox Code Playgroud)

因此 example1.com 支持 SSL,可以通过 http://example1.com 或 https://example1.com 访问。但是,当我在浏览器中访问 https://example2.com 时,这会产生意外的副作用,即显示 https://example1.com。我想要做的基本上是以某种方式禁用 https://example2.com 或将其重定向到 http://example2.com,这样我在访问它时就不会收到警告和错误的站点。

centos virtualhost apache-2.2

10
推荐指数
1
解决办法
4万
查看次数

仅允许在指定的虚拟主机上访问 PhpMyadmin

我正在处理多虚拟主机环境。我已经为 Mysql 远程控制安装了 PhpMyadmin。

环境配置如下:

one.domain.com
two.domain.com
onlyphpmyadmin.domain.com
Run Code Online (Sandbox Code Playgroud)

现在,如果我访问三个域之一

http://one.domain.com/phpmyadmin/
http://two.domein.com/phpmyadmin/
http://onlyphpmyadmin.domain.com/phpmyadmin/
Run Code Online (Sandbox Code Playgroud)

结果是一样的,允许访问phpmyadmin。

目标是获得如下所示的情况

http://one.domain.com/phpmyadmin/ --> access denied
http://two.domein.com/phpmyadmin/ --> access denied 
http://onlyphpmyadmin.domain.com/phpmyadmin/ -->access allowed
Run Code Online (Sandbox Code Playgroud)

没有类似于

<?php 
if($_SERVER['HTTP_HOST'] != 'onlyphpmyadmin.domain.com')
die('access denied');

 ...
 ?>
Run Code Online (Sandbox Code Playgroud)

在一些 phpmyadmin 文件上。


这是我的 phpmyadmin 配置文件

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php

    <IfModule mod_php5.c>
        AddType application/x-httpd-php .php

        php_flag magic_quotes_gpc Off
        php_flag track_vars On
        php_flag register_globals Off
        php_admin_flag allow_url_fopen Off
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/
    </IfModule>

</Directory>

# Authorize for …
Run Code Online (Sandbox Code Playgroud)

php virtualhost apache-2.2

10
推荐指数
1
解决办法
5万
查看次数

位置指令不起作用

对于我的 NGINX 服务器,我设置了一个虚拟服务器来分发静态内容。目前我正在尝试设置它以便图像具有到期日期。但是,当我为此创建一个位置指令时,一切都会导致 404。

我现在的配置是这样的:

/srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,此文件包含在 /etc/nginx/nginx.conf 中的 http 指令中

我试图访问图像,在,让我们说...... static.example.com/images/screenshots/something.png。果然,图像也存在于/srv/www/static/images/screenshots/something.png。但是,转到上述地址不起作用,只是告诉我404 Not Found

但是,如果我删除location /images并更改location /为以下内容...

location / {
    root /srv/www/static;
}
Run Code Online (Sandbox Code Playgroud)

有用!我在这里做错了什么?

nginx web-server virtualhost http-status-code-404

10
推荐指数
1
解决办法
4万
查看次数

域重定向到 nginx 中的错误站点,配置文件中的多个站点

我在 nginx 上设置了 2 个网站,应该根据访问的域加载正确的网站。

例如: website1.com website2.com

但是,在访问这两个域中的任何一个时,它们都会加载 website1.com。

我的配置有什么问题?两个配置都在启用站点的单独文件中

website1.com 配置

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    root /var/www/website1.com;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name website1.com;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.php?$query_string;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location ~ \.php$ {
        try_files $uri /index.php =404; …
Run Code Online (Sandbox Code Playgroud)

nginx virtualhost php-fpm

10
推荐指数
1
解决办法
1万
查看次数

网络服务器随机服务于不同的虚拟主机

我们已经在 Ubuntu Trusty 上运行了 nginx。它通过 https 为多个网站提供服务,运行在一个 IP 地址上。

随机地,虽然它似乎与工作负载略有关系,但有时单个请求会出现在错误的虚拟主机上。这导致请求lustrum.thalia.nu被服务,thalia.nu反之亦然。当用户突然进入不同的网站时,这会产生令人讨厌的错误页面。当您按下 时F5,用户将再次到达原始目标。

它似乎与浏览器或操作系统无关。已确认在 Firefox(Linux、Windows、Mac)、Edge(Windows)和 Chrome(Linux、Windows、Android)和 Safari(iOS)上发生。

当系统处于负载状态时,该问题似乎更频繁地发生,这表明存在某种竞争条件。

lustrum.thalia.nu

server {
        server_name lustrum.thalia.nu;

        listen 443 ssl;

        ssl on;
        ssl_certificate /etc/nginx/certs/lustrum.thalia.nu.crt;
        ssl_certificate_key /etc/nginx/certs/lustrum.thalia.nu.key;

        add_header Strict-Transport-Security "max-age=63072000; preload";

        root /var/www/thalia-lustrum/public_html;

        location / {
                index index.php;
                try_files $uri $uri/ /index.php?$args;
        }

        # Add trailing slash to */wp-admin requests.
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;

        # Pass all .php files onto a php-fpm/php-fcgi server.
        location ~ [^/]\.php(/|$) {
                include         /etc/nginx/fastcgi_params;

                fastcgi_split_path_info ^(.+?\.php)(/.*)$; …
Run Code Online (Sandbox Code Playgroud)

ssl nginx virtualhost php-fpm tls

10
推荐指数
1
解决办法
350
查看次数

Apache 2.4 虚拟主机的连接被拒绝

我在 Mac OS X 上运行 Apache 2.4。apachectl configtest给我:语法确定。

我设置了两个虚拟主机,一个叫做 localhost,一个叫做 test.dev。

<VirtualHost *:80>
    DocumentRoot "/Users/psychomachine/Development/_localhost"
    ServerName localhost
    ServerAlias www.localhost
    <Directory />
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/psychomachine/Development/test"
    ServerName test.dev
    ServerAlias www.test.dev
    <Directory />
        Require all granted
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

本地主机只是工作:

? curl -I -L localhost                                                                                                                                                              15:51:08
HTTP/1.1 200 OK
Date: Tue, 08 Dec 2015 14:51:17 GMT
Server: Apache/2.4.16 (Unix)
Last-Modified: Tue, 08 Dec 2015 08:52:04 GMT
ETag: "c-5265f1673f500"
Accept-Ranges: bytes
Content-Length: 12
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

而 test.dev …

mac-osx virtualhost

10
推荐指数
2
解决办法
2万
查看次数

如何在我自己的服务器上设置加密 SNI?

我有运行多个虚拟主机的 Web 服务器,我想让窃听者不知道客户端正在访问哪个虚拟主机。已经有一个 TLS 扩展可以解决这个问题:加密 SNI。我看到 Cloudflare 在其服务器上支持它,并且 Firefox 有一个设置可以在客户端上启用它。但是,我找不到有关如何在我自己的服务器上启用此功能的任何文档。我该怎么做呢?(我不依赖于任何特定的服务器堆栈,除了“将其置于 Cloudflare 之后”之外,我将接受任何工作设置/架构。)

ssl virtualhost

10
推荐指数
1
解决办法
8856
查看次数