Ubuntu20.04 安装与配置 Apache

说明: 本文章内容在 Ubuntu20.04 版本下测试通过,其他版本未知。

1. 安装


Ubuntu20.04 中 Apache 软件包为 apache2
运行下面的命令来更新软件包索引,并且安装 Apache

sudo apt update
sudo apt install apache2

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

sudo systemctl status apache2

2. 配置


2.1 HTTP 和 HTTPS 端口

Apache 监听了端口80(HTTP)和443(HTTPS)。你需要在防火墙打开那些端口,以便网站服务器从互联网上是可以访问的。

假设你正在使用UFW,你可以通过启用Apache Full配置,它包含了这两个端口的规则:

sudo ufw allow 'Apache Full'
2.2 apache2 默认的几个配置文件:
  • /etc/apache2/apache2.conf
    是主要配置文件(这个文件的末尾可以看到,include了其它所有的配置文件)。
  • /etc/apache2/ports.conf
    始终包含在主配置文件中。它用于确定传入连接的侦听端口,默认为80,我们一般都会重新配置新的端口。
  • /etc/apache2/sites-enabled,/etc/apache2/conf-enabled,/etc/apache2/mods-enabled
    其它配置文件目录。
  • /var/www/html
    apache2的默认web目录:(在/etc/apache2/sites-enabled/000-default.conf 里可以看到这个 DocumentRoot /var/www/html 配置)
  • /etc/apache2/envvars
    apache2 的默认用户是 www-data,定义在该文件中。
  • /etc/apache2/mods-enabled/dir.conf
    设置默认主页的配置文件
2.3 修改默认端口,比如修改为5000
sudo vim /etc/apache2/ports.conf

找到如下内容:

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

Listen 80 修改为 Listen 5000 即可, 443https 端口,如果有需要也可以修改。需要注意的是,如果是有多个站点,并且站点端口都不一样,那么则需要增加多个 Listen 侦听选项。比如服务器上有两个站点 site1 和 site2 ,site1 使用的 5000 端口,site2 使用的 6000 端口,完整的 ports.conf 应该是类似如下:

Listen 5000
Listen 6000

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>
2.4 修改默认的网站根目录

apache2为了安全起见,只允许/var/www、/usr/share下面的文件夹被访问,如果要指定其它目录为网站根目录,需要修改配置文件 /etc/apache2/apache2.conf

sudo vim /etc/apache2/apache2.conf

找到下面的配置片段

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

在配置下面添加指定的目录,比如 /mnt/www

<Directory /mnt/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

重启服务使修改生效

sudo systemctl reload apache2
2.5 配置一个虚拟主机

Apache 默认启动了一个虚拟主机。所有域名都指向服务器 IP 地址,匹配了默认的虚拟主机。如果你只托管一个简单的网站,你需要将网站内容上传到/var/www/html,并且编辑虚拟主机配置文件 /etc/apache2/sites-enabled/000-default.conf

如果想搭建更多网站,需要为每一个网站创建一个虚拟主机配置。

example.com 为例,第一步就是创建根目录文件夹:

# 指定网站根目录为 /mnt/www/example.com , -p 参数的作用为递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
sudo mkdir -p /mnt/www/example.com

在网站根目录下创建一个index.html文件来测试站点:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>测试站点</title>
  </head>
  <body>
    <h1>恭喜!如果看到这个页面,说明访问成功啦!</h1>
  </body>
</html>

apache2 的默认用户为 www-data ,修改网站根文件夹的用户归属,避免权限问题:

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

下一步就是为 example.com 创建一个虚拟主机配置(最佳实践就是将每一个虚拟主机配置存储成一个独立的文件)。

Apache虚拟主机配置文件存储在/etc/apache2/sites-available目录, 标准命名是使用域名来命名配置文件。

sudo touch /etc/apache2/sites-available/example.com.conf

编辑配置,添加以下内容:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /mnt/www/example.com

    <Directory /mnt/www/example.com>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>

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

sudo a2ensite example.com

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

sudo apachectl configtest

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

Syntax OK

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

sudo systemctl reload apache2

最终,在浏览器中打开 http://example.com,看看是否已经可以成功访问。

3. 常用命令


# 启动 apache2 服务
sudo systemctl start apache2

# 关闭 apache2 服务
sudo systemctl stop apache2

# 重启 apache2 服务
sudo systemctl reload apache2

# 查看 apache2 状态
sudo systemctl status apache2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342