当前位置:   article > 正文

ubuntu apache2 安装和配置安装ssl证书

ubuntu apache2

一、前提条件

在开始安装之前,要确保你以 sudo 权限用户身份登录。

二、安装 Apache

Apache 被包含在默认的 Ubuntu 软件源中。
安装非常直接。在 Ubuntu 和 Debian 系统中,Apache 软件包和服务被称为 apache2
运行下面的命令来更新软件包索引,并且安装 Apache:

  1. sudo apt update
  2. sudo apt install apache2

当安装过程完成,Apache 服务将会被自动启动。
你可以通过输入下面的命令,验证 Apache 是否正在运行:

sudo systemctl status apache2

输出将会告诉你,服务正在运行,并且启动了开机启动。

  1. ● apache2.service - The Apache HTTP Server
  2. Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  3. Active: active (running) since Sat 2020-05-09 19:28:40 UTC; 36min ago
  4. ...

就这些,你已经成功地在你的 Ubuntu 20.04上安装了 Apache,你可以开始使用它了。

三、打开 HTTP 和 HTTPS 端口

Apache 监听了端口80(HTTP)和443(HTTPS)。你需要在防火墙打开那些端口,以便网站服务器从互联网上是可以访问的。
假设你正在使用UFW,你可以通过启用Apache Full配置,它包含了这两个端口的规则:

sudo ufw allow 'Apache Full'

验证改变:

sudo ufw status

输出如下:

  1. Status: active
  2. To Action From
  3. -- ------ ----
  4. 22/tcp ALLOW Anywhere
  5. Apache Full ALLOW Anywhere
  6. 22/tcp (v6) ALLOW Anywhere (v6)
  7. Apache Full (v6) ALLOW Anywhere (v6)

四、验证 Apache 安装

想要验证一切都顺利工作,打开你的浏览器,输入服务器 IP 地址http://YOUR_IP_OR_DOMAIN/,你可以看到默认的 Ubuntu 20.04 Apache 欢迎页面,如图所示:

以下非必要设置

五、设置一个虚拟主机

一个虚拟主机,是一个 Apache 配置指令,它允许你在一个服务器上运行多个网站。典型的例子,一个虚拟主机描述了一个网站。
Apache 默认启动了一个虚拟主机。所有域名都指向服务器 IP 地址,匹配了默认的虚拟主机。如果你只托管一个简单的网站,你需要将网站内容上传到/var/www/html,并且编辑虚拟主机配置,/etc/apache2/sites-enabled/000-default.conf文件。
如果你想托管更多网站,你需要为每一个网站创建一个虚拟主机配置。在这一节,我们将会为一个域名"example.com"设置网站。你可能需要将"example.com"替换成你自己的域名。
第一步就是创建根目录文件夹,域名的网站文件将会被存放在这里并且响应用户请求。运行下面的命令,创建文件夹:

sudo mkdir -p /var/www/example.com

为了测试,在域名根文件夹下创建一个index.html文件:

  1. <!DOCTYPE html>
  2. <html lang="en" dir="ltr">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Welcome to example.com</title>
  6. </head>
  7. <body>
  8. <h1>Success! example.com home page!</h1>
  9. </body>
  10. </html>

创建完成后,保存并且退出。
如果想要避免权限问题,可以修改域名根文件夹的用户归属为apache 用户(www-data):

sudo chown -R www-data: /var/www/example.com

接下来就是为域名“example.com”创建一个虚拟主机配置。最佳实践就是将每一个虚拟主机配置存储成一个独立的文件。
Apache虚拟主机配置文件存储在/etc/apache2/sites-available目录。标准命名是使用域名来命名配置文件。
打开你的文本编辑器,并且创建如下文件/etc/apache2/sites-available/example.com.conf

  1. <VirtualHost *:80>
  2. ServerName example.com
  3. ServerAlias www.example.com
  4. ServerAdmin webmaster@example.com
  5. DocumentRoot /var/www/example.com/public_html
  6. <Directory /var/www/example.com/public_html>
  7. Options -Indexes +FollowSymLinks
  8. AllowOverride All
  9. </Directory>
  10. ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
  11. CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
  12. </VirtualHost>

Apache 不会读取/etc/apache2/sites-available文件夹下的配置文件,除非它们被链接到/etc/apache2/sites-enabled文件夹。
想要激活虚拟主机配置,使用a2ensite创建一个链接:

sudo a2ensite example.com

测试配置文件,是否有任何语法错误:

sudo apachectl configtest

