NickyHaris
V2EX  ›  问与答

<VirtualHost *:80>为什么总拦截处理 https 的请求?

  •  
  •   NickyHaris · Apr 17, 2022 · 1375 views
    This topic created in 1532 days ago, the information mentioned may be changed or developed.

    如下一份配置,本来是将 http 重定向 https 的,之前用在 club 域名上,一切正常,现在换成 com 域名,结果总导致过多重定向错误。(另一份处理 443 端口的没帖上来。)

    确定是这个配置的问题,是因为将 RewriteEngine on 改成 off 后,问题就解决了。可是这个虚拟主机是处理 80 端口的问题的啊。为什么访问 https://www.example.com 的时候,他总要插手呢?

    <VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
    
        DocumentRoot /var/www/html/example
        <Directory /var/www/html/example/>
                Options -Indexes +FollowSymLinks
                Include /etc/apache2/custom.d/globalblacklist.conf
                DirectoryIndex index.php
                AllowOverride All
                Require all denied
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/example_error.log
        CustomLog ${APACHE_LOG_DIR}/example_access.log combined
    
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =example.com
        RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
        RewriteCond %{SERVER_NAME} =www.example.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>
    
    
    8 replies    2022-04-19 18:22:21 +08:00
    NickyHaris
        1
    NickyHaris  
    OP
       Apr 17, 2022
    问题已解决,是 cloudflare 的问题,开启了 Development Mode 可是还是用了缓存。
    将 dns 中的 a 记录从 proxied 改成 dns only ,或者开着 Development Mode 时清除 cache 问题消失了,不知何故。
    是我对 Development Mode 理解有误,还是怎么了?

    Development Mode 的备注解释是:
    Temporarily bypass our cache. See changes to your origin server in realtime.
    Showfom
        2
    Showfom  
    PRO
       Apr 17, 2022
    CF 的话,你打开 SSL/TLS 设置,改成 Full 或者 Full (strict)

    然后 Edge Certificates 里 Always Use HTTPS 打开
    NickyHaris
        3
    NickyHaris  
    OP
       Apr 18, 2022
    @Showfom 谢谢,问题解决了。请教一下:
    我的 virtualhost 配置文件没问题,dns only 时,可以实现 example.com 重定向到 www.example.com ,http 重定向到 https

    为什么用了 proxied 就会过多重定向呢?而做了你说的两项设置后,问题就解决了。

    SSL/TLS 默认是 flexible ,Edge Certificates 没打开 Always Use HTTPS ,还是不太清楚其中的原理,为什么改了这两个配置项就没有循环重定向了?
    Showfom
        4
    Showfom  
    PRO
       Apr 18, 2022   ❤️ 1
    @nowheretoseek #3 因为你不打开的话,CF 会默认请求 80 端口,造成无限循环了
    NickyHaris
        5
    NickyHaris  
    OP
       Apr 18, 2022
    @Showfom 原来如此,感谢指教,真是个大坑啊……
    Showfom
        6
    Showfom  
    PRO
       Apr 18, 2022   ❤️ 1
    @nowheretoseek #5

    因为不是所有人都要 https 的,好多还用 http 的,他默认的逻辑是

    Flexible 模式下

    80 端口反代 80 端口
    443 端口也反代 80 端口

    但是你本地设置了 80 端口按照请求的 server_name 跳转 443 ,他就无限跳转了

    SSL/TLS 设置 Full 以后,443 端口只会去请求你服务器的 443 端口,不会再去请求 80 端口,当然为了防止 CF 中间人攻击,建议使用 Full (strict),你本地的 443 端口需要一张可信的证书

    如果 80 端口不需要特殊的设置,只想要他跳转 443 的话,开启 Always Use HTTPS 他就会自动跳转并且不会去请求你服务器的 80 端口。
    NickyHaris
        7
    NickyHaris  
    OP
       Apr 18, 2022
    @Showfom 谢谢,这样就说得通了,如果我早些仔细看 Flexible 的说明,就不至于瞎忙活了。

    这样一来,想实现我最初目标,只要开启 Always Use HTTPS 并配置好本机的 443 虚拟主机就好了,80 端口直接可以关闭了。
    Showfom
        8
    Showfom  
    PRO
       Apr 19, 2022
    @nowheretoseek #7 建议都打开,就丢给 CF 自己处理 80 端口去
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2608 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 11:20 · PVG 19:20 · LAX 04:20 · JFK 07:20
    ♥ Do have faith in what you're doing.