簡體   English   中英

如何在具有別名的虛擬主機上配置 Apache 以將 HTTP 重定向到 HTTPS?

[英]How to configure Apache to redirect HTTP to HTTPS on a virtualhost that have an alias?

我有一個如下配置的虛擬站點,它將所有 HTTP 請求重定向到 HTTPS:

<VirtualHost *:80>

        ServerName api.example.com

        ProxyPreserveHost on
        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/

        RewriteEngine on
        RewriteCond %{HTTP:Upgrade} websocket [NC]
        RewriteCond %{HTTP:Connection} upgrade [NC]
        RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L]

        RewriteCond %{SERVER_NAME} =api.example.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

但是下面的配置不起作用,它只是為站點的 HTTP 版本的用戶服務:

<VirtualHost *:80>

        ServerName secondexample.co.zw
        ServerAlias www.secondexample.co.zw
        ProxyPreserveHost on
        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/

        RewriteEngine on
        RewriteCond %{HTTP:Upgrade} websocket [NC]
        RewriteCond %{HTTP:Connection} upgrade [NC]
        RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L]

        RewriteCond %{SERVER_NAME} =www.secondexample.co.zw [OR]
        RewriteCond %{SERVER_NAME} =secondexample.co.zw
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

我注意到的唯一區別是第二個配置有一個別名。 第二個配置有什么問題?

 <VirtualHost *:80> ServerName secondexample.co.zw ServerAlias www.secondexample.co.zw ProxyPreserveHost on ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ RewriteEngine on RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L] RewriteCond %{SERVER_NAME} =www.secondexample.co.zw [OR] RewriteCond %{SERVER_NAME} =secondexample.co.zw RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>

規則順序不對。 規范重定向(HTTP 到 HTTPS)需要放在首位。 但是,如果您想從 HTTP 重定向到 HTTPS,則此處不需要任何代理指令,應將其刪除。 大概代理指令在<VirtualHost *:443>容器中重復。

如果您只是將 HTTP 重定向到 HTTPS,那么您不需要使用 mod_rewrite。 更簡單的 mod_alias Redirect指令更可取。 並且您應該將主機名規范化(www 與非 www)作為重定向的一部分(除非您正在實施 HSTS),而不是重定向到同一主機。

例如,它可以簡化為:

<VirtualHost *:80>
    ServerName secondexample.co.zw
    ServerAlias www.secondexample.co.zw
    Redirect 301 / https://secondexample.co.zw/
</VirtualHost>

然后,所有代理指令都在<VirtualHost *:443>容器中。

這同樣適用於您的第一個虛擬主機。

我注意到的唯一區別是第二個配置有一個別名。

Alias在這里沒有區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM