我的本地 Apache 服务器有以下配置:
<VirtualHost mysite.local:443>
ServerName mysite.local
SSLEngine on
SSLCertificateFile "/Users/graziano/Projects/mysite/ssl/mysite.local.pem"
SSLCertificateKeyFile "/Users/graziano/Projects/mysite/ssl/mysite.local-key.pem"
SSLProxyEngine On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost access.mysite.local:443>
ServerName access.mysite.local
DocumentRoot "/Users/graziano/Projects/mysite/mysite-backend"
SSLEngine on
SSLCertificateFile "/Users/graziano/Projects/mysite/ssl/access.mysite.local.pem"
SSLCertificateKeyFile "/Users/graziano/Projects/mysite/ssl/access.mysite.local-key.pem"
</VirtualHost>
这是我的主持人:
127.0.0.1 localhost
127.0.0.1 mysite.local
127.0.0.1 access.mysite.local
我已经使用以下方法生成了证书文件这个奇妙的工具。
当我访问 时https://mysite.local
,我会被正确重定向到localhost:3000
(提供 Next.js 应用程序),但如果我点击https://access.mysite.local
(Wordpress 安装),Google Chrome 会抱怨连接不安全:
NET::ERR_CERT_COMMON_NAME_INVALID
如果我反转这两个VirtualHost
指令,即将底部的指令移到顶部,反之亦然,那么它就https://access.mysite.local
可以工作,但随后https://mysite.local
又不工作,并出现上述相同的错误。
我需要完成这项工作来测试 Next.js 应用程序和 Wordpress 安装之间共享的身份验证 cookie。
答案1
如果你想要一个简单的重定向,你最好按照以下方式进行操作并跳过 mod_proxy 请求:
重定向 301 /https://本地主机:3000/
否则不需要此行:
ProxyPassReverse /http://本地主机:3000/
在您的远程服务器(localhost:3000)上,您可能需要在 vhost 配置中添加以下行:
SetEnvIf X-Forwarded-Proto https HTTPS=on
在您的代理上,您可能需要添加以下行:
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
我还建议阅读这篇文章:
我如何测试我的 apache 服务器是否是开放代理?
关于您的 vhost 配置:
我会在第一行用 * 或 IP 地址(即 127.0.0.1)替换 mysite.local 和 access.mysite.local,使其:
<VirtualHost *:443>
然后重新加载 Apache...