如果没有任何错误,你将会看到下面的输出:

Syntax OK

重启 Apache 服务,使修改生效:

sudo systemctl restart apache2

以下开始配置SSL

1.证书准备,上传到服务器,建议在apache2目录下建立ssl目录来放置证书文件

2. 配置证书

在这里,我假设你已经会配置基本的/etc/apache2/sites-available/000-default.conf这个文件来达到已经可以通过 http 的方式来访问你的站点。

在/etc/apache2这个目录下,有两个有关的目录sites-available和sites-enabled,我们进入sites-enabled目录下可以发现,里面有一个文件000-default.conf

  1. $ ll
  2. lrwxrwxrwx 1 root root 35 Dec 28 15:24 000-default.conf -> ../sites-available/000-default.conf

实质上这个文件是/etc/apache2/sites-available/000-default.conf这个文件的软链接

我们要配置另 ssl 证书,要依靠另一个文件,也就是default-ssl.conf,首先我们需要设置一个软链接,把这个文件链接到sites-enabled这个文件夹中:

ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf

然后去修改这个文件000-default-ssl.conf,因为已经做了软链接,其实这时候修改000-default-ssl.conf或default-ssl.conf都一样。

这个文件没有做任何修改前长这样子(去除自带的注释之后):

  1. <IfModule mod_ssl.c>
  2. <VirtualHost _default_:443>
  3. ServerAdmin webmaster@localhost
  4. DocumentRoot /var/www/html
  5. ErrorLog ${APACHE_LOG_DIR}/error.log
  6. CustomLog ${APACHE_LOG_DIR}/access.log combined
  7. SSLEngine on
  8. SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
  9. SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
  10. <FilesMatch "\.(cgi|shtml|phtml|php)$">
  11. SSLOptions +StdEnvVars
  12. </FilesMatch>
  13. <Directory /usr/lib/cgi-bin>
  14. SSLOptions +StdEnvVars
  15. </Directory>
  16. </VirtualHost>
  17. </IfModule>

然后把从阿里云上面下载好的证书(3个文件)传到你自定义的目录中

然后我们需要修改一下,修改成这样:

  1. <IfModule mod_ssl.c>
  2. <VirtualHost _default_:443>
  3. ServerAdmin 你的邮箱
  4. DocumentRoot /var/www/你的目录
  5. ServerName 你的域名
  6. ErrorLog ${APACHE_LOG_DIR}/error.log
  7. CustomLog ${APACHE_LOG_DIR}/access.log combined
  8. SSLEngine on
  9. # 注意,需要添加这三行
  10. SSLCertificateFile 你自定义的路径/2_xxx.xxx.xxx.crt
  11. SSLCertificateKeyFile 你自定义的路径/3_xxx.xxx.xxx.key
  12. SSLCertificateChainFile 你自定义的路径/1_root_bundle.crt
  13. <FilesMatch "\.(cgi|shtml|phtml|php)$">
  14. SSLOptions +StdEnvVars
  15. </FilesMatch>
  16. <Directory /usr/lib/cgi-bin>
  17. SSLOptions +StdEnvVars
  18. </Directory>
  19. </VirtualHost>
  20. </IfModule>

重要的三个参数的作用如下表:

配置文件参数说明
SSLEngine on启用 SSL 功能
SSLCertificateFile证书文件
SSLCertificateKeyFile私钥文件
SSLCertificateChainFile证书链文件

改好之后保存。

然后这时,我们加载一下 Apache2 的 SSL 模块:

  1. sudo a2enmod ssl #加载模块
  2. sudo service apache2 restart # 重启服务

这时,在浏览器输入https://你的域名应该已经可以通过 https 的方式来访问网站了,这时浏览器那里应该也已经有了一个绿色的小锁。

但是,但是…这还不够,因为我们如果不主动输入https://的话,直接输入域名,还是会直接跳转到 80 端口的普通的 http 方式访问,所以我们需要强制使用 https 来访问

强制使用https

我们只需要打开/etc/apache2/sites-available/000-default.conf这个文件,在你的这个标签内随便一个地方加上三行:

  1. RewriteEngine on
  2. RewriteCond %{HTTPS} !=on
  3. RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]

然后保存,然后启动 Apache2 的重定向:

 sudo a2enmod rewrite

然后再重启 Apache2,至此大功告成:

sudo service apache2 restart

然后,打开浏览器直接输入域名,就会自动跳转到 https 的方式。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/218013
推荐阅读
相关标签
  

闽ICP备14008679号