首页 > 解决方案 > 在 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 错误

标签: laravelhttpsopensslubuntu-18.04

解决方案


如果要同时支持 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 证书)。


推荐阅读