我在 Linode 上运行了一台服务器,它有 3 个子域。每个子域都是一个不同的 Angular 8 应用程序,并且有自己的后端。
xyz.example.com
- xyz.example.com:8080
abc.example.com
- abc.example.com:8081
pqr.example.com
- pqr.example.com:8082
它们三个都运行良好,但是,它是在 http 上,并且“不安全的连接”图标一直存在。
我使用“certbot --apache”安装了 SSL 证书。前端没有问题,但是它不再与后端通信。
我一直收到“net::ERR_SSL_PROTOCOL_ERROR”错误。
经过一些搜索,我认为将 apache 配置为反向代理运行可能会有所帮助(但不确定)。
这是我的 xyz.example.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName app.nordy.com.br
ServerAlias www.app.nordy.com.br
DocumentRoot /var/www/html/app.nordy.com.br/dist
<Directory /var/www/html/app.nordy.com.br/dist>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.app.nordy.com.br [OR]
RewriteCond %{SERVER_NAME} =app.nordy.com.br
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
这是我的默认 ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
有人能告诉我该怎么做或者给我指明正确的方向吗?我该怎么做才能让事情恢复正常?谢谢。
答案1
您的 http 虚拟主机只会重定向到 https。是吗?您可以使用以下方法轻松完成此操作
<VirtualHost *:80>
ServerName abc.example.com
ServerAlias www.abc.example.com
Redirect permanent / https://abc.example.com/
</VirtualHost>
现在,在您的 https 虚拟主机中,您需要代理到后端的连接。例如
<VirtualHost *:443>
ServerName abc.example.com
ServerAlias www.abc.example.com
SSLEngine on
ProxyPass / http://abc.example.com:8081
ProxyPassReverse / http://abc.example.com:8081
</VirtualHost>