laravel - 在 apache 服务器上为 laravel 配置 https
问题描述
我在 ovh 上有一个 vps,其中有许多通过“sites-aviable.conf”(apache)配置的站点。
需要考虑的是,我的 vps 没有域名,只是 ovh 提供的一个名称,所以如果我尝试在某个发布 ssl 证书的机构上使用它,它就可以使用!我需要为某些站点设置 https 而不是 http,所以我开始使用开放 ssl 生成自签名证书。然后我检查端口 443 是否处于监听状态,它似乎没问题。然后我将APP_URL
.env 文件上的 http 更改为 https,但没有任何变化。
sites-aviable.conf
包含以下内容:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/AAAA/public
ServerName http://xxxxxxxxxxxx.net
Alias /web2 /var/www/html/BBBBB/public
<Directory /var/www/html/AAAAA>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Allow from all
</Directory>
<Directory /var/www/html/BBBBB>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
所以这对我来说即使是 443 端口也应该复制,还是我错了?(我尝试将 80 粗略更改为 443 但没有用)
我尝试在相同的“sites-aviable.conf”上添加这部分:
DocumentRoot /var/www/html/AAAAAAA/public
ServerName http://XXXXXXXXXXX.net
Redirect permanent / https://XXXXXX.net
在这<VirtualHost *:80>
部分,然后在我在这部分下面添加:
<VirtualHost _default_:443>
ServerName https://XXXXXXXXXX.net
DocumentRoot /var/www/html/AAAAAAAA/public
SSLEngine On
</VirtualHost>
如何将其设置到我的服务器?
如果我使用 https 访问 url,我会收到“未找到”的 apache 错误
解决方案
如果要同时支持 http 和 https,则需要为端口 80 和端口 443 定义虚拟主机。但是,在端口 443 的虚拟主机中,您还需要指定 SSL 证书文件和 SSL 证书密钥文件。
因此,只需复制您的 http 定义并更新端口和 SSL 信息。您的 .conf 文件将如下所示(基于您在问题中提供的 VirtualHost 定义。
# http
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/AAAA/public
ServerName xxxxxxxxxxxx.net
Alias /web2 /var/www/html/BBBBB/public
<Directory /var/www/html/AAAAA>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Allow from all
</Directory>
<Directory /var/www/html/BBBBB>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# https
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/AAAA/public
ServerName xxxxxxxxxxxx.net
Alias /web2 /var/www/html/BBBBB/public
# Your SSL configuration. Update the File and KeyFile information
# below to point to your SSL certificate.
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/ssl-cert-snakeoil.pem"
SSLCertificateKeyFile "/etc/ssl/private/ssl-cert-snakeoil.key"
<Directory /var/www/html/AAAAA>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Allow from all
</Directory>
<Directory /var/www/html/BBBBB>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
确保在更新配置后重新启动 apache。
此外,您的 https 网址现在应该可以使用,但由于您使用的是自签名证书,您的浏览器仍然会抱怨它不安全且不受信任。我假设这是针对开发环境的,所以这不应该是一个问题。如果这是用于其他人打算使用的生产站点,那么您应该从受信任的机构获得真正的 SSL 证书(LetsEncrypt 有免费的 SSL 证书)。
推荐阅读
- c# - 无法识别 App_Code 中剃刀视图中的全局助手
- npm - 使用 http 检查最新版本的 npm
- php - 如何在 PHP 中以详细模式调用 curl?
- laravel - Laravel Homestead 在 SSH 身份验证方法上挂起:安装了 WSL2 的 Windows 10 上的私钥
- node.js - Sequelize V6 - 加入多列
- arrays - 定位数组中的特定项
- sql-server - Alembic 迁移在 Windows 服务器的 mssql 中显示错误。我该如何解决这个问题?
- javascript - 每个循环一次只选中一个复选框
- reactjs - React Native Expo:useEffect 和 setParams 不起作用
- python-3.x - 如何将变量传递给 sha1 方法?